📜  unity colllion 不起作用 - C# (1)

📅  最后修改于: 2023-12-03 14:48:11.439000             🧑  作者: Mango

Unity Collision 不起作用 - C#

在Unity中,物体之间的碰撞检测可以用Collision或者Trigger。如果你的碰撞检测不起作用,那么可能有以下一些原因:

碰撞层级

在Unity中,每个物体都有一个Layer,如果两个物体的Layer不一样,那么它们之间的碰撞检测就不会起作用。在物体上可以通过Inspector面板的Layer属性进行设置。

同时,还可以在物体之间进行排斥,例如一个物体的Layer为Player,另一个物体的Layer为Obstacle,如果不希望它们发生碰撞,可以在Edit --> Project Seetings --> Physics中的Layer Collision Matrix中将Player和Obstacle的交点设为False。

物体没有Collider

如果一个物体没有Collider组件,那么就无法与其他物体发生碰撞检测。在物体上添加Collider组件即可解决问题。

Collider设置不正确

如果一个物体的Collider设置不正确,也会导致碰撞检测不起作用。例如Box Collider组件的Size属性不正确,或者Sphere Collider的半径不正确,都会导致碰撞检测不起作用。

物体没有Rigidbody

如果两个物体都没有Rigidbody组件,那么它们之间的碰撞检测只会在物体静止时进行。如果希望在物体运动时也能够进行碰撞检测,那么需要在物体上添加Rigidbody组件。

字段命名不正确

在进行碰撞检测时,需要在C#脚本中实现OnCollisionEnter(Collision coll)方法。该方法需要一个Collision参数。如果你把它写成Collison,则无法正确的触发该方法,导致碰撞检测不起作用。

碰撞层级没有设置Tag

有时候我们只是希望检测某一类物体的碰撞,这个时候我们可以使用Tag。在物体上通过Inspector面板添加一个Tag,然后在脚本中通过coll.tag判断碰撞的物体是否符合要求。

void OnCollisionEnter(Collision coll) {
 if(coll.gameObject.tag == "Player") {
   // 这里处理Player和当前物体(敌人)的碰撞逻辑
 }
}

总之,如果你发现碰撞检测不起作用,可以先检查以上几点,如果还是无法解决问题,可以尝试在Unity论坛或者CSDN上提问,或者查看官方文档。