【Unity】11.8 关节
分类:Unity、C#、VS2015
创建日期:2016-05-02
一、简介
Unity提供了下面的关节组件:铰链关节(Hinge Joint)、固定关节(Fixed Joint)、弹簧关节(Spring Joint)、角色关节(Character Joint)、可配置关节(Configuration Joint)。
本节简单介绍这些组件的含义。
二、铰链关节(Hinge Joint)
铰链关节(Hinge Joint)由两个刚体组成,该关节会对刚体进行约束,使它们就好像被连接在一个铰链上那样运动。它非常适用于对门的模拟,也适用于对模型链及钟摆等物体的模拟。
1、添加铰链关节组件
依次打开菜单栏中的【Component】->【Physics】->【Hinge Jont】,即可为所选择的游戏对象添加铰链关节组件。
2、属性
·Connected Body:连接刚体。为关节指定要连接的刚体,若不指定则该关节将与世界坐标系相连接。
·Anchor:锚点。刚体可围绕锚点进行摆动,这里可以设置锚点的位置,该值应用于局部坐标系。
·Axis:轴。定义刚体摆动的方向,该值应用于局部坐标系。
·Use Spring:使用弹簧。勾选该项,则弹簧会使刚体和与其链接的主体形成—个特定的角度。
Spring:弹簧。当Use Spring参数开启时此属性有效。
Spring:弹簧力。该项用于设置推动对象使其移动到相应位置的作用力。
· Damper:阻尼。设置对象的阻尼值,数值越大则对象移动得越慢。
Target Position:目标角度。该顶用于设置弹簧的目标角度,弹簧会拉向此角度,以度为测量单位。
·UseMotor:使用马达。勾选该项,马达会使对象发生旋转。
·Motor:马达。当Use Motor参数开启时,此属性会被用到。
Target Velocity:目标速度。设置对象预期将要达到的速度值。
Force:作用力。设置为了达到目标速度而施加的作用力。
Free Spin:自由转动。勾选该项,则马达永远不会停止,旋转只会越转越快。
·Use Limits:使用限制。勾选该顶,则铰链的角度将被限定在最大值相最小值之间。
·Limits:限制。当Use Limits开启时,此属性将会被用到。
Min:最小值。设置铰链能达到的最小角度。
Max:最大值。设置铰链能达到的最大角度。
Min Bounce:最小反弹。设置当对象触到最小限制时的反弹值。
Max Bounce:最大反弹。该顼用于设置当对象触到最大限制时的反弹值。
·Break Force:断开力。设置铰链关节断开的作用力。
·BreakTorque:断开转矩。没置断开铰链节点所需的转矩。
单独的铰链关节要应用到一个游戏对象上,铰链或绕着Anchor属性所指定的点来旋转,按照Axis属性指定的轴来移动。不用给关节的Connected Body属性添加对象,只有当希望关节的Transform属性依赖于附加对象的Transform属性时才为关节的Connected Body属性来添加对象。多个铰链关节也可以串联起来形成一条链条,可以给链条的每—个环添加关节,并向Connected Body那样添加到下一环上。
技巧:不需要指定Connected Body属性来运转关节。可调整Spring、Motor、Limits等属性来惊喜调整关节的行为状态。
三、固定关节(Fixed Joint)
固定关节组件用于约束一个游戏对象对另一个游戏对象的运动。类似于对象的父子关系,但它是通过物理系统来实现而不像父子关系那样是通过Transform属性来进行约束。
固定关节适用于以下的情形:当希望将对象较容易与另—个对象分开时,或者连接两个没有父子关系的对象使其一起运动,使用固定关节的对象自身需要有—个刚体组件。
1、添加固定关节组件
依次打开菜单栏中的【Component】->【Physics】->【Fixed Joint】选项,就可以为所选择的游戏对象添加固定关节组件。
2、属性
·Connected Body:连接刚体。指定关节要连接的刚体,若不指定则该关节将与世界坐标系相连接。
·Break Force:断开力。设置关节断开的作用力。
·Break Torque:断开转矩。设置断开关节所需的转矩。
有时游戏中会存在这样的情景:当希望要某些游戏对象暂时或永久性的地粘在一起,这时就很适合使用固定关节组件。该组件不需要通过脚本来更改层级结构就可以实现想要的效果,只需要为那些要使用固定关节的游戏对象添加刚体组件即可。
可通过Break Force和BreakTorque属性来没置关节的强度极限,如果这些参数不是无穷大而是—个数值,那么当施加到对象身上的力或转矩大于此极限值时,固定关节将被销毁,其对对象的约束也就随即失效。
四、弹簧关节(Spring Joint)
弹簧关节组件可将两个刚体连接在—起,使其像连接着弹簧那样运动。
依次打开菜单栏中的Component->Physics->Spring Joint选顶,即可为所选择的对象添加弹簧关节组件。
其属性和前面介绍的属性相似,此处就不重复了。
弹簧关节允许一个带有刚体的游戏对象被拉向—个指定的目标位置,这个目标可以是另一个刚体对象或者世界。当游戏对象离目标位置越来越远时,弹簧关节会对其施加一个作用力使其回到目标的原点位置,类似橡皮筋或者弹弓的效果。
当弹簧关节被创建后(预览游戏模式下),其目标位置是由从锚点到连接的刚体(或世界)的相对位置所决定的,这使得在编辑器中将弹簧关节设定给角色或其他游戏对象非常容易,但是如果通过脚本来生成一个实时的推拉弹簧的行为就相对比较困难。
如果想通过弹簧关节来控制游戏对象的位置,通常是建立一个带有刚体的空对象,然后将该空对象设置到Connected Regidbody属性上,这样就可以通过脚本来控制空对象的移动,这样一来,弹簧也会随着空对象的位移而移移动了。
五、角色关节(Character Joint)
角色关节主要用于表现布娃娃效果,它是扩展的球关节,可用于限制每一个轴向上的关节。
依次打开菜单栏中的Component->Physics->Character Jont选项,就可以为所选择的游戏对象添加角色关节组件。
角色关节的属性和前面介绍的属性相似,此处仅介绍一些不重复的选项。
·Swing Axis:摆动轴。设置角色关节的摆动轴,以绿色的圆锥gizmo表示。
·Low Twist Limit:扭曲下限。设置角色关节扭曲的下限。
Limit:设置角色关节扭曲的下限值。
Bounciness:设置角色关节扭曲下限的反弹值。
Spring:设置角色关节扭曲下限的弹簧强度。
Damper:设置角色关节扭曲下限的阻尼值。
·High Twist Limit:扭曲上限。设置角色关节扭曲的上限。
·Break Force:断开力。控制角色关节断开所需的作用力。
·Break Torque:断开转矩。设置角色关节断开所需的转矩。
六、可配置关节(Configuration Joint)
可配置关节组件支持用户自定义关节,它开放了Physics引擎中所有与关节相关的属性,因此可像真他类型的关节那样来创造各种行为。
可配置关节有两类主要的功能:移动/旋转限制和移动/旋转加速度。
依次打开菜单栏中的Component->Physics-> Configuration Joint项,即可为所选择的对象添加可配置关节组件。
1、移动旋转限制
可以为每个旋转轴和运动类型指定约束。针对X轴、Y轴以及Z轴运动可定义沿不同轴的移动,而针对X轴、Y轴、Z轴旋转可定义沿不同轴的旋转,这些属性可以被没定为Free(不受约束)、Limited(受自定义的限制)及Locked(锁定状态无法运动)。
1)移动限制:如果游戏对象某个轴的Motion属性设定为Limied,则可通过修改Limited属性值来设定该轴的运动约束值。对于平移运动,Linear Limited属性将没定该对象能够远离原点的最大距离,通过该属性下的Limit数值可以对Motion属性值为Limited的任何移动进行约束。
2)旋转限制:旋转限制与移动限制相类似,只是Angular Motion属性是与Angular Limit相关。Linear Limit属性设定了对3个轴在移动上的约束,而Angular Limit属性则设定了对于3个轴在旋转上的约束。
2、移动旋转加速度
使对象到达指定的位置或方向运动,或到达指定的速度或角速度。此系统的工作方式是:首先定义一个想要达到的目标,然后通过驱动力来提供加速度以便使其到达此目标,每一个驱动都有一个模式,通过此模式可定义该对象当前的目标。
1)移动加速度X、Y、Z轴驱动属性使游戏对象沿着特定的轴来移动,每个驱动模式指定的对象是朝着目标位置还是目标速度抑或是两者兼而有之的运动方式。比如当X轴驱动设置为Position时,对象会朝着X轴的目标位置去移动。
当驱动模式为Position时,它的位置弹簧值将决定其如何朝着目标位置运动;同样,当驱动模式为Velocity时,它的最大作用力将决定该对象如何被加速至目标速度。
2)旋转加速度:旋转加速度属性为X轴角、YZ轴角驱动及插值驱动,其功能与移动驱动基本相同,只是插值驱动与角驱动在功能上表现不同。可以在旋转驱动模式中选择是采用角驱动还是插值驱动,但这两种驱动不能同时被使用。