zoukankan      html  css  js  c++  java
  • 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); } }
  • 相关阅读:
    [BZOJ 1833] 数字计数
    [Codeforces 23E] Tree
    [Codeforces 23D] Tetragon
    前端基础之CSS
    前端基础之HTML
    youku项目总结(粗略总结)
    MySQL视图、触发器、事务、存储过程、内置函数、流程控制、索引
    MySQL多表查询,Navicat使用,pymysql模块,sql注入问题
    MySQL单表查询
    MySQL表关系--外键
  • 原文地址:https://www.cnblogs.com/willbin/p/3414017.html
Copyright © 2011-2022 走看看