- Home /
Question by
Bitb0t · May 02, 2017 at 01:24 PM ·
animationinverse kinematic
Why does my ik footplacing script do not work?
using System.Collections; using System.Collections.Generic; using UnityEngine;
public class ikTest : MonoBehaviour {
Animator animator;
Vector3 leftFootPosition;
Vector3 rightFootPosition;
Quaternion leftFootRotation;
Quaternion rightFootRotation;
float leftFootWeight;
float rightFootWeight;
Transform leftFoot;
Transform rightFoot;
void Start ()
{
animator = GetComponent<Animator>();
leftFoot = animator.GetBoneTransform(HumanBodyBones.LeftFoot);
rightFoot = animator.GetBoneTransform(HumanBodyBones.RightFoot);
}
void Update () {
RaycastHit leftHit;
RaycastHit rightHit;
Vector3 leftPosition = leftFoot.TransformPoint(Vector3.zero);
Vector3 rightPosition = rightFoot.TransformPoint(Vector3.zero);
leftFootRotation = leftFoot.rotation;
rightFootRotation = rightFoot.rotation;
if(Physics.Raycast(leftPosition, -Vector3.up, out leftHit, 1))
{
leftFootPosition = leftHit.point;
leftFootRotation = Quaternion.FromToRotation(transform.up, leftHit.normal) * transform.rotation;
}
if (Physics.Raycast(rightPosition, -Vector3.up, out rightHit, 1))
{
rightFootPosition = rightHit.point;
rightFootRotation = Quaternion.FromToRotation(transform.up, rightHit.normal) * transform.rotation;
}
}
private void OnAnimatorIK(int layerIndex)
{
leftFootWeight = animator.GetFloat("LeftFoot");
rightFootWeight = animator.GetFloat("RightFoot");
animator.SetIKPositionWeight(AvatarIKGoal.LeftFoot, leftFootWeight);
animator.SetIKPositionWeight(AvatarIKGoal.RightFoot, rightFootWeight);
animator.SetIKPosition(AvatarIKGoal.LeftFoot, leftFootPosition);
animator.SetIKPosition(AvatarIKGoal.RightFoot, rightFootPosition);
animator.SetIKRotationWeight(AvatarIKGoal.LeftFoot, leftFootWeight);
animator.SetIKRotationWeight(AvatarIKGoal.RightFoot, rightFootWeight);
animator.SetIKRotation(AvatarIKGoal.LeftFoot, leftFootRotation);
animator.SetIKRotation(AvatarIKGoal.RightFoot, rightFootRotation);
}
}
Comment