6月 28

【Unity小贴士】关于OnCollisionEnter和OnTriggerEnter

这两个事件其实大家都很熟悉了,一个检测碰撞,一个检测物体通过Collider。文档里基本把这两个事件对应。

最近有人问,在一个项目里,物体设置成Trigger的情况下,项目启动后并不会调用OnTriggerEnter事件,只有在物体运动到和对象接触的时候事件才被调用。但是同一个物体设置成刚体(Is Tigger不打勾)的话OnCollisionEnter在启动时就会被调用。

我再利用OnCollisionEnter的参数把接触点都打印出来并且生成object之后发现,接触点并没有被检测碰撞的对象。也就是说,检测对象在视觉上并没有和被检测对象相撞,但是却调用了OnCollisionEnter。

造成这种情况是因为这个Default Contact Offset参数,如果两个物体的距离小于Default Contact Offset就会默认两个物体碰撞。默认设置的0.01已经很小了几乎肉眼看不出,但是如果项目整体的scale也设置的很小就会出问题。

同时我测试了一下这个参数确实只影响刚体碰撞而不会对Trigger造成影响。下图我建了两个同高度的Cube,其中一个设置成IsTrigger = true,取消Use Gravity,Default Contact Offset设置了比较大的参数,启动后只有刚体的事件被调用。当调整高度Tigger的物体接触到Plane之后OnTriggerEnter才会被调用。

分类: Unity | 留下评论