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 đó.
Thử thách
DễLàm cho các nút Lên và Xuống của thang máy hoạt động.
- Trong
Start(), kết nốiupButtonvớiGoUp(floor++) vàdownButtonvớiGoDown(floor--) bằngonClick.AddListener. - Viết
ShowFloor(), gọi hàm này trongStart()và sau mỗi lần di chuyển: tọa độ y của thang máy làfloor * floorHeight, cònfloorTexthiển thịFloor: 2. - 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ế
1Văn bản trên màn hình
Canvas và văn bảnHiển thị điểm sốĐịnh dạng sốĐồng hồ đếm ngượcÔn tập: Đồng hồ tốc độ7Điều khiển thời gian
Tạm dừng bằng timeScaleChuyển động chậmThời gian không bị co giãnÔn tập: Bullet Time2Nút bấm và màn hình
Nút bấm và onClickLambdaKết nối trong InspectorBật và tắt bảngThanh máuÔn tập: Cửa hàng nâng cấp5Lưu dữ liệu với PlayerPrefs
Lưu một sốTải với giá trị mặc địnhĐiểm cao nhấtLưu cài đặtÔn tập: Tiền xu trong ngân hàngTự luyện tập: Playground Unity