using UnityEngine; using UnityEngine.Animations; using UnityEngine.Animations.Rigging; namespace LibMMD.Unity3D.Animation { // Retained for source compatibility. Runtime IK is evaluated once in Poser before physics. internal struct MmdTwoBoneIkJob : IAnimationJob { public ReadWriteTransformHandle Root; public ReadWriteTransformHandle Mid; public ReadWriteTransformHandle Tip; public ReadOnlyTransformHandle Target; public ReadOnlyTransformHandle Hint; public AffineTransform TargetOffset; public float Weight; public float PositionWeight; public float RotationWeight; public float HintWeight; public void ProcessRootMotion(AnimationStream stream) { } public void ProcessAnimation(AnimationStream stream) { var weight = Mathf.Clamp01(Weight); if (weight <= 0f) return; AnimationRuntimeUtils.SolveTwoBoneIK(stream, Root, Mid, Tip, Target, Hint, Mathf.Clamp01(PositionWeight) * weight, Mathf.Clamp01(RotationWeight) * weight, Mathf.Clamp01(HintWeight) * weight, TargetOffset); } } }