ik 要注意将世界坐标转化为自身坐标
using UnityEngine;
using System.Collections;
using System;
[RequireComponent(typeof(Animator))]
public class IKBehaviour : MonoBehaviour {
protected Animator animator;
public bool ikActive ;
public Transform rightHandObj ;
public Transform lefthandobj ;
public Transform leftfootobj;
public Transform rightfootobj;
// Use this for initialization
void Start () {
animator = GetComponent<Animator>();
ikActive = true;
}
void OnAnimatorIK()
{
if(animator)
{
if(ikActive)
{
animator.SetIKPositionWeight(AvatarIKGoal.RightHand,1f);
animator.SetIKRotationWeight(AvatarIKGoal.RightHand,0f);
animator.SetIKPositionWeight(AvatarIKGoal.LeftHand,1f);
animator.SetIKRotationWeight(AvatarIKGoal.LeftHand,0f);
animator.SetIKPositionWeight(AvatarIKGoal.RightFoot,1f);
animator.SetIKRotationWeight(AvatarIKGoal.RightFoot,0f);
animator.SetIKPositionWeight(AvatarIKGoal.LeftFoot,1f);
animator.SetIKRotationWeight(AvatarIKGoal.LeftFoot,0f);
if(rightHandObj != null)
{
animator.SetIKPosition(AvatarIKGoal.RightHand,transform.InverseTransformPoint(rightHandObj.position));
animator.SetIKRotation(AvatarIKGoal.RightHand,rightHandObj.rotation);
}
if(lefthandobj!=null)
{
animator.SetIKPosition(AvatarIKGoal.LeftHand,transform.InverseTransformPoint(lefthandobj.position));
animator.SetIKRotation(AvatarIKGoal.LeftHand,lefthandobj.rotation);
}
if(rightfootobj != null)
{
animator.SetIKPosition(AvatarIKGoal.RightFoot,transform.InverseTransformPoint( rightfootobj.position));
animator.SetIKRotation(AvatarIKGoal.RightFoot,rightfootobj.rotation);
}
if(leftfootobj!=null)
{
animator.SetIKPosition(AvatarIKGoal.LeftFoot,transform.InverseTransformPoint(leftfootobj.position));
animator.SetIKRotation(AvatarIKGoal.LeftFoot,leftfootobj.rotation);
}
}
else
{
animator.SetIKPositionWeight(AvatarIKGoal.RightHand,0);
animator.SetIKRotationWeight(AvatarIKGoal.RightHand,0);
animator.SetIKPositionWeight(AvatarIKGoal.LeftHand,0);
animator.SetIKRotationWeight(AvatarIKGoal.LeftHand,0);
animator.SetIKPositionWeight(AvatarIKGoal.RightFoot,0);
animator.SetIKRotationWeight(AvatarIKGoal.RightFoot,0);
animator.SetIKPositionWeight(AvatarIKGoal.LeftFoot,0);
animator.SetIKRotationWeight(AvatarIKGoal.LeftFoot,0);
}
}
}
}