Unity3D之Character Controller(CC)与GameObject的碰撞方法
先来一部分网上常见的内容(略整理):
--------------------分隔线----------------------
Unity3d中参与碰撞的物体分2种类型:
一、发起碰撞的物体。
二、接收碰撞的物体。
1. 参与发起碰撞物体:Rigodbody, CharacterController 角色碰撞器。
2. 参与接收碰撞的物体:所有Collider .
工作的原理为:发生碰撞的物体中必须要有“发起碰撞”的物体。否则,碰撞不响应。
比如:两面墙都只用BoxCollider ,所以墙与墙之间无反应。
比如:一个带有Rigidbody属性的箱子,能落到带有MeshCollider属性的地面上。
比如:一个带有Rigidbody属性的箱子,可以被一个带有CharacterController 属性的人推着跑。
在所有Collider上有一个Is Trigger 的boolean型参数。
(If enabled, this Collider is used for triggering events, and is ignored by the physics engine.)
当发生碰撞反应的时候,会先检查此属性是否为true。
当激活此选项时,会调用碰撞双方的脚本 OnTrigger, 反之,脚本方面没有任何反应。
当激活is trigger = true,不会发生后续物理的反应。反之,发生后续的物理反应。
总结:Is Trigger 好比是一个物理功能的开关, 是要“物理功能”还是要“OnTrigger脚本”。
在Rigodbody 上有一个Use Gravity 的boolean型参数.
(Controls whether gravity affects this rigidbody.)
Unity 物理引擎,处理的一个细节:
当一个CharacterController不发生位置变化,一个Collier发生位置变化后,产生碰撞。将不会调用任何碰撞函数,也就是没有碰撞反应的。
物理引擎视为CharacterController无碰撞.
--------------------分隔线----------------------
现在就来考虑如何让GameObject(魔法球)主动碰撞到CC(人物), 碰撞到人物后,显示受击效果.
解决方案, 由上面的可知, 做出如下设置:
1:魔法球: Collider(合适的类型), Rigidbody(Use Gravity可以去掉)
2:人物: CC.
脚本:
在魔法球上添加脚本
void OnCollisionEnter (Collision collision) { Debug.Log ("**** collision.gameObject.name***:" + collision.gameObject.name); if(collision.gameObject.name == "Player") {
// 发送攻击消息 SendAttackMsg();
// 销毁魔法球 Destroy (gameObject); } }