holopy3/Assets/Plugins/RootMotion/FinalIK/BipedIK/BipedIKSolvers.cs
2020-12-10 15:25:12 +01:00

89 lines
2.9 KiB
C#

using UnityEngine;
using System.Collections;
using System;
namespace RootMotion.FinalIK {
/// <summary>
/// BipedIK solver collection.
/// </summary>
[System.Serializable]
public class BipedIKSolvers {
/// <summary>
/// The left foot
/// </summary>
public IKSolverLimb leftFoot = new IKSolverLimb(AvatarIKGoal.LeftFoot);
/// <summary>
/// The right foot.
/// </summary>
public IKSolverLimb rightFoot = new IKSolverLimb(AvatarIKGoal.RightFoot);
/// <summary>
/// The left hand.
/// </summary>
public IKSolverLimb leftHand = new IKSolverLimb(AvatarIKGoal.LeftHand);
/// <summary>
/// The right hand.
/// </summary>
public IKSolverLimb rightHand = new IKSolverLimb(AvatarIKGoal.RightHand);
/// <summary>
/// The spine.
/// </summary>
public IKSolverFABRIK spine = new IKSolverFABRIK();
/// <summary>
/// The Look At %IK.
/// </summary>
public IKSolverLookAt lookAt = new IKSolverLookAt();
/// <summary>
/// The Aim %IK. Rotates the spine to aim a transform's forward towards the target.
/// </summary>
public IKSolverAim aim = new IKSolverAim();
/// <summary>
/// %Constraints for manipulating the character's pelvis.
/// </summary>
public Constraints pelvis = new Constraints();
/// <summary>
/// Gets the array containing all the limbs.
/// </summary>
public IKSolverLimb[] limbs {
get {
if (_limbs == null || (_limbs != null && _limbs.Length != 4)) _limbs = new IKSolverLimb[4] { leftFoot, rightFoot, leftHand, rightHand };
return _limbs;
}
}
private IKSolverLimb[] _limbs;
/// <summary>
/// Gets the array containing all %IK solvers.
/// </summary>
public IKSolver[] ikSolvers {
get {
if (_ikSolvers == null || (_ikSolvers != null && _ikSolvers.Length != 7)) _ikSolvers = new IKSolver[7] { leftFoot, rightFoot, leftHand, rightHand, spine, lookAt, aim };
return _ikSolvers;
}
}
private IKSolver[] _ikSolvers;
public void AssignReferences(BipedReferences references) {
// Assigning limbs from references
leftHand.SetChain(references.leftUpperArm, references.leftForearm, references.leftHand, references.root);
rightHand.SetChain(references.rightUpperArm, references.rightForearm, references.rightHand, references.root);
leftFoot.SetChain(references.leftThigh, references.leftCalf, references.leftFoot, references.root);
rightFoot.SetChain(references.rightThigh, references.rightCalf, references.rightFoot, references.root);
// Assigning spine bones from references
spine.SetChain(references.spine, references.root);
// Assigning lookAt bones from references
lookAt.SetChain(references.spine, references.head, references.eyes, references.root);
// Assigning Aim bones from references
aim.SetChain(references.spine, references.root);
leftFoot.goal = AvatarIKGoal.LeftFoot;
rightFoot.goal = AvatarIKGoal.RightFoot;
leftHand.goal = AvatarIKGoal.LeftHand;
rightHand.goal = AvatarIKGoal.RightHand;
}
}
}