【组件界面】
【前置基础】
关节的作用是使得两个刚体连接到一起,使两个刚体的运动受到对方的限制,例如绳子连接的两个石块的运动会受到对方的限制。在关节中,这种运动限制通过锚点来实现,其原理是:
?关节有六个自由度,在物体A上有个锚点a,物体B上有个锚点b,锚点ab分别相对于物体AB有Position和Rotation,两个锚点间也有Position和Rotation,后两者的差值表示的是关节的Position和Rotation的值。物体AB运动时使得锚点ab的Position和Rotation改变,若锚点ab的Position和Rotation的差值超过了所设置的节点的Position和Rotation的值,则锚点ab会反向限制物体AB的运动,也即物体AB的运动要使得锚点ab的Position和Rotation的差值在允许范围内,也即关节限制了物体的运动。
【属性】
- Connected Body:连接的另一个刚体,如果设置为空,表示连接空间中的固定点
- Anchor和Connected Anchor:锚点和连接锚点,坐标分别相对于该物体和连接的刚体而言,所有基于物理的模拟都使用此点作为计算中的中心。
- Axis 和Secondary Axis:这定义了关节的局部坐标,可以分为理解为x轴和y轴,一般要与物体的x轴和y轴重合,使用默认是,一般不做更改。
- Auto Configure Connected Anchor:是否自动计算连接锚点,自动计算时锚点和连接锚点的位置完全重合,基本不会对连接刚体的运动产生影响,一般需要自己手动配置。
- X, Y, Z Motion:关节的Position,表示锚点和连接锚点的位置差,有三个模式
- Free:不做任何限制
- Limited:有一定限制,可以设置限制值
- Locked:锁定,锚点和连接锚点的距离为0,注意不是两个刚体的距离为0
- Angular X, Y, Z Motion:类同X, Y, Z Motion
- Linear Limit Spring:当物体超过了限制位置时关节向物体施加弹簧力以拉回物体,这意味着物体可以超出一定距离。
- Spring:弹力,为0表示没有任何弹力,物体不能超过限制位置
- Damper:阻尼器,根据关节运动的速度按比例减小弹力,可以抑制关节震荡
- Linear Limit:线性限制,对XYZ的限制相同
- Limit:限制距离
- Bounciness:达到限制距离时的反弹系数,范围在0~1之间。不会越过限制位置,也不会停止运动,而是在限制位置处反弹,例如台球在台球桌边缘反弹。
- Contact Distance:关节位置与实施限制的限制位置之间的最小距离公差,公差越大,对象快速移动时违反限制的可能性就越低
- Angular X Limit Spring:角度限制弹力,当超过限制的角度时会施加扭矩以反向旋转物体
- Low/High?Angular X Limit:X轴旋转角度的上下限,用来控制X轴顺时针和逆时针旋转的角度,YZ轴只有一个值控制,顺时针和逆时针的限制值相同。如果实际中YZ顺时针和逆时针的旋转角度限制不同,可以考虑改变Axis。
之前的属性都是物体运动超过限制后关节被动响应以限制物体运动,关节还可以主动向连接的物体施加力。注意,无论是被动限制物体运动还是主动向物体施加力,施加的对象都是关节连接的两个物体,正如弹簧对连接的两个物体都产生力一般。
- Target Position:目标位置,指力将驱动两个物体移动,使得锚点和连接锚点直接的距离为该值,达到该值时驱动力消失。当两个连接的物体的质量相差很大时,同样的力来驱动这两个物体,那么其中一个物体几乎不移动,另一个物体移动的距离为该值。这相当于代替了Transform.Position。注意:关节在驱动时只保证两个锚点的位置重合,而不管旋转如何,因此不限制旋转时,物体不是水平移动的。如果给X轴(指关节坐标系的X轴)的距离设置了值,那么需要有X Drive的Position Spring不为0才有效。两个锚点的值不严格为该值,只是近似。X, Y, Z Motion的优先级高于Target Position。
- Target Velocity:关节在驱动力下移动到目标位置时所需的速度。没发现有什么作用。
- X /Y/ Z Drive:在X/Y/Z轴上的驱动力,有三个属性
- ??????????????Position Spring:驱动力大小
- Position Damper:阻尼
- Maximum Force:可施加的最大驱动力
- Target Rotation:类同Target Position,关节旋转驱动朝向的方向
- Target Angular Velocity:关节的旋转驱动达到的角速度,矢量的长度指定旋转速度,而其方向定义旋转轴
- Rotation Drive Mode:旋转驱动模式,如果将该模式设置为?X and YZ,则会围绕这些轴施加扭矩,如果使用?Slerp?模式,则?Slerp Drive?属性用于确定驱动扭矩。
- Angular X Drive/Angular YZDrive/Slerp Drive:类同X /Y/ Z Drive
- Projection Mode:投影模式,定义了当关节意外地超过自身的约束(由于物理引擎无法协调模拟中当前的作用力组合)时如何快速恢复约束。选项为??None??和??Position and Rotation?。投影不是物理过程,不会保持动量或遵循碰撞几何结构。例如,连接的两个物体完全锁死了,但在某些极端情况下仍会分开,这时需要快速恢复约束。
- Projection Distance:投影距离,关节超过约束的距离,必须超过该值才能让物理引擎尝试将关节拉回可接受位置。
- Projection Angle:投影角度,关节超过约束的旋转角度,必须超过该值才能让物理引擎尝试将关节拉回可接受位置。
- Configured in World Space:如果激活该属性,所有的目标值将在世界空间计算,而不是对象空间
- Swap Bodies:如果启用此属性,则会使关节表现得好像组件已附加到连接的刚体
- Break Force/Break Torque:当关节受到的力或扭矩大于该值时,关节会断开且关节组件会从物体上删除,同时有OnJointBreak消息。可通过Joint.currentForce和currentTorque获取解算为满足所有约束而施加的力和扭矩。
- Enable Collision:是否启用碰撞,默认不启用,不启用时关节连接的两个物体之间不会发生碰撞
- Enable Preprocessing:如果预处理被禁用,那么关节的某些“不可能”配置会保持更稳定,而不是疯狂地失去控制。
- Mass Scale:质量尺寸,关节的驱动力和约束力作用于物体时,在结算过程中所用的实际质量为物体的刚体组件上的质量乘以该值。如果物体的质量为1,连接的物体的质量为10,Mass Scale为10,则物体和连接物体的质量在关节解算器计算相关数据时视为相同。时刻注意,在物理系统中质量对物体的表现有很大影响,过于轻的质量容易出现抽搐、摇晃、飘荡、飞起等现象。
- Connected Mass Scale:连接的物体的质量尺寸。
【参考】
深入了解 Unity 可配置关节 Configurable Joints) - 游戏编程 🕹? (233tw.com)
Unity - Manual: Configurable Joint (unity3d.com)
|