24.03.15 TIL - Unity : 스크립트로 버튼 OnClick 이벤트 연결 | AddListener & RemoveListener

JJwoo·2024년 3월 15일

보통 이렇게 유니티 인스펙터에서 버튼 실행 관련 메서드를 담고 있는 오브젝트를 드래그해서 버튼 OnClick 이벤트를 발생시키는데, 유니티 인스펙터 방식은 메서드명이 바뀌거나 등으로 종종 버튼 이벤트 연결이 해제되기 때문에 스크립트로 해보고 싶었다.

여기서는 onClick.AddListner() 메서드를 사용해보았다.

AddListner ?

UnityEvent 클래스에 속한 메서드.
유니티에서 UnityEvent 클래스는 이벤트에 대한 '구독자' 또는 '리스너'를 추가하거나 제거하여 이벤트를 관리하는 데 사용되는데,
AddListener 메서드는 유니티에서 이벤트에 대한 리스너(listener)를 추가할 때 사용되는 메서드.
주로 유니티의 UI 시스템에서 버튼 클릭과 같은 이벤트에 사용된다.

  • AddListener를 사용하는 이점은, 동적으로 이벤트 리스너를 추가하거나 제거 할 수 있다는 점.

캔버스 하위에 버튼 오브젝트가 있다고 가정한다.
다른 방법도 많지만 일단 버튼을 찾아오는 방법 세 가지 정도를 가정 해보았다.


using UnityEngine.UI; 

// 방법1. 버튼 변수를 선언
public Button startBtn;

void Start()
{
	// 방법2. 자신(캔버스)의 자식 객체에서 버튼을 찾아서 연결 (첫 번째 자식 버튼 오브젝트가 참조 됨)
	startBtn = GetComponentInChildren<Button>()

	// 방법3. 자신의 첫번째 자식 객체에서 버튼을 찾아서 연결 (첫 번째인 경우)
    startBtn = transform.GetChild(0).GetComponent<Button>();

	// OnClick 함수에 OnClickStart 함수 연결
	startBtn.onClick.AddLister(OnClickStart)
}

void OnClickStart() // 스타트 기능 예시
{
	// 클릭 버튼을 누르면 실행할 로직
}

이런 식으로 스크립트 만으로도 OnClick 이벤트를 발생 시킬 수 있다.

반대로

RemoveListener는 이벤트 리스너를 제거해줄 때 사용되는데

    void OnDestroy()
    {
        // 오브젝트가 파괴될 때 리스너 제거
    startBtn.onClick.RemoveListener(OnClickStart);
    }

오브젝트가 파괴될 때 리스너도 제거하여 리소스를 효율적으로 관리하는데 보탬이 될 수도 있다.

profile
개발 모코코

0개의 댓글