我试图按照统一文档中的说明操作如何在此页面中使用反向运动学:
但是当我为动画师选择控制器时,我没有IK动画师控制器。
我现在尝试添加脚本。但是右手被折叠到另一边的手。它不喜欢它持有闪光灯:脚本附加到ThirdPersonController。然后我将Inspector中的脚本拖到右边的ObObj和EthanRightHand以及lookObj我拖动了手电筒。
但这手似乎是错误的。
这是我现在使用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);
}
}
}
}
答案 0 :(得分:0)
将一个空的游戏对象添加到手电筒中,而不是手电筒对象本身。点击播放然后摆弄空对象的位置,直到它到达你想要的位置。然后只需将手电筒转为预制,停止播放模式,并确保场景中的手电筒与预制件匹配(如果需要,您可以使用还原来执行此操作)。
现在它每次都会做你想要的。您甚至可以使用多个预制件,其中空对象的位置不同,以允许具有更大或更小手的字符令人信服地保持它。