触发Trigger
一、区分碰撞和触发的区别:
-
碰撞:碰撞是指两个游戏对象发生了物理上的碰撞。当两个游戏对象的碰撞器(Collider)重叠时,它们就会发生碰撞。碰撞器可以是游戏对象上的任何形状,例如球形、方形等,用于以物理方式模拟游戏对象的运动和相互作用。
碰撞通常会触发 “OnCollisionEnter”、“OnCollisionStay” 和 “OnCollisionExit” 等事件,可以在这些事件中编写代码来响应碰撞。
- 笔者认为,触发器就是一个没有刚体碰撞效果的碰撞判断器。
-
触发:触发是指当一个游戏对象进入到另一个游戏对象的触发器(Trigger)时发生的事件。触发器是一个不具有实体的碰撞器,可以被配置为某个形状或区域,当其他游戏对象进入该区域时,触发器会向游戏脚本发出通知。
触发事件通常会触发 “OnTriggerEnter”、“OnTriggerStay” 和 “OnTriggerExit” 等事件,可以在这些事件中编写代码来响应触发。
- 必须两个物体都有碰撞器(Collider)
- 必须至少有一个碰撞体(Collider)被设置为:刚体(Rigidbody)
- 需要有触发响应的物体的碰撞器(Collider)被设置为“是触发器”(Trigger)。
二、触发器脚本控制
1.基本方法
- 触发器触发时
private void OnTriggerEnter(Collider other)
{
}
- 持续触发中
private void OnTriggerStay(Collider other)
{
}
- 触发器结束
private void OnTriggerExit(Collider other)
{
}
2.实现触碰机关时门消失
-
- 一前一后两个物体,前面的物体叫做Switch,后面的物体叫Door
-
- 确保两个物体都具有刚体(Rigidbody)和碰撞(Collider)组件
-
- 将Switch的碰撞器(Collider)设置为“是触发器”(Trigger)
-
- 自定义脚本:
private void OnTriggerEnter(Collider other)
{
GameObject door = GameObject.Find("Door");
if(door!=null)
{
door.SetActive(false);
}
}
-
- 将脚本附加到Switch物体上
-
- 当把门的碰撞器(Collider)设置为“是触发器”(Trigger)时,也可以实现门的消失,但是角色将可以直接穿过门。