Dynamic Bone Chain(动态骨骼链)组件介绍
Dynamic Bone Chain(动态骨骼链)组件介绍
Dynamic Bone Chain 是一个允许你为已绑定模型或化身(Avatar)的骨骼添加刚体(Rigidbody)物理效果的组件。拥有刚体物理特性的骨骼被称为“动态骨骼”;该名称源自一个提供类似功能的 Unity 插件。
要为模型添加动态骨骼,请在 Inspector 面板中查看模型的骨骼架构,直到找到你想要作为“根(Root)”或“主(Master)”骨骼的 Slot(插槽)。然后,附加 Dynamic Bone Chain 组件,并点击 Setup From Children(从子级设置)。这将把根骨骼及其所有子级骨骼添加到动态骨骼链中。
Dynamic Bone Chain 组件包含多种用于调整骨骼链物理行为的属性。其中最重要的属性包括:Inertia(惯性)、InertiaForce(惯性力)、Damping(阻尼)、Elasticity(弹性)和 Stiffness(硬度)。
字段 (Fields)
| 属性名称 | 类型 | 描述 |
|---|---|---|
| Inertia (惯性) |
Float | 控制骨骼受到的惯性量。不影响骨骼的加速度。 |
| InertiaForce (惯性力) |
Float | 控制骨骼受到的惯性量。会影响骨骼的加速度。 |
| Damping (阻尼) |
Float | 控制骨骼受到的阻尼量。较高的阻尼值会导致骨骼迅速减速。 |
| Elasticity (弹性) |
Float | 控制骨骼关节的弹性。较高的弹性值会使骨骼更快地加速回到初始旋转位置。 |
| Stiffness (硬度) |
Float | 控制骨骼关节的刚性/硬度。 |
| SimulateTerminalBones (模拟末梢骨骼) |
Bool | 是否使用链条中的最后一根骨骼。如果你的骨架中有不控制任何内容的末端骨骼,通常建议关闭此项。 |
| BaseBoneRadius (基础骨骼半径) |
Float | 允许与骨骼交互的球体默认大小。 |
| DynamicPlayerCollision (动态玩家碰撞) |
Bool | 是否允许此骨骼链与玩家发生碰撞。 |
| CollideWithOwnBody (与自身碰撞) |
Bool | 是否允许此骨骼链与该动态骨骼链的当前激活用户发生碰撞。 |
| HandCollisionVibration (手部碰撞振动) |
VibratePreset | 手部触摸链条碰撞体时的振动强度。 |
| CollideWithHead (与头部碰撞) |
Bool | 是否允许骨骼链与玩家头部碰撞。 |
| CollideWithBody (与身体碰撞) |
Bool | 是否允许骨骼链与玩家身体部位碰撞。 |
| CollideWithLeftHand (与左手碰撞) |
Bool | 是否允许骨骼链与玩家左手碰撞。 |
| CollideWithRightHand (与右手碰撞) |
Bool | 是否允许骨骼链与玩家右手碰撞。 |
| Gravity (重力) |
Float3 | 在 GravitySpace 空间中始终施加于骨骼链的力。 |
| GravitySpace (重力空间) |
RootSpace | 应用 Gravity 的坐标空间。 |
| UseUserGravityDirection (使用用户重力方向) |
Bool | 是否使用该动态骨骼链激活用户的角色控制器重力方向作为重力方向。 |
| LocalForce (本地力) |
Float3 | 在动态骨骼链的本地空间中施加的恒定力。 |
| GlobalStretch (全局拉伸) |
Float | 骨骼链在静止状态下的拉伸程度。 |
| MaxStretchRatio (最大拉伸比例) |
Float | 拉动骨骼时允许产生的最大拉伸量。 |
| CurrentStretchRatio (当前拉伸比例) |
RawOutput<Float> | 当前施加在骨骼上的拉伸量。 |
| StretchRestoreSpeed (拉伸恢复速度) |
Float | 额外拉伸消失的速度。 |
| UseLocalUserSpace (使用本地用户空间) |
Bool | 是否使动态骨骼仅对由于用户 Slot 本地位置变化产生的运动做出反应。 |
| SimulationSpace (模拟空间) |
RootSpace | 运动应影响此动态骨骼链的坐标空间。 |
| StaticColliders (静态碰撞体) |
SyncRefList | 要使用的动态骨骼碰撞体(IDynamicBoneCollider)组件列表。 |
| VisualizeColliders (碰撞体可视化) |
Bool | 显示所有与此骨骼碰撞的碰撞体。 |
| VisualizeBones (骨骼可视化) |
Bool | 显示骨骼、其碰撞体以及它们之间的连接。 |
| IsGrabbable (可抓取) |
Bool | 允许通过触摸并抓取骨骼。需要勾选 DynamicPlayerCollision。 |
| ActiveUserRootOnly (仅激活用户根级) |
Bool | 仅允许该动态骨骼链的激活用户(位于该房间的用户)进行抓取。 |
| AllowSteal (允许抢夺) |
Bool | 当有人正抓着链条时,是否允许第二个用户直接抢过抓取权。 |
| GrabPriority (抓取优先级) |
Int | 设置抓取优先级。 |
| IgnoreGrabOnFirstBone (忽略第一根骨骼的抓取) |
Bool | 防止抓取时 EffectorBoneIndex 为 0。 |
| GrabRadiusTolerance (抓取半径容差) |
Float | 即使用户的抓取球未触及骨骼半径,仍能额外抓取到骨骼的距离。 |
| GrabReleaseDistance (抓取释放距离) |
Float | 骨骼在自动释放前可以被拉动的最远距离。 |
| GrabSlipping (抓取滑动) |
Bool | 当手部沿着骨骼链远离第一根骨骼移动时,是否使 EffectorBoneIndex 增加(即抓取点顺着链条滑动)。除非重新抓取,否则该索引不会减少。 |
| GrabTerminalBones (抓取末梢骨骼) |
Bool | 链条中的最后一根骨骼是否可以被抓取。 |
| GrabVibration (抓取振动) |
VibratePreset | 用手抓取链条时的振动强度。 |
| IgnoreOwnLeftHand (忽略自身左手) |
Bool | 是否禁止激活用户用左手抓取此骨骼链。 |
| IgnoreOwnRightHand (忽略自身右手) |
Bool | 是否禁止激活用户用右手抓取此骨骼链。 |
| EffectorTarget (效应器目标) |
Slot | 链条尝试将其骨骼之一定位到此 Slot(用于抓取)。 |
| EffectorBoneIndex (效应器骨骼索引) |
Int | 当前正在定位的是哪根骨骼,此后的每一根骨骼表现得就像未被抓取一样。 |
| EffectorBoneOffset (效应器骨骼偏移) |
Float3 | 骨骼被抓取瞬间,相对于抓取 Slot 本地空间的偏移量。防止骨骼瞬间吸附到手部中心,提供更平滑的抓取体验。 |
| _activeGrabber | Grabber | 当前正在抓取此骨骼链的 Grabber 组件。 |
| Bones (骨骼列表) |
List<Bone> | 由此动态骨骼链控制的骨骼列表。 |
同步委托 (Sync Delegates / 按钮事件)
| 方法名称 | 类型 | 描述 |
|---|---|---|
| SetupFromChildren | ButtonEventHandler | 从子级设置骨骼,忽略已经被驱动的骨骼。 |
| SetupFromAllChildren | ButtonEventHandler | 设置所有子级骨骼。通过断开现有的驱动链接并替换为此组件的驱动,无论它们是否已被驱动。 |
| SetupFromAllRigChildren | ButtonEventHandler | 将子骨骼设置为此组件的动态骨骼。仅识别父级 Slot 中 Rig 组件指定的 Slot。 |
| ReplaceSmoothTransforms | ButtonEventHandler | 将影响目标骨骼的所有 Smooth Transform(平滑变换)替换为此骨骼链的驱动。 |
| AddCollidersFromHierarchy | ButtonEventHandler | 将该骨骼层级下所有属于动态骨骼碰撞体的碰撞体添加到 StaticColliders 列表中。 |
| AlwaysGrabLastBone | ButtonEventHandler | 将链中每个骨骼的 GrabOverride 更改为指向链中的最后一根骨骼。 |
| CleanSmoothTransforms | ButtonEventHandler | 清除目标骨骼上的平滑变换。 |
Bone(骨骼子类型)属性
| 属性名称 | 类型 | 描述 |
|---|---|---|
| BoneSlot | Slot | 此数据引用的动态骨骼所在的 Slot。 |
| OrigPosition | Float3 | BoneSlot 的静止位置。 |
| OrigRotation | FloatQ | BoneSlot 的静止旋转。 |
| RadiusModifier | Float | 用于乘以组件默认半径以计算此骨骼半径的系数。 |
| GrabOverride | Bone | 当抓取此骨骼时,实际会被抓取的另一根骨骼。 |
| Collide | Bool | 此骨骼是否具有碰撞判定。 |
| _posDrive | FieldDrive<Float3> | 驱动 BoneSlot 位置的引用,用于产生动态骨骼运动效果。 |
| _rotDrive | FieldDrive<FloatQ> | 驱动 BoneSlot 旋转的引用,用于产生动态骨骼运动效果。 |
示例与参见
可以通过轮盘菜单打开 Inspector 进一步调整这些参数。

No comments to display
No comments to display