为什么IK​​控制器不存在于Inspector中的ThirdPersonController Animator组件中?

时间:2017-04-27 12:35:09

标签: unity3d unity5

IK

我试图按照统一文档中的说明操作如何在此页面中使用反向运动学:

Inverse Kinematics

但是当我为动画师选择控制器时,我没有IK动画师控制器。

我现在尝试添加脚本。但是右手被折叠到另一边的手。它不喜欢它持有闪光灯:脚本附加到ThirdPersonController。然后我将Inspector中的脚本拖到右边的ObObj和EthanRightHand以及lookObj我拖动了手电筒。

但这手似乎是错误的。

IK Control

这是我现在使用IKControl的脚本:

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);
            }
        }
    }
}

1 个答案:

答案 0 :(得分:0)

将一个空的游戏对象添加到手电筒中,而不是手电筒对象本身。点击播放然后摆弄空对象的位置,直到它到达你想要的位置。然后只需将手电筒转为预制,停止播放模式,并确保场景中的手电筒与预制件匹配(如果需要,您可以使用还原来执行此操作)。

现在它每次都会做你想要的。您甚至可以使用多个预制件,其中空对象的位置不同,以允许具有更大或更小手的字符令人信服地保持它。