Skip to main content

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(硬度)。

image.png

字段 (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 进一步调整这些参数。

社区预设 (Community Presets)