Fivee

导航

Unity 碰撞触发

(2d与3d的Collider可以相互存在,但是无法相互协作,如2d是无法检测3d的,反之,一样)

在目前掌握的情况分析,在Unity中参与碰撞的物体分2大块:1.发起碰撞的物体。2.接收碰撞的物体。
1. 发起碰撞物体有:Rigodbody , CharacterController .
2. 接收碰撞物体由:所有的Collider .

工作的原理为:发生碰撞的物体中必须要有“发起碰撞”的物体。否则,碰撞不响应。
比如:墙用BoxCollider ,所以墙与墙之间无反应。
比如:一个带有Rigidbody属性的箱子,能落到带有MeshCollider属性的地面上。
比如:一个带有Rigidbody属性的箱子,可以被一个带有CharacterController 属性的人推着跑。
就是此原因。

在所有Collider上有一个Is Trigger 的boolean型参数。
当发生碰撞反应的时候,会先检查此属性。
当激活此选项时,会调用碰撞双方的脚本 OnTrigger***, 反之,脚本方面没有任何反应。
当激活此选项时,不会发生后续物理的反应。反之,发生后续的物理反应。
总结:Is Trigger 好比是一个物理功能的开关, 是要“物理功能”还是要“OnTrigger脚本”。
在Rigodbody 上有一个Use Gravity 的boolean型参数.
Unity 物理引擎,处理的一个细节: 当一个CharacterController不发生位置变化,一个Collier发生位置变化后,产生碰撞。将不会调用任何碰撞反映。 物理引擎视为CharacterController无碰撞. 转载自 https:
//www.cnblogs.com/mafeng/p/7599954.html

 

通过以上基础信息,基本可以解决简易游戏开发中发生的碰撞无效的问题了.

还需要注意的一个问题是, 

CharacterController不对任何“力”产生作用,同时也不对然和物体施加“力”,即使那个物体是Rigidbody。

posted on 2020-04-15 15:15  Fivee  阅读(685)  评论(0)    收藏  举报