using UnityEngine;
using System.Collections;
using RootMotion.FinalIK;
namespace RootMotion.Demos {
///
/// Manages FBBIK settings that are not visible in the FBBIK custom inspector.
///
public class FBBIKSettings : MonoBehaviour {
///
/// Settings for a limb
///
[System.Serializable]
public class Limb {
public FBIKChain.Smoothing reachSmoothing; // Smoothing of the Reach effect (since 0.2)
public float maintainRelativePositionWeight; // Weight of maintaining the limb's position relative to the body part that it is attached to (since 0.2, used to be IKEffector.Mode.MaintainRelativePosition)
public float mappingWeight = 1f;
// Apply the settings
public void Apply(FullBodyBipedChain chain, IKSolverFullBodyBiped solver) {
solver.GetChain(chain).reachSmoothing = reachSmoothing;
solver.GetEndEffector(chain).maintainRelativePositionWeight = maintainRelativePositionWeight;
solver.GetLimbMapping(chain).weight = mappingWeight;
}
}
public FullBodyBipedIK ik; // Reference to the FBBIK component
public bool disableAfterStart; // If true, will not update after Start
public Limb leftArm, rightArm, leftLeg, rightLeg; // The Limbs
public float rootPin = 0f; // Weight of pinning the root node to it's animated position
public bool bodyEffectChildNodes = true; // If true, the body effector will also drag the thigh effectors
// Apply all the settings to the FBBIK solver
public void UpdateSettings() {
if (ik == null) return;
leftArm.Apply(FullBodyBipedChain.LeftArm, ik.solver);
rightArm.Apply(FullBodyBipedChain.RightArm, ik.solver);
leftLeg.Apply(FullBodyBipedChain.LeftLeg, ik.solver);
rightLeg.Apply(FullBodyBipedChain.RightLeg, ik.solver);
ik.solver.chain[0].pin = rootPin;
ik.solver.bodyEffector.effectChildNodes = bodyEffectChildNodes;
}
void Start() {
Debug.Log("FBBIKSettings is deprecated, you can now edit all the settings from the custom inspector of the FullBodyBipedIK component.");
UpdateSettings();
if (disableAfterStart) this.enabled = false;
}
void Update() {
UpdateSettings();
}
}
}