Menu
CoddyTech

버튼과 onClick

Coddy Unity 여정의 실제 게임 만들기 섹션에 포함된 레슨. 60개 중 6번째.

GameObject > UI > Button - TextMeshPro를 추가하면 버튼이 생성됩니다. 클릭할 수 있는 이미지와 Button 컴포넌트, 그리고 버튼 레이블을 표시하는 Text (TMP) 자식 오브젝트가 추가됩니다. Button의 onClick은 이벤트로, 버튼 위에서 클릭을 놓았을 때 호출되는 메서드 목록입니다. 스크립트는 Start()에서 한 번 AddListener를 사용해 자체 메서드를 목록에 추가합니다. Button은 UnityEngine.UI 네임스페이스에 있습니다.

using UnityEngine;
using UnityEngine.UI;

public class Doorbell : MonoBehaviour
{
    public Button bellButton;
    private int rings;

    void Start()
    {
        bellButton.onClick.AddListener(Ring);
    }

    void Ring()
    {
        rings++;
        Debug.Log("Ding! " + rings);
    }
}

AddListener(Ring)은 괄호 없이 메서드 자체를 전달합니다. AddListener(Ring())은 Ring을 즉시 호출하고 반환값을 전달하려 하지만, Ring은 아무것도 반환하지 않으므로 컴파일되지 않습니다. 오류: Argument 1: cannot convert from 'void' to 'UnityEngine.Events.UnityAction'. 리스너는 매개변수를 받지 않고 void를 반환합니다. Update()에서 추가하면 같은 메서드가 매 프레임마다 목록에 다시 추가되어 클릭 한 번에 수백 번 벨이 울립니다. 클릭은 버튼 자체에서만 인식되지만, Input.GetMouseButtonDown(0)은 어디서든 클릭하면 true가 됩니다.

버튼의 interactable은 버튼을 사용할 수 있는지 결정합니다. bellButton.interactable = false;로 설정하면 버튼이 비활성화 색으로 바뀌고, 다시 true로 설정할 때까지 리스너가 호출되지 않으므로 플레이어는 현재 어떤 버튼을 사용할 수 있는지 알 수 있습니다. 휴대폰에서는 같은 버튼을 탭합니다.

challenge icon

챌린지

쉬움

엘리베이터의 위쪽 및 아래쪽 버튼이 작동하게 하세요.

  1. Start()에서 onClick.AddListener를 사용해 upButton을 GoUp(floor++)에 연결하고 downButton을 GoDown(floor--)에 연결하세요.
  2. Start()에서 호출하고 이동할 때마다 호출하는 ShowFloor()를 작성하세요. 엘리베이터의 y 좌표는 floor * floorHeight이고, floorText에는 Floor: 2가 표시됩니다.
  3. 위쪽 버튼은 topFloor 미만일 때, 아래쪽 버튼은 0 초과일 때 상호작용할 수 있습니다.

‘플레이’를 누르세요. 맨 위층에서는 위쪽 버튼이 비활성화됩니다. 그런 다음 ‘확인’을 누르세요.

직접 해보기

using UnityEngine;
using UnityEngine.UI;
using TMPro;

public class Lift : MonoBehaviour
{
    public Button upButton;
    public Button downButton;
    public TMP_Text floorText;
    public int topFloor = 3;
    public float floorHeight = 3f;
    private int floor;

    void Start()
    {
        // upButton과 downButton을 리프트를 한 층 이동시키는 메서드에 연결합니다
    }
}

실제 게임 만들기의 모든 레슨

직접 연습해 보세요: Unity 플레이그라운드