插件地址:https://assetstore.unity.com/packages/tools/animation/dynamic-bone-16743
Dynamic Bone 可用于对角色的骨骼(bones)或者铰链系统(joints)施加物理效果。
只需要简单的几个步骤,游戏角色的头发、衣服、胸部或者是其他的任何部位,都可以以近似真实的状态运动。
你可以打开Assets/DynamicBone/Demo/Demo1场景来预览一下Dynamic Bone的工作状态。
如果你对本插件有任何疑问或者建议,请电邮至[email protected]。
————————————————————————-
使用的基本步骤:
1. 准备好合适的角色,角色骨骼可以是Mecanim或legacy的。
2. 选中你要应用Dynamic Bone的游戏对象。
3. 在组件(component)菜单,选择Dynamic Bone -> Dynamic Bone。
4. 在检视(inspector)视图, 选择根对象(root object)。
5. 调整dynamic bone的参数(详情请参考下面的内容)。
如有必要,你可以添加一些碰撞体以避免穿模:
1. 选中你要添加碰撞体的游戏对象。
2. 在组件(component)菜单,选择DDynamic Bone -> Dynamic Bone Collider。
3. 调整碰撞体的位置和大小。
4. 在Dynamic Bone组建中, 调整colliders属性的大小并且将刚才配置的碰撞体放入该属性。
————————————————————————-
动态骨骼组件(Dynamic Bone component)描述:
– Root(根节点)
需要添加物理效果的骨骼链(transform hierarchy)的根对象(根节点)。
– Roots(多个根节点)
允许骨骼链拥有多个根对象。它们共享同样的参数(parameters)。
– Update Rate(刷新频率)
物理模拟的频率,单位为帧每秒(FPS)。
– Update Mode(刷新模式)
Normal: 拟按固定时间刷新。
AnimatePhysics: 与Unity物理引擎同步刷新。
UnscaledTime: 刷新频率不受Time.timeScale影响。
Default: 每帧刷新(建议选择)。
– Damping(阻尼)
骨骼的移动速度在多大程度上被减慢
– Elasticity(弹性)
为了让每一根骨骼回归原始方向,要施加多少力
– Stiffness(刚性)
在多大程度上保存骨骼的原始方向。
– Inert(惰性)
设置一个阈值,当角色的位置改变低于此阈值时,不启用物理模拟。、
– Friction(摩擦力)
与碰撞体接触时,骨骼会被减慢多少
– Radius(半径)
每一根骨骼在参与碰撞检测时都可以被看作是一个球形碰撞体,Radius就是该球的半径
– Damping Distrib, Elasticity Distrib, Stiffness Distrib, Inert Distrib, Radius Distrib
随着骨骼链的延伸,各项参数的变化情况。各个骨骼的实际参数值等于这些曲线中各个位置的值乘以上面的相关参数值。
– End Length(尾端长度)
尾端长度,如果该值不为零,则在骨骼链的末尾额外生成一个骨骼,骨骼的长度为该值乘以最后两个骨骼间的距离。
– End Offset(尾端偏移)
如果该值不为零,则在骨骼链的末尾额外生成一个骨骼,偏移量在角色形象的本地坐标系下。
– Gravity(重力)
在世界坐标系下影响骨骼的重力。
– Force(力)
世界坐标系下影响骨骼的力。
– Blend Weight(权重)
物理模拟在与原动画混合时所拥有的权重。
– Colliders
需要与骨骼进行碰撞检测的碰撞体
– Exclusions
被排除在物理模拟之外的骨骼
– Freeze Axis
限制骨骼在特定平面上移动。
– Distant Disable, Reference Object, Distance To Object
当角色距离相机或者距离超过该值时取消物理模拟。如果Reference Object为空,则默认其为main camera。
动态骨骼碰撞体组件(Dynamic Bone Collider):
– Center(中心)
球体或胶囊体的中心,在对象的本地坐标系下。
– Radius(半径)
球体或者胶囊体的半径,受对象缩放值(transform’s scale)的影响。
– Height(高度)
胶囊体的高度,包括了两个半球,受对象缩放值(transform’s scale)的影响。
– Radius 2
胶囊体中另一个半球的半径,0表示等于上面的Radius。
– Direction(方向)
胶囊体高度所指向的轴
– Bound(边界)
限制骨骼是在边界内或者边界外。
————————————————————————-
Dynamic Bone脚本提供的方法和变量:
– public void SetWeight(float w);
控制物理模拟与动画混合时的权重
– public void UpdateParameters();
在运行时修改参数后调用该方法,更新参数值。
– public bool m_Multithread
开启或关闭多线程以提高效率,默认为开启。
————————————————————————-
版本历史(略)
1.0.1 Initial release.
1.0.2 Improve inspector UI.
1.0.3 Fix inert unstable when enabled / disabled.
1.1.0 Use curve to setup parameters over hierarchy chain.
Collider can configured to constrain bones inside bound.
1.1.1 Add exclusion setting.
1.1.2 Deal with negative scale problem.
1.1.3 Fix bug with bones contain scale.
1.1.4 Add freeze axis.
Fix bug when added via script.
1.1.5 Add distant disable.
Reduce GC alloc.
1.1.6 Fix capsule collider bug.
1.1.7 Unity 5 support.
1.1.8 Fix problems caused by negative scale.
1.1.9 Improve detecting negative scale.
Fix bug if collider is set as inside.
Add UpdateMode setting.
1.1.10 Fix problems caused by negative scale after Unity 5.4.
1.2.0 Add tool tips.
Add plane collider.
Add function to update parameters at runtime.
1.2.1 Add friction parameter.
Update UNITY_5 to compatible with newer version.
1.2.2 Add “Default” update mode, fix some jitter issue.
1.3.0 Add “Roots” parameter to setup multiple root transforms.
Add “Blend Weight” parameter to control how physics blends with existing animation.
Collider add enable/disable check box.
Collider add “Radius 2” to setup capsules of two radii.
Use multithread to improve physics simulation performance.
Parameters can be animated with Unity animation system.
1.3.1 Fix “Gravity” bug in version 1.3.0
1.3.2 Disable multithread in WebGL build.