Biped IK是标准Biped角色的IK系统,旨在复制和增强Unity内置角色IK设置的行为。
BipedIK还是FullBodyBipedIK?
最初BipedIK比FullBodyBipedIK的唯一好处是它的性能要好得多。但是,由于FinalIK 0.4,我们能够将FBBIK解算器迭代计数设定为0,在这种情况下,全身效果将不会被求解,而且其速度几乎与BipedIK相同。这样可以更轻松地对距离内的角色进行IK优化。因此,自0.4起,FullBodyBipedIK组件是解决Biped角色的建议解决方案。
BipedIK或Unity的Animator IK?
- Animator IK不允许对任何最基本的求解器参数进行修改,例如肢体弯曲方向,这使得系统很难(如果不是不可能)在稍微更高级的用例中使用或扩展。即使在最简单的情况下,Animator也可以产生不自然的姿势或在不需要的方向弯曲肢体,并且没有任何办法可以解决问题。
- Animator IK缺少脊椎解算器。
- Animator的LookAt功能通常可以解决奇怪的姿势,例如在仰视肩膀时向后弯曲脊柱。
- BipedIK还采用了AimIK。
- BipedIK不需要Unity Pro。
为了简化从Unity内置Animator IK的迁移,BipedIK支持相同的API,因此您可以从animator.SetIKPosition(...)转到bipedIK.SetIKPosition(...)。
与FinalIK软件包中的任何其他组件一样,BipedIK可以最大限度地减少设置所需的工作。 BipedIK会根据角色的骨骼结构和最常见的命名惯例自动检测Biped骨骼,因此,除非您使用中文命名骨骼,否则只要您可以放入组件,就应该准备好BipedIK。如果BipedIK无法识别骨骼参考,或者你只想更改它们,则可以在inspector中管理它们。
使用步骤:
- 将BipedIK组件添加到角色的根节点(与Animator / Animation组件相同的GameObject)
- 确保自动检测到的Biped骨骼是正确的
- 按下播放,检查solver的处理结果
使用Biped IK的sovler:
public BipedIK bipedIK;
void LateUpdate () {
bipedIK.solvers.leftFoot.IKPosition = something;
bipedIK.solvers.spine.IKPosition = something;
...
}
在运行时添加BipedIK:
- 通过脚本添加BipedIK组件
- 分配BipedIK.references
(- 可选)调用BipedIK.SetToDefaults()将solver的参数设置为默认的BipedIK值。 否则使用每个sovler的默认值。
组件参数:
- timeStep - 如果为零,将更新每个LateUpdate()中的求解器,用于骨骼带动画时的情况。 如果大于零,将按频率更新,以便求解器将在所有对象上同时到达其目标。
- fixTransforms - 如果为true,则将解算器使用的所有Transforms修复为每个Update中的初始状态。 这可以防止没有动画骨骼和animator的剔除的问题,并且性能成本很低。
- references -BipedIK所参照的角色骨骼。
Solver 变量:
- Left Foot
- Right Foot
- Left Hand
- Right Hand
- Spine
- Aim
- Look At
-
Pelvis - Pos Offset 和Rot Offset 可用于从角色的动画位置/旋转中偏移角色的骨盆。 Pos Weight和Rot Weight可用于将骨盆平移和旋转到bipedIK.solvers.pelvis.position和bipedIK.solvers.pelvis.rotation。