【Unity】第11章 第三人称角色控制器和碰撞体

分类:Unity、C#、VS2015 ide

建立日期:2016-05-02 性能

1、简介

第三人称视角控制器涉及的相关概念有: 动画

一、刚体(Rigidbody)。 对象

二、碰撞体(Collider)。包括球体碰撞体(Sphere Collider)、箱体碰撞体(Box Collider)、网格碰撞体(Mesh Collider)、物理材质(Physics Material)、铰链关节(Hinge Joint)、弹簧关节(Spring Joint)等。 游戏

Unity内置了 NVIDIA PhysX 物理引擎。要控制场景中的物理对象,只需对该对象添加刚体 (Rigidbody)。执行此操做后,该对象就会受重力的影响,并且还能够将该对象与世界坐标系中的其余对象进行碰撞检测。 it

2、本章要点

一、刚体 im

刚体 (Rigidbody) 是以物理方式模拟的对象。可将刚体 (Rigidbody) 用于玩家能够四处推进的事物(例如板条箱或松散对象),或经过编写脚本向刚体 (Rigidbody) 应用力来直接移动它。 脚本

若是对非运动学刚体 (non-Kinematic Rigidbody) 进行变换,则可能不会与其余对象正确碰撞,所以应经过对刚体 (Rigidbody) 应用力和扭矩来移动它。另外,还能够向刚体 (Rigidbody) 添加关节 (Joint) 以使行为更复杂。例如,能够建立具备物理门,或建立具备摇摆链条的起重机等。 db

还可以使用刚体 (Rigidbody) 使车辆显得生动,例如能够用一个刚体、四个车轮碰撞体 (Wheel Collider) 以及一个基于用户输入应用车轮旋转力的脚原本建立汽车。 移动

能够经过从脚本向刚体 (Rigidbody) 应用力来建立飞机。

刚体 (Rigidbody) 最常与基元碰撞体 (Primitive Collider) 结合使用。

重要提示:

  • 毫不应一块儿使用父和子刚体 (Rigidbody)
  • 毫不应缩放刚体 (Rigidbody) 的父级

二、运动学刚体 (Kinematic Rigidbody)

运动学刚体 (Kinematic Rigidbody) 是指启用了“运动学”(is Kinematic) 选项的刚体。运动学刚体 (Kinematic Rigidbody) 不受力、重力或碰撞的影响。它们经过设置变换的位置和旋转或对其进行动画处理来驱动,运动学刚体还能够与其余非运动学刚体 (non-Kinematic Rigidbody) 进行交互。

运动学刚体 (Kinematic Rigidbody) 可在与其余刚体 (Rigidbody) 碰撞时正确唤醒它们,并会对置于其上的刚体 (Rigidbody) 应用摩擦力。

下面是针对运动学刚体 (Kinematic Rigidbody) 的几个使用状况的示例:

(1)但愿某个对象处于物理控制下,可是其余状况下则是经过脚本或动画进行控制。例如,能够建立一个动画角色,其骨骼附加了与关节 (Joint) 链接的刚体 (Rigidbody),以用做布娃娃。大多数时候该角色处于动画控制下,此时会建立运动学刚体 (Kinematic Rigidbody)。可是当命中它时,又但愿它变为布娃娃并受物理影响。为实现此目的,只需禁用“运动学”选项,即让“is Kinematic”为false便可。

(2)须要某个对象能够推进其余对象、但不推进本身移动的对象。例如,若是有一个动画平台,而且要在其上放置一些刚体 (Rigidbody) 箱体,则应使该平台成为运动学刚体 (Kinematic Rigidbody) 而不只仅是不带刚体 (Rigidbody) 的碰撞器 (Collider)。

(3)可能须要某个对象有一个通过动画处理的运动学刚体 (Kinematic Rigidbody),并使用一个可用的关节 (Joint) 让真实刚体 (Rigidbody) 跟随其后。

三、静态碰撞组件 (Static Collider)

静态碰撞组件 (Static Collider)是具备碰撞体 (Collider) 而不是刚体 (Rigidbody) 的游戏对象 (GameObject)。静态碰撞体 (Static Collider) 用于始终保持在相同的位置而且永远不会四处移动的水平几何结构。

既能够将网格碰撞组件 (Mesh Collider) 添加到已存在的图形网格,例如使用导入设置 (Import Settings) 生成碰撞体 (Generate Colliders),也可使用其余碰撞组件。

毫不应逐帧移动静态碰撞体 (Static Collider),或者说,只要将其设置为静态碰撞体,它就应该从始至终都不会在场景中移动。不然就会致使物理引擎从新进行内部计算,这种计算成本十分高昂,还会使性能显著降低。不只如此,基于静态碰撞体 (Static Collider) 唤醒其余刚体 (Rigidbody) 的行为未定义,而且移动静态碰撞体 (Static Collider) 不会对与之接触的刚体 (Rigidbody) 应用摩擦力。

总之,凡是在场景中移动的碰撞体 (Collider) ,都应该始终将其设置为运动学刚体 (Kinematic Rigidbody),而不是将其设置为静态碰撞体。

相关文章
相关标签/搜索