【Unity学习笔记】(OnTriggerEnter2D)碰撞检测失效

问题描述

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");
        }
    }

原因分析:

  1. 最开始怀疑是 Project setting 中的Physics的layer collision没有修改好,导致碰撞检测失效
  2. 修改了之后发现还是不行,查阅资料怀疑是OnTriggerEnter2D的触发条件不满足

解决:

最终给实体添加了一个刚体,满足OnTriggerEnter2D的触发条件。
注意:修改 Layer Collision 时需注意查看是 Physics 还是 Physics 2D


学习笔记:

参考博客:https://blog.csdn.net/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事件当两物体分开瞬间,会执行一次。


你可能感兴趣的:(Unity学习,unity)