Menu
CoddyTech

Collider kích hoạ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 15 trên 71.

Một collider được chọn Is Trigger sẽ không còn là vật thể rắn: các rigidbody đi xuyên qua nó, còn Unity sẽ ghi nhận vùng chồng lấn bằng cách gọi OnTriggerEnter trong script của cả hai đối tượng. Vạch đích, vật phẩm nhặt được và vùng nguy hiểm đều dùng trigger. Trong code, ô này tương ứng với thuộc tính isTrigger của collider.

Vùng báo động của căn hầm này chuyển collider thành trigger khi trò chơi bắt đầu, tương đương với việc chọn ô đó, rồi phát báo động khi lính canh bước vào:

void Start()
{
    GetComponent<Collider>().isTrigger = true;
}

void OnTriggerEnter(Collider other)
{
    Debug.Log("Alarm!");
}

Trigger tuân theo quy tắc giống như va chạm: Unity chỉ kiểm tra một cặp khi ít nhất một trong hai đối tượng có Rigidbody. Hai đối tượng không có Rigidbody sẽ không bao giờ ghi nhận nhau, dù có trigger hay không. Lính canh tuần tra bằng script, nên mỗi lính canh có một Rigidbody động học (Add Component, Rigidbody, chọn Is Kinematic): trọng lực và va đập không ảnh hưởng đến nó, nhưng nó vẫn được tính là một Rigidbody. Nếu lính canh không có Rigidbody, họ sẽ đi xuyên qua vùng đó và Console vẫn trống. Nếu không có isTrigger, vùng đó là một hộp rắn, và một vật thể động học không bao giờ chạm vào collider không có Rigidbody, nên cũng không có gì được ghi lại. Chỉ cần một Rigidbody trong cặp, ở một trong hai đối tượng. Bài học tiếp theo sẽ tìm hiểu về other, collider vừa đi vào.

challenge icon

Thử thách

Dễ

Điều khiển drone bay qua các vòng và để mỗi vòng ghi nhận nó.

  1. Trong Start() của Drone.cs, đặt body = gameObject.AddComponent<Rigidbody>(); và body.isKinematic = true; để drone bay ngang.
  2. Trong Start() của Ring.cs, đặt GetComponent<Collider>().isTrigger = true;.

Nhấn Chơi: drone bay qua các vòng và Console hiển thị Ring1 passed, Ring2 passed và Ring3 passed. Sau đó nhấn Kiểm tra.

Tự làm thử

using UnityEngine;

public class Ring : MonoBehaviour
{
    void Start()
    {
        // Đặt collider của vòng này thành trigger
    }

    void OnTriggerEnter(Collider other)
    {
        Debug.Log(name + " passed");
    }
}

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

Tự luyện tập: Playground Unity