Menu
CoddyTech

버튼과 onClick

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

GameObject > UI > Button - TextMeshPro를 추가하면 버튼이 생성됩니다. 즉, 클릭할 수 있는 Image, 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을 즉시 호출하고 반환값을 전달하게 되는데, 반환값이 없으므로 컴파일되지 않습니다. 오류 메시지는 Argument 1: cannot convert from 'void' to 'UnityEngine.Events.UnityAction'입니다. 리스너는 매개변수를 받지 않고 void를 반환합니다. Update()에서 추가하면 같은 메서드가 매 프레임마다 목록에 다시 추가되어 클릭 한 번에 수백 번 울립니다. 클릭은 버튼 자체에서만 인식되지만, Input.GetMouseButtonDown(0)은 어디서든 클릭하면 true가 됩니다.

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

challenge icon

챌린지

쉬움

타워의 엘리베이터에는 위로 및 아래로 버튼이 있습니다. Lift.cs를 작성하세요(씬에서 upButton, downButton, floorText를 연결합니다).

  • Start()에서 upButton을 엘리베이터를 한 층 올리는 메서드에 연결하고, downButton을 한 층 내리는 메서드에 연결하세요.
  • 층은 0부터 topFloor(3)까지입니다. 엘리베이터는 y = 층 x floorHeight(3) 위치에 있으므로, 2층에서는 y가 6입니다. x와 z는 그대로 유지됩니다.
  • 처음부터 floorText에 Floor: 2처럼 층을 표시합니다.
  • 꼭대기 층에서는 위로 버튼을 조작할 수 없고, 0층에서는 아래로 버튼을 조작할 수 없습니다.

Play를 누르고, 꼭대기까지 갔다가 돌아온 다음 Check를 누르세요.

직접 해보기

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을 엘리베이터를 한 층 이동시키는 메서드에 연결합니다
    }
}
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

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