首先要熟悉一些基本的力学名词及相关公式
刚体(Rigidbody):刚体是指在运动中和受到力的作用后,形状和大小不变,而且内部各点的相对位置不变的物体。绝对刚体实际上是不存在的,刚体是力学中的一个科学抽象概念,即理想模型。
力(F):力是物体对物体的作用,力不能脱离物体而单独存在。Unity的物理引擎就是以此为基础构建的。
重力(G):物体由于地球的吸引而受到的力叫重力。重力的施力物体是地心。Unity中的重力与其相似。重力的方向总是竖直向下。
摩擦力:在Unity中分为滑动摩擦力和静摩擦力。通常通过设置动摩擦系数和静摩擦系数来控制物体的运动。(滚动摩擦一般不用)
弹力:在Unity中物体受外力后产生与其相反方向的力。通常通过设置弹性系数来
使物体获得弹性属性。
扭矩力:使物体发生转动的力。
阻尼:当物体受到外力作用而振动时,会产生一种使外力衰减的反力,称为阻尼力(或减震力) 。
重力加速度(单位:m/s^2):g = 9.81(在Unity中)
重力(单位:N): G = mg ***
滑动摩擦力(单位:N):F = μ×FN(FN:正压力,μ:动摩擦因数)
单摆周期公式(单位:s):T = 2π√(L/g)***(L:摆长)
力矩(单位:N×m): M = FL(L:摆动轴)
1、Rigibody(刚体)组件
物体要受力的影响就需要添加Rigibody组件。(基本上能动的物体都需要Rigibody组件)物体添加Rigibody组件后,可以接受外力和扭矩力,并一直受到重力影响,
选中一个物体后,为其添加Rigibody组件。
1-1、Rigibody组件的属性面板及参数详解
Mass(质量):用于设置游戏对象的质量。(一般在同一游戏场景中,游戏对象之间的质量差不大于100倍)
Drag(阻力):即游戏对象受力运动时受到的空气阻力,阻力极大时,游戏对象会立即停止运动。
Angular Drag(角阻力):即游戏对象受扭矩力旋转时受到的空气阻力。同样的,阻力极大时,游戏对象会立即停止旋转。
Use Gravity(使用重力):即开启此项时,游戏对象会受到重力的影响。
Is Kinematic(是否开启动力学):即开启此项时,游戏对象将不再受到物理引擎的影响,从而只能通过Transform属性来对其操作。(该方式适用于模拟平台的移动或带有铰链关节链接刚体的动画)
Interpolate(插值):用于控制刚体运动的抖动情况。
None:没有插值。
Interpolate:内插值。基于前一帧的Transform平滑此次的Transform。
Extrapolate:外插值。基于下一帧的Transform平滑此次的Transform。
Collision Detection(碰撞检测):该属性用于控制避免高速运动的游戏对象穿过其它对象而未发生碰撞。
Discrete:离散碰撞检测。该模式与场景中其它的所有碰撞体进行碰撞检测。该值为默认值。
Continuous:连续碰撞检测。该模式用于检测与动态碰撞体(带有Rigidbody)碰撞,使用连续碰撞检测模式来检测与网格碰撞体的(不带Rigidbody)碰撞。其它的刚体会采用离散碰撞模式。此模式适用于那些需要采用连续动态碰撞检测的对象相碰撞的对象。这对物理性能会有很大的影响,如果不需要对快速运动的对象进行碰撞检测,不建议使用此模式,建议使用离散碰撞检测模式。
Continuous Dynamic:连续动态碰撞检测。该模式用于检测与采用连续碰撞模式或连续动态碰撞模式对象的碰撞,也可以用于检测没有Rigidbody的静态网格碰撞体。对于与之碰撞的其它对象可采用离散碰撞检测。该模式也可以用于检测快速运动的游戏对象。
Constraints(约束):该项用于控制对于刚体运动的约束。
Freeze Position:冻结位置。刚体对象在世界坐标系中的x,y,z轴方向上(选中状态)的移动将无效。
Freeze Rotation:冻结旋转。刚体对象在世界坐标系中的x,y,z轴方向上(选中状态)的旋转将无效。
2、Constant Force(恒力)组件
Constant Force用来为刚体添加恒力。适用于类似火箭发射的对象,因为F=ma,使得这类对象的速度不断提升。
选中一个物体后,为其添加Constant Force组件。
2-1、Constant Force组件的属性面板及参数详解
四种属性均用三维向量表示,坐标轴表示方向,数值表示大小。
需要注意的是:添加恒力(Constant Force)组件时,系统会默认添加刚体(Rigidbody)组件。
添加恒力组件后,不能移除刚体组件。
Force(力):设置世界坐标系中使用的扭矩力。
Relative Force(相对力):设置在物体局部坐标系中使用的力。
Torque(扭矩):设置在世界坐标系中使用的扭矩力。游戏对象依据该向量进行转动。(向量越长转动越快)
Relative Torque(相对扭矩):相对扭矩。设置在物体局部坐标系中使用的扭矩力。。游戏对象依据该向量进行转动。(向量越长转动越快)
3、Character Controller(角色控制器)组件
Character Controller主要用于第三人称或第一人称游戏主角的控制。不使用刚体物理效果。(Character Controller可通过物理效果影响其他的对象,但无法通过物理效果被其他的对象影响)
选中一个物体后,为其添加Character Controller组件。
3-1、Character Controller组件的属性面板及参数详解
Slope Limit(坡度限制):设置所控制的游戏对象只能爬上角度小于或等于该参数值的斜坡倾角。
Step Offset(台阶高度):设置所控制的游戏对象可以迈上的最高台阶的高度。
Skin Width(皮肤厚度):该参数决定了两个碰撞体可以相互参入的深度。
较大的参数值会产生抖动的现象,较小的参数值会导致所控制的游戏对象被卡住,较为合理的设置是该参数值为Radius值的10%。
Min Move Distance(最小移动距离):如果所控制的游戏对象的移动距离小于该值,则游戏对象将不会移动,这样可避免抖动,大多数情况下将该值设为0。
Center(中心):该参数决定了胶囊碰撞体与所控制的游戏对象的相对位置,并不影响所控制的角色对象的中心坐标
Radius(半径):胶囊体碰撞的长度半径,同时该项也决定了碰撞体的半径。
Height(高度):用于设置所控制的角色对象的胶囊体碰撞体的高度。
4、Collider(碰撞体/器)组件
Collider要与Rigibody一起添加到游戏对象上才能触发碰撞。
两个刚体撞在一起时,拥有碰撞体的对象才会计算碰撞。
都没有碰撞体的两个刚体会彼此穿过,不会发生碰撞。
添加Collider组件方法
一般创建一个游戏对象时会自动添加相应的碰撞体。
4-1、Box Collider(盒碰撞体)
该碰撞体可调整为不同大小的长方体。
可用作门、墙、平台,也可用于布娃娃的角色躯干或汽车等交通工具的外壳上。
4-2、Sphere Collider(球形碰撞体)
该碰撞体的三维大小可以均匀地调节,但不能单独调节某个坐标轴方向的大小。
可用作落石、球类等游戏对象。
4-3、Capsule Collider(胶囊碰撞体)
该碰撞体的高度和半径可单独调节。
可用作角色控制器或与其他不规则形状的碰撞结合使用。(Uinty中角色控制器中通常内嵌了胶囊碰撞体)
4-4、Mesh Collider(网格碰撞体)
该碰撞体通过获取网格对象并在其基础上构建碰撞。
与在复杂的网络模型上使用基本碰撞体相比,网格碰撞体要更加精细,但会占用更多的系统资源。(开启Convex参数的网格碰撞体才可以与其他的网格碰撞体发生碰撞)
4-5、Terrain Collider(球形碰撞体)
该碰撞体是基于地形构建的碰撞体。
4-6、Wheel Collider(车轮碰撞体)
车轮碰撞体是一种针对地面车辆的特殊碰撞体,它有内置的碰撞检测、车轮物理系统及有滑胎摩擦的参考体。
除了车轮,该碰撞体也可用于其他的游戏对象。
5、Joint(关节)组件
关节是模拟物体与物体之间的一种连接关系,关节必须依赖于刚体组件。
关节组件可以添加到多个游戏对象中,关节又分为3D类型的关节和2D类型的关节。(本篇讲述3D关节)
添加Joint组件方法
5-1、Hinge Joint(铰链关节)的属性及参数详解
由两个刚体组成,使它们像被连接在一个铰链上那样运动。
它非常适用于对门的模拟,也可用作模型链及钟摆等物体。
需要注意的是:添加关节(Join)组件时,系统会默认添加刚体(Rigidbody)组件。
添加关节组件后,不能移除刚体组件。
Connected Body(连接刚体):为关节指定要连接的刚体。(若不指定刚体,则该关节默认与世界相连)
Anchor(锚点):刚体可围绕锚点进行摆动。该值应用于局部坐标系。
Axis(轴):定义刚体摆动的方向。该值应用于局部坐标系。
Auto Configure Connected Anchor(自动设置连接锚点):勾选该项,连接锚点会自动设置。(该项默认为开启状态)
Connected Anchor(连接锚点):自动连接锚点项开启时,此项会自动设置。自动连接锚点项未开启时,可手动设置连接锚点。
Use Spring(使用弹簧):勾选该项,弹簧会使刚体与其连接的主体形成一个特定的角度
Spring(弹簧):当Use Spring参数开启时,此属性有效。
Spring:弹簧力。设置推动对象使其移动到相应位置的作用力。
Damper:阻尼。设置对象的阻尼值,数值越大则对象移动得越缓慢。
Target Position:目标角度。设置弹簧的目标角度,弹簧会拉向此角度。
Use Motor(使用发动机):勾选该项,发动机会使对象发生旋转。
Motor(发动机):当Use Motor参数开启时,此属性有效。
Target Velocity:目标速度。设置对象预期将要达到的速度值。
Force:作用力。设置为了达到目的速度而施加的作用力。
Free Spin:自动转动。勾选该项,则发动机永远不会停止,旋转只会越转越快。
Use Limits(使用限制):勾选该项,铰链的角度将被限定在最大值和最小值之间。
Limits(限制):当Use Limits参数开启时,此属性有效。
Min:最小值。设置铰链能达到的最小角度。
Max:最大值。设置铰链能达到的最大角度。
Min Bounce:最小反弹。设置当对象触到最小限制时的反弹值。
Max Bounce:最大反弹。设置当对象触到最大限制时的反弹值。
Contact Distance:接触距离。控制关节的抖动。
Break Force(断开力):设置铰链关节断开的作用力。
Break Torque(断开转矩):设置断开铰链关节所需的转矩。
Enable Collision(激活碰撞):勾选该项,关节之间也会检测碰撞。
Enable Preprocessing(启用预处理):勾选该项,实现关节的稳定。(该项默认为开启状态)
5-2、Fixed Joint(固定关节)的属性及参数详解
固定关节用于约束一个游戏对象对另一个游戏对象的运动。类似于对象的父子关系,但它是通过物理系统来实现而不像父子关系那样是通过Transform属性来进行约束。(使用固定关节的对象自身需要有一个刚体组件)
适用于当希望将对象较容易与另一个对象分开时,或者连接两个没有父子关系的对象使其一起运动时。
Connected Body (连接刚体):用于指定关节要连接的刚体。(若不指定刚体,则该关节默认与世界相连)
Break Force(断开力):设置关节断开的作用力。
Break Torque(断开转矩):设置断开关节所需的转矩。
Enable Collision(激活碰撞):勾选此项,则关节之间也会检测碰撞。
Enable Preprocessing(启用预处理):勾选该项,实现关节的稳定。(该项默认为开启状态)
5-3、Spring Joint(弹簧关节)的属性及参数详解
弹簧关节组件可将两个刚体连接在一起,使其像连接着弹簧那样运动。
Connected Body(连接刚体):用于为弹簧指定要连接的刚体。(若不指定刚体,则该关节默认与世界相连)
Anchor(锚点):设置Joint在对象局部坐标系中的位置。(注意:不是对象将弹向的点)
Auto Configure Connected Anchor(自动设置连接锚点):勾选该项,连接锚点会自动设置。(该项默认为开启状态)
Connected Anchor(连接锚点):自动连接锚点项开启时,此项会自动设置。自动连接锚点项未开启时,可手动设置连接锚点。
Spring(弹簧):设置弹簧的强度,数值越高弹簧的强度就越大。
Damper(阻尼):设置弹簧的阻尼系数,阻尼数值越大,弹簧强度减小的幅度越大。
Min Distance(最小距离):设置弹簧启用的最小距离值。如果两个对象之间的当前距离与初始距离的差小于该值,则不会开启弹簧。
Max Distance(最大距离):设置弹簧启用的最小距离值。如果两个对象之间的当前距离与初始距离的差大于该值,则不会开启弹簧。
Break Force(断开力):设置弹簧关节断开所需的作用力。
Break Torque(断开转矩):设置弹簧关节断开所需的转矩力。
Enable Collision(激活碰撞):勾选该项,关节之间也会检测碰撞。
Enable Preprocessing(启用预处理):勾选该项,实现关节的稳定。(该项默认为开启状态)
5-4、Character Joint(角色关节)的属性及参数详解
角色关节主要用于表现布娃娃效果,它是扩展的球关节,可用于限制关节在不同旋转轴下的旋转角度。
Connected Body(连接刚体):用于为角色关节指定要连接的刚体。(若不指定刚体,则该关节默认与世界相连)
Anchor(锚点):设置游戏对象局部坐标系中的点,角色关节将按围绕该点进行旋转。
Axis(扭动轴):设置角色关节的扭动轴。(以橙色的圆锥gizmo表示)
Auto Configure Connected Anchor(自动设置连接锚点):勾选该项,连接锚点会自动设置。(该项默认为开启状态)
Connected Anchor(连接锚点):自动连接锚点项开启时,此项会自动设置。自动连接锚点项未开启时,可手动设置连接锚点。
Swing Axis(摆动轴):设置角色关节的摆动轴。(以绿色的圆锥gizmo表示)
Twist Limit Spring(弹簧的扭曲限制)
Spring:设置角色关节扭曲的弹簧强度。
Damper:设置角色关节扭曲的阻尼值。
Low Twist Limit(扭曲下限):设置角色关节扭曲的下限。
Limit:设置角色关节扭曲的下限值。
Bounciness:设置角色关节扭曲下限的反弹值。
Contact Distance:设置用于为了避免抖动而限制的接触距离。
High Twist Limit(扭曲上限):设置角色关节扭曲的上限。
Limit:设置角色关节扭曲的上限值。
Bounciness:设置角色关节扭曲上限的反弹值。
Contact Distance:设置用于为了避免抖动而限制的接触距离。
Swing Limit Spring(弹簧的摆动限制)
Spring:设置角色关节摆动的弹簧强度。
Damper:设置角色关节摆动的阻尼值。
Swing 1,2 Limit(摆动限制1,2):1与2的限制是对称的,即更改一个里面的三项属性即可。
Limit:设置角色关节摆动的限制值。
Bounciness:设置角色关节摆动限制的反弹值。
Contact Distance:设置用于为了避免抖动而限制的接触距离。
Enable Projection(启动投影):该项用于激活投影。
Projection Distance(投影距离):设置当对象与其连接刚体的距离超过投影距离时,该对象会回到适当的位置。
Projection Angle(投影角度):设置当对象与其连接刚体的角度超过投影角度时,该对象会回到适当的位置。
Break Force(断开力):控制角色关节断开所需的作用力。
Break Torque(断开转矩):设置角色关节断开所需的转矩。
Enable Collision(激活碰撞):勾选该项,则关节之间也会检测碰撞。
Enable Preprocessing(启用预处理):勾选该项,实现关节的稳定。(该项默认为开启状态)
5-5、Configurable Joint(可配置关节)的属性及参数详解
可配置关节组件支持用户自定义关节,它开放了PhysX引擎中所有与关节相关的属性,因此可像其他类型的关节那样来创造各种行为。
可配置关节有两类主要的功能:移动/旋转限制和移动/旋转加速度。
connected boby(连接刚体):用于为关节指定要连接的刚体。(若不指定则该关节将与世界相连接)
anchor(锚点):设置关节的中心点,所有基于物理效果的模拟都会以此点为中心点来进行计算。
axis(主轴):设置局部旋转轴,该轴决定了对象在物理模拟下自然旋转的方向。
Auto Configure Connected Anchor(自动设置连接锚点):勾选该项,连接锚点会自动设置。(该项默认为开启状态)
Connected Anchor(连接锚点):自动连接锚点项开启时,此项会自动设置。自动连接锚点项未开启时,可手动设置连接锚点。
Secondary Axis(副轴):主轴和副轴共同决定了关节的局部坐标。第三个轴与这两个轴所构成的平面相垂直。
Xmotion(X轴移动):设置游戏对象在X轴的移动形式,有自由移动(Free)、锁定移动(Locked)及限制性移动(Limited)。
Ymotion(Y轴移动):设置游戏对象在Y轴的移动形式,有自由移动(Free)、锁定移动(Locked)及限制性移动(Limited)。
Zmotion(Z轴移动):设置游戏对象在Z轴的移动形式,有自由移动(Free)、锁定移动(Locked)及限制性移动(Limited)。
Angular Xmotion(X轴旋转):设置游戏对象围绕X轴的旋转形式,有自由旋转(Free)、锁定旋转(Locked)及限制性旋转(Limited)。
Angular Ymotion(Y轴旋转):设置游戏对象围绕Y轴的旋转形式,有自由旋转(Free)、锁定旋转(Locked)及限制性旋转(Limited)。
Angular Zmotion(Z轴旋转):设置游戏对象围绕Z轴的旋转形式,有自由旋转(Free)、锁定旋转(Locked)及限制性旋转(Limited)。
Linear Limit Spring(弹簧线性限制)
Spring:弹簧。设置将对象拉回边界的力。
Damper:阻尼。设置弹簧的阻尼值。
Linear Limit(线性限制):设置自关节原点的距离为基准对其运动边界加以限定。
Limit:限制。设置从原点到边界的距离。
Boundciness:反弹。设置当对象到边界时施加给它的反弹力。
Contact Distance:设置用于为了避免抖动而限制的接触距离。
Angular X Limit Spring(X轴旋转限制)
Spring:弹簧。设置将对象拉回边界的力。
Damper:阻尼。设置弹簧的阻尼值。
Low Angular X Limit(X轴旋转下限):以与关节初始旋转的差值为基础设置旋转约束下限的边界。
Limit:旋转的限制角度。设置对象旋转角度的下限值。
Bounciness:反弹。设置当对象到边界时施加给它的反弹力。
Contact Distance:设置用于为了避免抖动而限制的接触距离。
High Angular X Limit(X轴旋转上限):以与关节初始旋转的差值为基础设置旋转约束上限的边界。
Limit:旋转的限制角度。设置对象旋转角度的上限值。
Bounciness:反弹。设置当对象到边界时施加给它的反弹力。
Contact Distance:设置用于为了避免抖动而限制的接触距离。
Angular YZ Limit Spring(Y轴和Z轴旋转限制)
属性参数同Angular X Limit Spring
Angular Y Limit(Y轴旋转限制)*
属性参数同Angular X Limit
Angular Z Limit(Y轴旋转限制)*
属性参数同Angular X Limit
Target Position(目标位置):关节在X,Y,Z三个轴向上应达到的目标位置。
Target Velocity(目标速度):关节在X,Y,Z三个轴向上应达到的目标速度。
XDrive(X轴驱动):设置了对象沿局部坐标系X轴的运动形式。
Position Spring:位置弹簧力。朝预定义方向上的皮筋的拉力。
Position Damper:位置阻尼。抵抗位置弹簧力的力。
Maximum Force:最大作用力。推动对象朝预定方向运动的作用力的总和。
YDrive(Y轴驱动):设置了对象沿局部坐标系Y轴的运动形式。
属性参数同XDrive
ZDrive(Z轴驱动):设置了对象沿局部坐标系Z轴的运动形式。
属性参数同XDrive
Target Rotation(目标旋转):目标旋转是一个四元数,它定义了关节应当旋转到的角度。
Target Angular Velocity(目标旋转角速度):目标旋转角速度是一个三维向量,它定义了关节应当旋转到的角速度。
Rotation Drive Mode (旋转驱动模式):通过X&YZ轴驱动或插值驱动来控制对象自身的旋转。
Angular X Drive (X轴角驱动):设置了关节如何围绕X轴进行旋转。
Position Spring:位置弹簧力。朝预定义方向上的皮筋的拉力。
Position Damper:位置阻尼。抵抗位置弹簧力的力。
Maximum Force:最大作用力。推动对象朝预定方向运动的作用力的总和。
Angular YZ Drive (YZ轴角驱动):设置了关节如何围绕自身的Y轴和Z轴进行旋转。
属性参数同Angular X Drive
Slerp Drive(差值驱动):设置了关节如何围绕局部所有的坐标轴进行旋转。
属性参数同Angular X Drive
Projection Mode(投影模式):设置当对象离开其限定的位置过远时,会让该对象回到其受限制的位置。可设置为位置和旋转(Position and Rotation)以及不选择(None)。
Projection Distance(投射距离):设置当对象与其连接刚体的距离超过投影距离时,该对象会回到适当的位置。
Projection Angle(投影角度):设置当对象与其连接刚体的角度差超过投影角度时,该对象会回到适当的位置。
Configured In World Space(在世界坐标系中配置):勾选该项,所有与目标相关的数值都会在世界坐标系中来计算,而不在对象的局部坐标系中计算。
Swap Bodies(交换体):勾选该项,则应用交换刚体功能,连接着的两个刚体会发生交换。
Break Force(断开力):设置控制关节断开所需的作用力。
Break Torque(断开转矩):设置关节断开所需的转矩。
Enable Collision(激活碰撞):勾选该项,关节之间也会检测碰撞。
Enable Preprocessing(启用预处理):勾选该项,实现关节的稳定。(该项默认为开启状态)