在制作2D平板冒险游戏的攻击模块时,遇到攻击敌人后无法产生触发器事件的问题。
在玩家游戏对象下有一攻击子对象。子对象碰撞器默认处于禁用状态,当按下攻击键时,通过代码:
gameObject.GetComponent<Collider2D>().enabled = true;
来对碰撞器进行激活,敌人有刚体,且并非Static状态。两个物体均有碰撞体,但此时并未触发OnTriggerEnter2D事件。
但是如果通过攻击动画或在Inspector窗口中修改碰撞器状态便能成功触发事件。
此时场景中玩家及敌人均未移动,当玩家移动后,碰撞事件可正常触发。
查阅文档后有如下说明:
为了优化资源,物理系统在刚体停止移动时会停止计算刚体的碰撞;此时刚体进入“睡眠状态”。
尝试将敌人刚体的Sleeping Mode修改为Never Sleep 问题解决。
![](https://img-blog.csdnimg.cn/img_convert/c0af550c4c6e34b2b5fe205b18f18d23.png)
关于Unity碰撞体及触发器的规则参考自: