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); } }

 

 

 

posted @ 2013-11-08 12:05  willbin  阅读(2601)  评论(0编辑  收藏  举报