Unity - 触发器与碰撞器的区别(OnTriggerEnter, OnCollisionEnter的区别)

版权声明:原创图片,自截图片,纯手打文字,经过允许才可转载!业余个人经验分享,有不足的地方请留言,或点【投票】以资鼓励;觉得帮了小忙,请点个赞;还可以点击分享;怕下次出问题之后忘记找不到,可点击收藏。谢谢合作。 https://blog.csdn.net/qq_40985921/article/details/88728263

一般赛车游戏里道具用的是 触发器 ,车子用的是碰撞器

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上.
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_40985921/article/details/88728263