게임엔진관련/유니티 엔진

[Unity] 유니티 버튼 이벤트 관련

AlrepondTech 2019. 11. 18. 03:17
반응형

 

 

 

 

=================================

=================================

=================================

 

 

 

 

 

 

 

출처: https://m.blog.naver.com/PostView.nhn?blogId=inceleb&logNo=220685447126&proxyReferer=https%3A%2F%2Fwww.google.com%2F

 

"버튼이 올라오는 순간"은 참 알기 쉽다. OnClick() 함수를 제공하기 때문인데,

그렇다면 버튼을 누르고 있을 때 는 어떻게 구현할까?

 

우선 현재 버튼의 상태를 받아오는 방법을 알아보기 위해서 아래와 같은 코드를 작성하겠다.

 

 

using UnityEngine;

using System.Collections;

using UnityEngine.EventSystems;

// 클릭 이벤트를 받기 위해서 UnityEngine.EventSystems 를 사용한다.

 

public class BtnTest: MonoBehaviour, IPointerDownHandler, IPointerUpHandler {

//눌리고 떼는 것을 감지하기 위해 IPointerDownHandler IPointerUpHandler 를 상속받는다.

bool check;

// 전역변수 선언

public void OnPointerDown(PointerEventData eventData)

// 포인터가 다운될 떄 호출된다. 

// 즉, 이 스크립트가 버튼에 들어 있다면 버튼이 눌리는 순간 한번 호출되는 함수

// eventData에는 PointerEventData형이 콜백되는데 유용하게 사용되니 살펴보는 것을 추천한다.

{

check = true;

}

public void OnPointerUp(PointerEventData eventData)

// 포인터가 Up될 때 호출된다. 버튼이라면 버튼이 올라오는 순간 한번 호출되는 함수

{

check = false;

}

}

 

이 코드를 버튼에 넣어 논다면 버튼이 눌릴 떄와 올라올 떄를 구분할 수 있게 된다.

만약 버튼이 눌리고 있을 떄만 캐릭터를 이동시키고 싶다면 Update 함수에 다음 코드를 추가하면 될 것이다.

 

void Update() {

if (check)

transform.Translate (1f, 0f, 0f);

}

 

이벤트 시스템을 활용하여 구현한다면 더욱 쉬운 방법이 있지만 그건 이벤트 시스템을 포스팅 할 떄 같이 적어보겠다.

 

버튼이 눌린 시점 끗!

 

 

 

 

 

=================================

=================================

=================================

 

 

 

 

 

출처: https://docs.unity3d.com/kr/530/ScriptReference/UI.Selectable.OnPointerDown.html


Description
현재의 상태와 Pressed(눌린) 상태의 트랜지션을 평가합니다.

using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using UnityEngine.EventSystems;// Required when using Event data.

public class ExampleClass : MonoBehaviour, IPointerDownHandler// required interface when using the OnPointerDown method.
{
        //Do this when the mouse is clicked over the selectable object this script is attached to.
public void OnPointerDown (PointerEventData eventData) 
{
Debug.Log (this.gameObject.name + " Was Clicked.");
}
}

 

 

 

 

 

=================================

=================================

=================================

 

 

 

 

출처: https://unitytip.tistory.com/48

 

 

안녕하세요.

 또 새로운 내용으로 포스팅하겠습니다.

 유니티 UI작업을 할 때, 버튼을 만들면 드래그&드랍으로 끌어다가 메소드를 연결시키는데요. 어떻게 보면 유니티를 잘 활용한다고 할 수도 있습니다만, 수가 많아지거나 연결해야 할 메소드가 바뀌어 일일이 연결 작업을 하려면 그게 여간 귀찮은 일이 아닐 수 없습니다. 그래서 스크립트로 연결하는 방법이 없을까 하다가 찾아보니까 있길래 기록하는 마음가짐으로 포스팅을 남깁니다.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class ObjectTest : MonoBehaviour
{
    public Button button;
    void Start ()
    {
        button.onClick.AddListener(PrintYes);
    }
    void PrintYes()
    {
        print("yes");
    }
}


 이렇게 onClick.AddListener를 하고 버튼에 연결할 메소드를 붙여주면 에디터에서 일일이 연결해주지 않아도 버튼에 메소드가 연결됩니다. 아주 꿀팁이 아닐 수 없습니다. 오늘은 좀 짧은 내용입니다만 비교적 유용한 내용이 될 것 이라고 생각합니다. 이렇게 한 김에 Button 클래스에 대한 유니티 매뉴얼을 읽고 한번 본격적으로 다뤄보는 시간을 가져보는게 좋을 것 같단 생각이 듭니다. 다음에 할 게 없으면 그렇게 하는 걸로 목표로 하고 하겠습니다.

 감사합니다.

 

 

 

 

=================================

=================================

=================================

 

 

 

#기타관련링크

- https://bluemeta.tistory.com/24

 

- https://onepinetwopine.tistory.com/25

 

- https://blog.danggun.net/2881

 

 

=================================

=================================

=================================

 

 

반응형