Unity基础-物理系统

Unity内置了NVIDIAPhysx物理引擎,Physx是目前使用最为广泛的物理引擎,被很多游戏大作所采用,开发者可以通过物理引擎高效、逼真地模拟刚体碰撞车辆驾驶布料重力等物理效果,使游戏画面更加真实而生动,下面就给大家介绍下Unity游戏开发中物理引擎的使用。

Rigidbody(刚体)

Rigidbody(刚体)能让你的游戏对象被物理引擎所控制,它能通过受到推力和扭力来实现真实的物理表现效果。所有游戏对象必须包含刚体组件来实现重力、通过脚本施加力、或者与其他对象进行交互,这一切都通过NVIDIA的PhysX物理引擎来实现。

属性

Mass 质量,单位为Kg,建议不要让对象之间的质量差达到100倍以上

Drag 空气阻力,为0表示没有阻力,infinity表示立即停止移动

Angular Drag 扭力的阻力,数值意义同上

Use Gravity 是否受重力影响

Is Kinematic 是否为Kinematic刚体,如果启用该参数,则对象不会被物理所控制,只能通过直接设置位置、旋转和缩放来操作它。

Is Kinematic一般用来实现移动平台,或者带有HingeJoint的动画刚体,在某些时候,主要是创建布娃娃效果的时候,你可能需要在动画与物理控制之间进行切换。你可以将刚体设置为Is Kinematic,当设置为Kinematic模式,它将不再受到外力影响。这时你只能通过变换方式来操作对象,但是Kinematic刚体还会影响其他刚体,但他自己不会再受物理引擎控制。比如,连在Kinematic刚体上的Joints还会继续影响连接的另一个非Kinematic刚体,同时也能够给其他刚体产生碰撞力。

Interpolate 如果你的刚体运动时有抖动,尝试一下修改这个参数,None表示没有插值,Interpolate表示根据上一桢的位置来做平滑插值,Extrapolate表示根据预测的下一桢的位置来做平滑插值

Freeze Rotation 如果选中了该选项,那么刚体将不会因为外力或者扭力而发生旋转,你只能通过脚本的旋转函数来进行操作

Collision Detection 碰撞检测算法,用于防止刚体因快速移动而穿过其他对象,当使用默认的离散式碰撞检测时,如果前一桢时对象在墙这一面,下一桢时对象已到到了墙另一面,那么碰撞检测算法将检测不到碰撞的发生,你可以将该对象的碰撞检测属性设置为Continuous,这时碰撞检测算法将会防止对象穿过所有的静态碰撞体,设置为Continuous Dynamic将还会防止穿过其他也设置为Continuous或者Continuous Dynamic的刚体。CCD只支持Box,Sphere和Capsule的碰撞体。

Constraints 刚体运动的约束,包括位置约束和旋转约束,勾选表示在该坐标上不允许进行此类操作

Collides(碰撞体)

Collides(碰撞体)是物理组件的一类,它要与刚体一起添加到游戏对象上才能触发碰撞。如果两个刚体相互撞在一起,除非两个对象有碰撞体时物理引擎才会计算碰撞,在物理模拟中,没有碰撞体的刚体会彼此相互穿过。

Box Collider:盒碰撞体,盒碰撞体是一个立方体外形的基本碰撞体,该碰撞体可以调整为不同大小的长方体,可用作门、墙、以及平台等,也可以用于布娃娃的角色躯干或者汽车等交通工具的外壳,当然最适合用在盒子或是箱子上。

Is Trigger:触发器,勾选该项,则该碰撞体可用于触发事件,并将被物理引擎所忽略

Material:材质

Center:中心,碰撞体在对象局部坐标中的位置

Size:大小,碰撞体再X、Y、Z方向上的大小

Sphere Collider:球形碰撞体,球形碰撞体是一个基于球体的基本碰撞体,球体碰撞体的三维大小可以均匀等地调节,但不能单独调节某个坐标轴方向的大小,该碰撞体适用于落石、乒乓球等游戏对象。

Radius:半径,球形碰撞体的大小

Capsule Collider:胶囊碰撞体,胶囊碰撞体由一个圆柱体和与其相连的两个半球体组成,是一个胶囊形状的基本碰撞体,胶囊碰撞体的半径和高度都可以单独调节,可用在角色控制器或与其他不规则形状的碰撞结合来使用

Height:高度,该项用于控制碰撞体中圆柱的高度

Direction:方向,在对象的局部坐标中胶囊的纵向方向所对应的坐标轴,默认是Y轴

Mesh Collider:网格碰撞体,网格碰撞体通过获取网格对象并在其基础上构建碰撞,在与复杂网格模型上使用基本碰撞相比,网格碰撞体要更加精细,但会占用更多地系统资源

Smooth Sphere Collisions:平滑碰撞,在勾选该项后碰撞会变得平滑

Mesh:网格,获取游戏对象的网格并将其作为碰撞体

Convex:凸起,勾选该项,则网格碰撞体将会与其他的网格碰撞体发生碰撞

Wheel Collider:车轮碰撞体,车轮碰撞体是一种针对地面车辆的特殊碰撞体,它有内置的碰撞检测、车轮物理系统以及滑胎摩擦的参考体

Suspension Distance:悬挂距离,该项用于设置车轮碰撞体悬挂的最大伸长距离,按照局部坐标来计算,悬挂总是通过其局部坐标的Y轴延伸向下

Center:中心,该项用于设置车轮碰撞体在对象局部坐标的中心

Suspension Spring:悬挂弹簧,该项用于设置车轮碰撞体通过添加弹簧和阻尼外力使得悬挂达到目标位置

Forward Friction:向前摩擦力,当轮胎向前滚动时的摩擦力属性

Sideways Friction:侧向摩擦力,当轮胎侧向滚动时的摩擦力属性

Character Controller(角色控制器)

Character Controller,角色控制器,角色控制器主要用于对第三人称或第一人称游戏主角的控制,并不使用刚体物理效果

Slope Limit:坡度限制,该项用于设置所控制的角色对象只能爬上小于或等于该参数值的斜坡

Step Offset:台阶高度,该项用于设置所控制的角色对象可以迈上的最高台阶的高度

Skin Width:皮肤厚度,该参数决定了两个碰撞体可以相互渗入的深度,较大的参数值会产生抖动的现象,较少的参数值会导致所控制的游戏对象被卡住,较为合理地设定上是:该参数值为Radius值的10%

Min Move Distance:最小移动距离,如果所控制的角色对象的移动距离小于该值,则游戏对象将不会移动

Center:中心,该参数决定了胶囊碰撞体再世界坐标中得位置,

Radius:半径,胶囊碰撞体的长度半径,

Height:高度,该项用于设置所控制的角色对象的胶囊碰撞体的高度

Move (无重力)

角色移动只受到碰撞的约束。角色遇到碰撞时将会沿着碰撞盒滑动。返回值是对移动过程中遇到的碰撞信息的汇总。Move函数并不使用重力。

SimpleMove (会自动模拟重力)

Y轴的速度将会被忽略。速度单位是米每秒。重力自动生效。返回值是角色是否着地。

注意

1.CharacterController允许你在受制于碰撞的情况下很容易的进行运动,而不用添加Rigidbody组件处理刚体了,因为它包含Rigidbody组件的一些属性。

2.添加 CharacterController组件后,人物将不受力影响,这时即使加上Rigidbody组件,并启用Use Gravity,人物也不会受重力影响,在脚本中通过rigidbody对人物施加力也是无效的(CharacterController屏蔽了Rigidbody的所有属性和方法)。仅当你调用Move、SimpleMove函数时才运动并受制于碰撞。

3.虽然CharacterController不受力,但它受碰撞的影响。一般的碰撞发生条件是:碰撞的两个物体必须都有Collider,主动方有Rigidbody。但是如果主动方有CharacterController也会发生碰撞,因为CharacterController本身就继承自Collider。

4.碰撞发生时,CharacterController不会推动其它物体移动,也就是说CharacterController不会对它所碰撞的物体施加物理作用。除非我们在脚本中添加了OnControllerColliderHit()函数,在该函数中使用被碰撞物体的Rigidbody对被碰撞物体施加力。

Cloth(布料系统)

Interactive Cloth:交互布料,交互布料组件可在一个网格上模拟类似布料的行为状态

Skinned Cloth:蒙皮布料,蒙皮布料组件与蒙皮网格渲染器一起用来模拟角色身上的衣服,如果角色动画使用了蒙皮网格渲染器,那么可以为其添加一个蒙皮布料,使其看起来更加真实、生动

Cloth Renderer:布料渲染器

Joint(铰链)

Hinge Joint:铰链关节,铰链关节由两个刚体组成,该关节会对刚体进行约束,使得它们就好像被连接再一个铰链上那样运动,它非常适用于对门的模拟,也适用于对模型及钟摆等物体的模拟圣典百科

Fixed Joint:固定关节,固定关节组件用于约束一个游戏对象对另一个游戏对象的运动圣典百科

Spring Jonit:弹簧关节,弹簧关节组件可将两个刚体连接在一起,使其像连接着弹簧那样运动圣典百科

Character Joint:角色关节主要用于表现布娃娃效果,它使扩展的球关节,可用于限制每一个轴向上的关节圣典百科

Configurable Joint:可配置关节,可配置关节组件支持用户自定义关节,它开放了physx引擎中所有与关节相关的属性,因此可像其他类型的关节那样来创造各种行为圣典百科

Constant Force(力场)

Constant Force力场是一种为刚体快速添加恒定作用力的方法,适用于类似火箭等发射出来的对象,这些对象在起初并没有很大的速度但却是再不断加速的

你可能感兴趣的:(Unity基础-物理系统)