=================================
=================================
=================================
"버튼이 올라오는 순간"은 참 알기 쉽다. 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
=================================
=================================
=================================
'게임엔진관련 > 유니티 엔진' 카테고리의 다른 글
[Unity] 유니티 WebSocket 웹소켓 관련 (2) | 2019.11.25 |
---|---|
[Unity] 유니티 토글 Toggle 버튼 관련 (0) | 2019.11.19 |
[Unity] 유니티 SerializeField 인스펙터 오브젝트 연동 관련 (0) | 2019.11.18 |
[Unity] 유니티 소프트키 관련 (0) | 2019.11.13 |
[Unity] 유니티 종료,Quit, Exit 관련 (1) | 2019.11.13 |