大多数角色动画都是通过将骨骼中关节的角度旋转到预定的值来创建的。子关节一个物理组件,允许刚体组件之间建立动态连接,通常允许一定程度的运动,例如铰链。 更多信息
参见 术语表的位置根据其父级的旋转而变化。关节链的终点由沿链的各个关节的角度和相对位置决定。这种摆姿势的方法称为正向运动学描述角色关节和身体位置和方向的几何图形。逆运动学使用它来控制角色运动。
参见 术语表。
但是,从相反的角度摆姿势通常很有用。从空间中的某个选定位置或目标开始,然后向后工作以找到一种方法来调整关节的方向,使终点到达目标。如果您希望角色抓住物体或站在不平坦的表面上,这将非常有用。这种方法称为逆运动学(IK)。它在 Mecanim 中受支持,用于具有正确配置的角色一个用于将动画从一个骨骼重新定位到另一个骨骼的接口。 更多信息
参见 术语表的人形角色。
要为角色设置 IK,您通常会在场景场景包含游戏环境和菜单。将每个唯一的场景文件视为一个唯一的关卡。在每个场景中,您放置环境、障碍物和装饰物,从本质上讲,您将游戏分段设计和构建。 更多信息
参见 术语表周围放置角色交互的对象。您可以使用这些对象和您的角色在脚本中设置 IK。您可以使用以下动画器函数
例如,上图显示了一个角色触摸圆柱形物体。要使用 IK 和脚本执行此操作,请执行以下步骤
OnAnimatorIK
回调。在后面的步骤中,您将使用此回调在脚本中实现逆运动学。IKControl
。此脚本设置角色右手部的 IK 目标。此脚本还会更改观察位置,以便角色在抓取圆柱体物体时朝向圆柱体物体。完整的脚本如下所示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);
}
}
}
}
为避免右手穿过圆柱体游戏对象Unity 场景中的基本对象,可以表示角色、道具、场景、摄像机、路径点等。游戏对象的功能由附加到它的组件定义。 更多信息
参见 术语表,向Cylinder
游戏对象添加一个空的子游戏对象。为此,右键单击层次结构窗口中的圆柱体游戏对象,然后选择创建空对象。将此空的子游戏对象命名为Cylinder Grab Handle
。
定位并旋转Cylinder Grab Handle
游戏对象,使右手接触圆柱体但不穿过圆柱体。
Cylinder Grab Handle
游戏对象分配为IKControl
脚本的右手对象属性。Cylinder
游戏对象分配为观察对象,以便当启用IK 活动时,角色观察圆柱体的中心。当您启用和禁用IK 活动复选框时,您的角色应触摸并释放圆柱体游戏对象。在播放模式下,更改Cylinder
游戏对象的位置和旋转,以查看右手和角色观察是如何反应的。