Menu
CoddyTech

进入与退出

本课属于 Coddy Unity 学习旅程的“物理与游戏玩法”单元。第 20 课,共 71 课。

触发器还会发送另外两种消息。OnTriggerExit(Collider other)会在重叠结束时的物理步中运行一次,无论重叠是如何结束的。只要重叠持续存在,OnTriggerStay(Collider other)就会在每个物理步中运行一次,默认每秒运行 50 次,就像FixedUpdate()一样。这三种消息都使用相同的Collider。

这个上升气流会抬起其中漂浮的物体,并在物体离开时报告:

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");
}

力应该在物理步中施加,因此OnTriggerStay很适合:只要球在内部,就会在每个物理步中施加一次推力;球一离开,推力就会停止。上升气流没有 Rigidbody,因此每个进入的物体都必须有一个,而且这里的attachedRigidbody永远不会是null。如果要在OnTriggerStay中施加每秒的力,请乘以Time.deltaTime。在物理步中,它表示这一步的时长,也就是 0.02。每次进入都会触发一次OnTriggerEnter,之后,同一个碰撞体还会触发一次OnTriggerExit。

challenge icon

挑战

简单

只要装卸区里有东西,就点亮灯。

  1. 添加一个 int inBay; 字段。在 Start() 中,将 lamp.enabled = false;。
  2. 在 OnTriggerEnter 中,将 inBay 加 1,并将 lamp.enabled = true;。
  3. 在 OnTriggerExit 中,将 inBay 减 1,并且只在它为 0 时关闭灯。

按“开始”,把箱子推进再推出:直到装卸区空了,灯才会熄灭。然后按“检查”。

亲手试试

using UnityEngine;

public class LoadingBay : MonoBehaviour
{
    public Light lamp;

    // 只要装卸区内有东西,灯就会亮;装卸区为空时,灯就会熄灭。
}

物理与游戏玩法中的所有课

自己练习: Unity 在线编辑器