using UnityEngine; [RequireComponent(typeof(Animator))] public class IKControl_Robot : MonoBehaviour { public bool ikActive; public Transform rightHandObj; public Transform leftHandObj; public Transform lookObj; public Transform stepOnObj; public Transform stepOffObj; protected Animator animator; private void Start() { animator = GetComponent(); transform.Rotate(0, 90, 0); } //a callback for calculating IK private void OnAnimatorIK() { if (animator) { //if the IK is active, set the position and rotation directly to the goal. if (ikActive) { // Set the look target position, if one has been assigned if (lookObj != null) { animator.SetLookAtWeight(1); animator.SetLookAtPosition(lookObj.position); } // Set the right hand target position and rotation, if one has been assigned if (rightHandObj != null) { animator.SetIKPositionWeight(AvatarIKGoal.RightHand, 1); animator.SetIKRotationWeight(AvatarIKGoal.RightHand, 1); animator.SetIKPosition(AvatarIKGoal.RightHand, rightHandObj.position); animator.SetIKRotation(AvatarIKGoal.RightHand, rightHandObj.rotation); } if (leftHandObj != null) { animator.SetIKPositionWeight(AvatarIKGoal.LeftHand, 1); animator.SetIKRotationWeight(AvatarIKGoal.LeftHand, 1); animator.SetIKPosition(AvatarIKGoal.LeftHand, leftHandObj.position); animator.SetIKRotation(AvatarIKGoal.LeftHand, leftHandObj.rotation); } if (stepOnObj != null) { animator.SetIKPositionWeight(AvatarIKGoal.LeftFoot, 1); animator.SetIKRotationWeight(AvatarIKGoal.LeftFoot, 1); animator.SetIKPosition(AvatarIKGoal.LeftFoot, stepOnObj.position); animator.SetIKRotation(AvatarIKGoal.LeftFoot, stepOnObj.rotation); } if (stepOffObj != null) { animator.SetIKPositionWeight(AvatarIKGoal.RightFoot, 1); animator.SetIKRotationWeight(AvatarIKGoal.RightFoot, 1); animator.SetIKPosition(AvatarIKGoal.RightFoot, stepOffObj.position); animator.SetIKRotation(AvatarIKGoal.RightFoot, stepOffObj.rotation); } } //if the IK is not active, set the position and rotation of the hand and head back to the original position else { animator.SetIKPositionWeight(AvatarIKGoal.RightHand, 0); animator.SetIKRotationWeight(AvatarIKGoal.RightHand, 0); animator.SetIKPositionWeight(AvatarIKGoal.LeftHand, 0); animator.SetIKRotationWeight(AvatarIKGoal.LeftHand, 0); animator.SetLookAtWeight(0); animator.SetIKPositionWeight(AvatarIKGoal.LeftFoot, 0); animator.SetIKRotationWeight(AvatarIKGoal.LeftFoot, 0); animator.SetIKPositionWeight(AvatarIKGoal.RightFoot, 0); animator.SetIKRotationWeight(AvatarIKGoal.RightFoot, 0); } } } }