Menu
CoddyTech

Nút bấm và onClick

Thuộc phần Xây dựng trò chơi thực tế trong hành trình Unity của Coddy. Bài học 6 trên 60.

GameObject > UI > Button - TextMeshPro tạo một nút: một hình ảnh để nhấp vào, một thành phần Button và một đối tượng con Text (TMP) làm nhãn. onClick của Button là một sự kiện, một danh sách các phương thức được gọi khi bạn nhả nút chuột trên nút đó. Một tập lệnh thêm phương thức của mình vào danh sách đó bằng AddListener, một lần trong Start(). Button thuộc không gian tên 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) truyền chính phương thức, không có dấu ngoặc đơn. AddListener(Ring()) sẽ gọi Ring ngay lập tức rồi truyền giá trị mà phương thức trả về, nhưng phương thức không trả về gì, nên đoạn này không biên dịch được: Đối số 1: không thể chuyển đổi từ 'void' sang 'UnityEngine.Events.UnityAction'. Một listener không nhận tham số và trả về void. Nếu thêm trong Update(), cùng một phương thức sẽ lại được thêm vào danh sách sau mỗi khung hình, khiến một lần nhấp chuột làm chuông reo hàng trăm lần. Một lần nhấp chỉ được tính khi nhấp vào chính nút đó, còn Input.GetMouseButtonDown(0) trả về true khi nhấp ở bất cứ đâu.

Thuộc tính interactable của nút quyết định nút có thể sử dụng được hay không. bellButton.interactable = false; làm nút đổi màu theo Disabled Color và không gọi các listener cho đến khi thuộc tính được đặt lại thành true, nhờ đó người chơi biết nút nào đang hoạt động. Trên điện thoại, bạn chạm vào các nút đó.

challenge icon

Thử thách

Dễ

Làm cho các nút Lên và Xuống của thang máy hoạt động.

  1. Trong Start(), kết nối upButton với GoUp (floor++) và downButton với GoDown (floor--) bằng onClick.AddListener.
  2. Viết ShowFloor(), gọi hàm này trong Start() và sau mỗi lần di chuyển: tọa độ y của thang máy là floor * floorHeight, còn floorText hiển thị Floor: 2.
  3. Nút Lên có thể tương tác khi tầng hiện tại thấp hơn topFloor, nút Xuống có thể tương tác khi tầng hiện tại cao hơn 0.

Nhấn Chơi: nút Lên chuyển sang màu xám ở tầng cao nhất. Sau đó nhấn Kiểm tra.

Tự làm thử

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()
    {
        // Liên kết upButton và downButton với các phương thức (methods) đưa thang máy lên hoặc xuống một tầng
    }
}

Tất cả bài học trong Xây dựng trò chơi thực tế

Tự luyện tập: Playground Unity