Menu
CoddyTech

Vào và thoát

Thuộc phần Vật lý và lối chơi trong hành trình Unity của Coddy. Bài học 20 trên 71.

Một trigger gửi thêm hai thông điệp nữa. OnTriggerExit(Collider other) chạy một lần ở bước vật lý khi vùng chồng lấp kết thúc, dù nó kết thúc theo cách nào. OnTriggerStay(Collider other) chạy ở mỗi bước vật lý trong suốt thời gian vùng chồng lấp tồn tại, mặc định là 50 lần mỗi giây, giống như FixedUpdate(). Cả ba đều nhận cùng một Collider.

Luồng khí đi lên này nâng mọi thứ nổi bên trong nó và thông báo khi chúng rời đi:

public float lift = 15f;

void OnTriggerStay(Collider other)
{
    other.attachedRigidbody.AddForce(Vector3.up * lift);
}

void OnTriggerExit(Collider other)
{
    Debug.Log(other.name + " left the updraft");
}

Lực tác động thuộc về một bước vật lý, nên OnTriggerStay phù hợp: lực đẩy được áp dụng một lần mỗi bước khi quả bóng còn ở bên trong và dừng lại ngay khi nó rời đi. Luồng khí đi lên không có Rigidbody, vì vậy mọi vật thể đi vào đều phải có một Rigidbody, và attachedRigidbody ở đây không bao giờ là null. Để áp dụng một lực theo giây bên trong OnTriggerStay, hãy nhân với Time.deltaTime, giá trị này trong một bước vật lý chính là độ dài của bước, 0.02. Mỗi lần đi vào, một collider sẽ gọi OnTriggerEnter và sau đó gọi OnTriggerExit một lần.

challenge icon

Thử thách

Dễ

Bật đèn khi có bất kỳ vật gì trong khu vực bốc dỡ.

  1. Thêm trường int inBay;. Trong Start(), đặt lamp.enabled = false;.
  2. Trong OnTriggerEnter, tăng inBay thêm 1 và đặt lamp.enabled = true;.
  3. Trong OnTriggerExit, giảm inBay đi 1 và chỉ tắt đèn khi giá trị bằng 0.

Nhấn Chơi rồi đẩy các thùng vào và ra: đèn vẫn sáng cho đến khi khu vực bốc dỡ trống. Sau đó, nhấn Kiểm tra.

Tự làm thử

using UnityEngine;

public class LoadingBay : MonoBehaviour
{
    public Light lamp;

    // Đèn sáng khi có bất cứ thứ gì trong khoang và tắt khi khoang trống
}

Tất cả bài học trong Vật lý và lối chơi

Tự luyện tập: Playground Unity