问题描述
Unity 碰撞检测失效
检查代码无误
private void OnTriggerEnter2D(Collider2D collision)
{
if (collision.gameObject.CompareTag("Enemy"))
{
collision.GetComponent<Enemy>().TakeDamage(damage);
Debug.Log("isEnemy");
}
if (collision.gameObject.CompareTag("Player")
&& collision.GetType().ToString() == "UnityEngine.CapsuleCollider2D")
{
playerHealth.DamagePlayer(damage);
Debug.Log("isPlayer");
}
}
原因分析:
- 最开始怀疑是 Project setting 中的Physics的layer collision没有修改好,导致碰撞检测失效
- 修改了之后发现还是不行,查阅资料怀疑是OnTriggerEnter2D的触发条件不满足
解决:
最终给实体添加了一个刚体,满足OnTriggerEnter2D的触发条件。
注意:修改 Layer Collision 时需注意查看是 Physics 还是 Physics 2D
学习笔记:
参考博客:https://blog.youkuaiyun.com/renatqiang/article/details/47682449
一:产生碰撞的条件
1:若要产生碰撞,必须双方都要有碰撞器。
2:运动的一方一定要有刚体,另一方有无刚体无所谓。
注:如果运动的一方无刚体,它去碰撞静止的刚体,相当于没有装上。
二:接触的两种方式
1:Collision碰撞,造成物理碰撞,可以在碰撞时执行OnCollision事件。
2:Trigger触发,取消所有的物理碰撞,可以在触发时执行OnTrigger事件。
注:两个物体接触不可能同时产生碰撞+接触,最多产生一种。但是可以AB产生碰撞,AC产生触发。
三:产生不同方式接触的条件
1:Collision碰撞
(1):双方都有碰撞体
(2):运动的一方必须有刚体
(3):双方不可同时勾选Kinematic运动学。
(4):双方都不可勾选Trigger触发器。
2:Trigger触发
(1):双方都有碰撞体
(2):运动的一方必须是刚体
(3):至少一方勾选Trigger触发器
四:接触后事件细分为Enter,Stay,Exit三种(以Trigger为例,分别为OnTriggerEnter、OnTriggerStay、OnTriggerExit)
1:Enter事件表示两物体接触瞬间,会执行一次。
2:Stay事件表示两物体持续接触,会不断执行。
3:Exit事件当两物体分开瞬间,会执行一次。