using UnityEngine; using System; using System.Collections; [RequireComponent(typeof(Animator))] public class IKControl_Robot : MonoBehaviour { protected Animator animator; public bool ikActive = false; public Transform rightHandObj = null; public Transform leftHandObj = null; public Transform lookObj = null; public Transform stepOnObj = null; public Transform stepOffObj = null; void Start() { animator = GetComponent(); transform.Rotate(0, 90, 0); } //a callback for calculating IK 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); } } } }