You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
50 lines
1.7 KiB
C#
50 lines
1.7 KiB
C#
using UnityEngine;
|
|
using System;
|
|
using System.Collections;
|
|
|
|
[RequireComponent(typeof(Animator))]
|
|
public class IKControl : MonoBehaviour {
|
|
|
|
protected Animator animator;
|
|
|
|
public bool ikActive = false;
|
|
public Transform rightHandObj = null;
|
|
public Transform lookObj = null;
|
|
|
|
void Start ()
|
|
{
|
|
animator = GetComponent<Animator>();
|
|
}
|
|
|
|
//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 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.SetLookAtWeight(0);
|
|
}
|
|
}
|
|
}
|
|
} |