【Unity】11.2 刚体(Rigidbody)

分类:Unity、C#、VS2015 ide

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

1、简介

Rigidbody(刚体)组件可以使游戏对象在物理系统的控制下来运动,刚体可接受外力与扭矩力,使游戏对象像在真实世界中那样进行运动。 测试

任何游戏对象,只有对其添加了刚体组件,该对象才能受重力的影响。 动画

经过脚本为游戏对象添加的做用力,以及经过NVIDlA物理引擎与其余的游戏对象发生互动的运算,都须要为游戏对象添加刚体组件。 orm

2、如何为对象添加刚体

在Unity 5.x中为某个游戏对象添加刚体组件的办法是:选中要添加刚体的游戏对象-->【Component】-->【Physics】-->【Rigidbody】,这样就为该对象添加了刚体。 对象

添加刚体和碰撞体后,选择该对象,就会看到其周围被一层绿色的框线包围: blog

image

添加刚体和碰撞体的目的主要用于将该对象和其余对象之间进行碰撞检测。碰撞体既能够用胶囊体来实现,也能够用其余碰撞体组件来实现。 游戏

3、相关属性

与刚体相关的属性以下。 事件

一、Mass (质量) get

对象的质量(任意单位)。不该使质量比其余刚体 (Rigidbody) 的质量大或小100 倍。

二、Drag (阻力)

在因为施加力而移动时空气阻力对对象的影响程度。0 表示无空气阻力,空气阻力为无穷大将会使对象当即中止移动。

三、Angular Drag (角阻力)

对某个对象施加扭矩而致使该对象旋转时,空气阻力对该对象的影响程度。0 表示无空气阻力。注意:不能仅仅经过将其“角阻力”(Angular Drag) 设置为无穷大使对象中止旋转。

四、Use Gravity (是否使用重力)

若是启用,则对象将受重力影响。

五、Is Kinematic (是否开启运动学)

若是启用,则该对象不会由物理引擎驱动,而是只能经过对其施加变换 (Transform)进行处理。对于手机等移动平台,或者对附加了铰链关节 (HingeJoint) 的刚体 (Rigidbody) 进行动画处理时,为对象开启运动学十分有用。

六、Interpolate (插值处理)

该项用于控制刚体运动的抖动状况。仅当在刚体 (Rigidbody) 移动中发现不平稳时,才尝试下面这些选项之一:

None:不该用插值。

Interpolate:内插。变换(Transform) 基于上一帧的变换 (Transform) 进行平滑处理。

Extrapolate:外插。变换 (Transform) 基于下一帧的估计变换 (Transform) 进行平滑处理。

七、Collision Detection (碰撞检测)

该属性用于控制避免高速运动的游戏对象穿过其余的对象而未发生碰撞。选项有:

(1)Discrete(离散)

对场景中的全部其余碰撞体 (Collider) 所有使用离散 (Discreet) 碰撞检测。该项为默认值。

(2)Continuous (连续)

对刚体 (Rigidbody) 进行碰撞测试时,对带有刚体的动态碰撞体 (Collider) 使用离散 (Discreet) 碰撞检测;对不带刚体的静态网格碰撞体 (static Mesh Collider)使用连续 (Continuous) 碰撞检测。

(3)Continuous Dynamic (连续动态)

该选项可用于快速移动的对象。

对设置为“连续”(Continuous) 和“连续动态”(Continuous Dynamic) 碰撞的对象使用连续 (Continuous) 碰撞检测。它对不带刚体的静态网格碰撞体也使用连续 (Continuous) 碰撞检测。对于全部其余碰撞体 (Collider),使用离散 (Discreet) 碰撞检测。

注意:连续动态(Continuous Dynamic) 检测须要与之碰撞的对象对物理性能的影响很是大,若是对快速对象的碰撞没有问题,应该将其设置为“离散”(Discreet)而不是连续动态。

八、Constraints (约束)

对刚体 (Rigidbody) 运动的限制。

(1)Freeze Position (冻结位置)

选择性地在世界坐标 X、Y 和 Z 轴上中止刚体 (Rigidbody) 移动。即:刚体对象在世界坐标系中的X、Y、4由方向上(勾选状态)的移动将无效。

(2)Freeze Rotation (冻结旋转)

选择性地中止刚体 (Rigidbody) 围绕世界坐标 X、Y 和 Z 轴的旋转。即:刚体对象在世界坐标系中的X、Y、4由方向上(勾选状态)的旋转将无效。

3、注意事项

一、Rigidbody和Transform只能二选一

刚体(Rigidbody)会使游戏对象在物理引擎的控制下运动,例如能够以真实的碰撞形式来开门或计算其余的行为。经过在刚体上添加做用力来操做游戏对象,这与直接调整Transform组件相比在视觉及感觉上都有很大的不一样。一般状况下,没有必要在操做—个对象刚体的同时也操做其Transform,只须要二选其一便可。

操做游戏对象的Rigidbody与操做该对象的Transform最大的不一样就是刚体有做用力,并且刚体能够接受外力和扭矩,可是Transform没法达到该效果。Transform能够移动和旋转游戏对象,这与使用物理的方式并不相同。

对—个刚体添加外力或扭矩实际上也会改变该对象Transform组件的移动和旋转,这也就是这二者只须要选其一的缘由。使用物理方式操做对象的同时又改变它的Transform会致使碰撞及其余相关的计算出现问题。

刚体在受物理引擎做用以前必需要明确地将其添加给一个游戏对象,以后该对象就会受到重力和经过脚本添加的做用力的影响,但根据实际状况可能还须要为其添加碰撞体或关节等以便达到预期的行为效果。

二、父子化 (Parenting)

当对象处于物理控制之下时,其移动方式与其变换父级的移动方式半独立。若是移动任何父级,则会随它们一块儿拉动刚体 (Rigidbody) 的子级。可是,刚体 (Rigidbody) 仍会因为重力的做用而下落并对碰撞事件做出反应。

三、脚本处理

要控制刚体 (Rigidbody),主要使用脚本添加力或扭矩。可经过对对象的刚体 (Rigidbody) 调用 AddForce() 和 AddTorque() 来实现此目的。

记住:不该在使用物理时直接改变对象的变换 (Transform)。

四、动画

有些状况下,如须要建立布娃娃效果的时候,须要在动画和物理系统间切换对象的控制权。所以当刚体被标记为动力学(isKinematic)模式时,就不会受到如碰撞、做用力或其余物理效果的影响,这就意味着须要直接操做该对象的Transform组件属性来控制该对象了。动力学刚体(Kinematic Rigidbody)会影响其余的对象,但其自身并不受到物理系统的影响。例如,那些绑定到动力学(Kinematic)对象上的关节(Joint)会约束其余绑定到该对象上的刚体(Rigidbody),动力学刚体(Kinematic Rigidbody)在碰撞时会影晌其余的刚体。

相关文章
相关标签/搜索