using UnityEngine; using System.Collections; namespace RootMotion.FinalIK { /// /// The base abstract class for all class that are translating a hierarchy of bones to match the translation of bones in another hierarchy. /// public abstract class Poser: SolverManager { /// /// Reference to the other Transform (should be identical to this one) /// public Transform poseRoot; /// /// The master weight. /// [Range(0f, 1f)] public float weight = 1f; /// /// Weight of localRotation matching /// [Range(0f, 1f)] public float localRotationWeight = 1f; /// /// Weight of localPosition matching /// [Range(0f, 1f)] public float localPositionWeight; /// /// Map this instance to the poseRoot. /// public abstract void AutoMapping(); public virtual void AutoMapping(Transform[] bones) { } /// /// For manual update of the poser. /// public void UpdateManual() { UpdatePoser(); } private bool initiated; protected abstract void InitiatePoser(); protected abstract void UpdatePoser(); protected abstract void FixPoserTransforms(); /* * Updates the solver. If you need full control of the execution order of your IK solvers, disable this script and call UpdateSolver() instead. * */ protected override void UpdateSolver() { if (!initiated) InitiateSolver(); if (!initiated) return; UpdatePoser(); } /* * Initiates the %IK solver * */ protected override void InitiateSolver() { if (initiated) return; InitiatePoser(); initiated = true; } protected override void FixTransforms() { if (!initiated) return; FixPoserTransforms(); } } }