一般赛车游戏里道具用的是 触发器 ,车子用的是碰撞器
1. 触发器
在游戏场景中,我们常常需要用到触发效果例如,赛车类游戏里跑道上有道具,我们可一通过触碰道具来获取它.但我们不需要车与道具有直接的碰撞的效果,这样车的速度会受到影响,游戏体验极差.所以道具我们一般用触发器检测事件.要注意的是使用触发器要勾选 IsTrigger这样物体就可以穿过不然代码写对了也不会执行到
触发器方法(脚本放在cube上)
public class Test : MonoBehaviour
{
void OnTriggerEnter(Collider other)
{
print(“0”);
//触碰时调用OnTriggerEnter 一次。
}
void OnTriggerExit(Collider other)
{
print(“1”);
//触碰结束时调用OnTriggerEnter一次。
}
void OnTriggerStay(Collider other)
{
print(“2”);
//只要触碰没有结束就一直调用
}
}
在测试场景中,让小球从cube 的上面落下穿过(小球添加Rigidbody-刚体组件)可以看到OnTriggerStay执行了多次,其他都只有一次**.cube勾选了IsTrigger**
2. 碰撞器
同样以赛车游戏为例子,当我们想要撞击其他的汽车时,用的就是碰撞器,就好像碰碰车一样.这样汽车就不能用触发器了.不然突然有一辆汽车从你的汽车后面直接穿过,这个游戏就很诡异了.(碰撞器不需要勾选 IsTrigger)
碰撞方法
public class Test : MonoBehaviour
{
void OnCollisionEnter(Collision other)
{
print(“0”);
//触碰时调用OnCollisionEnter 一次。
}
void OnCollisionExit(Collision other)
{
print(“1”);
//触碰结束时调用OnCollisionExit一次。
}
void OnCollisionStay(Collision other)
{
print(“2”);
//只要触碰没有结束就一直调用
}
}
刚刚测试时发现OnCollisionStay执行了15次就停止了,但只要移动小球OnCollisionStay就会持续调用,小球掉到plane 上才会调用OnCollisionExit方法.
.cube没有勾选IsTrigger
运行时,改变小球x轴的位置让小球掉到plane上.