用Unity的API检测碰撞时常常会遇到OnCollision和OnTrigger无法响应的情况,因此将可能的原因总结于此。
void OnCollisionEnter(Collision other)
- 需要双方都有Collider或者Rigidbody
- 双方如果有Rigidbody,那么不得勾选isKinematic
void OnTriggerEnter(Collider other):
- 需要双方至少有一个Rigidbody
- 可以勾选isKinematic
- 双方必须勾选Collider组件上的isTrigger
我在开发中遇到的问题是,两个都带Collider,但其中一方有Rigidbody,而且之前勾选了isKinematic,从而导致OnCollisionEnter无法响应。由于带Rigidbody的那个我不想让它受到刚体物理引擎的影响,所以采用另一种策略:将Gravity Scale设为0,isKinematic取消勾选。
除了使用上的差异,二者的功能也有所不同,从二者的参数就可以看出。Collision得到的信息比Collider要多,除了Collider包含的信息,Collision还可以获取二者接触的点的坐标等。