코드 추가없이 drag & drop 으로만 button click 이벤트를 처리하는 방법은 상황에 따라 불편할 수 있습니다.
따라서 이번에는 동일한 기능을 code 로 구현해보겠습니다.
AddListener() 를 이용해서 연결하고, RemoveListener() 로 이벤트를 제거하는 방법입니다.
특히 런타임 중에 동적으로 버튼의 동작을 바꾸고 싶을 때는 코드로 이벤트를 등록하는 방법이 더 유용합니다.
먼저 Button 컴포넌트를 가져옵니다. 예시는 다음과 같습니다
using UnityEngine;
using UnityEngine.UI;
public class MyButtonHandler : MonoBehaviour
{
public Button myButton;
void Start()
{
myButton.onClick.AddListener(WhenButtonClicked);
}
void WhenButtonClicked()
{
Debug.Log("버튼이 클릭되었습니다!");
}
}
AddListener() 안에 함수 이름만 넣는 것에 주목해주세요. 괄호를 붙이지 않습니다. 괄호를 붙이면 해당 줄에서 바로 실행되기 때문에, 클릭 시 실행되지 않게 하려면 함수 이름만 전달해야 합니다.
이 방법의 장점은 다음과 같습니다
(1) 코드에서 직접 관리할 수 있어 깔끔합니다.
(2) 런타임 중에 다른 함수를 연결하거나 제거할 수도 있습니다.
(3) 버튼이 많을 경우, 루프를 돌며 일괄적으로 처리하기도 편합니다.
이벤트를 제거하고 싶을 때는 RemoveListener()를 사용하면 됩니다. 예시는 다음과 같습니다
myButton.onClick.RemoveListener(WhenButtonClicked);
이렇게 하면 해당 함수에 대한 이벤트 등록이 해제되어, 더 이상 버튼을 클릭해도 실행되지 않게 됩니다.
보통 게임 오브젝트가 비활성화되거나 특정 상황에서 버튼을 잠시 끄고 싶을 때 유용하게 사용할 수 있습니다.
이번 글에서는 코드로 버튼 이벤트를 연결하는 AddListener() 사용법과, 이벤트를 제거하는 RemoveListener() 까지 함께 알아봤습니다. 인스펙터 방식보다 더 유연하게 제어할 수 있다는 점이 큰 장점입니다. 상황에 따라 선택해서 사용하시면 됩니다.
'Unity' 카테고리의 다른 글
유니티에서 Scene 전환에도 안전한 GameManager class 만들기 (singleton) (0) | 2025.03.30 |
---|---|
PlayerPrefs - 데이터를 간단하게 저장하는 방법 (0) | 2025.03.25 |
Button 클릭 시, 내가 짠 함수를 호출하는 방법 (0) | 2025.03.24 |
Destroy()의 동작 방식 (0) | 2025.03.16 |
유니티 Coroutin 에서 continue 를 쓸 때 주의할 점 (0) | 2025.03.12 |