
在本文中,3D天堂将解释如何检测Unity中不同游戏对象之间的3D碰撞,会使用Collision类来检测游戏对象之间的碰撞。
下面是准备的一个简单场景(将使用键盘输入移动玩家对象并检查它与其他对象的碰撞),有俩个立方体(Player和Enemy)和一个地面(Ground)模型,如下所示:

Unity检测碰撞的步骤
第1步
触发碰撞检测的游戏对象应该具有刚体和碰撞体组件,对于此演示,会将刚体组件附加到玩家游戏对象,Box collider已经可用于原始立方体对象。

确保未选中Is Kinematic复选框。
第2步
将Collider组件附加到其他游戏对象,将Box Collider添加到地面和敌人游戏对象(另外一个立方体),刚体组件是可选的,确保未选中Is Trigger复选框。

第3步
将以下脚本附加到Player游戏对象。
using UnityEngine;
using UnityEngine.UI;
public class CollisionBehavior : MonoBehaviour
{
public Text LogCollsiionEnter;
public Text LogCollisionStay;
public Text LogCollisionExit;
private void OnCollisionEnter(Collision collision)
{
LogCollsiionEnter.text = "On Collision Enter: " + collision.collider.name;
}
private void OnCollisionStay(Collision collision)
{
LogCollisionStay.text = "On Collision stay: " + collision.collider.name;
}
private void OnCollisionExit(Collision collision)
{
LogCollisionExit.text = "On Collision exit: " + collision.collider.name;
}
}
到这里设置就已完成,运行测试一下游戏就可以看到当第一个立方体碰撞到模拟敌人的立方体时,将会推动敌人往后移动,结果如下:

与特定图层对象碰撞
还可以检测特定对象集的碰撞,可以使用图层,对于此示例进行以下更改:
- 创建三个不同的图层,Ground(地面)、Player(播放)和Enemy(敌人),将这些层应用于相应的游戏对象。
- 打开物理设置,目标为编辑菜单 → 项目设置 → 物理。
- 物理设置中有层碰撞矩阵,可以检查哪个层将与其他层交互。
下面是有关图层蒙版的简单了解,可以前往站内参阅:

通过以上设置,Player图层对象不会与Enemy图层对象发生碰撞。
…
以上是3D天堂关于在Unity中检测对象碰撞的全部内容,如果你有任何反馈,请随时在本页面下方留言。