包含此页的版本:
不含此页的版本:
有时,您的动画是“就地”的,这意味着如果您将其放在场景场景包含游戏的环境和菜单。将每个唯一的场景文件视为一个独特的关卡。在每个场景中,你放置你的环境、障碍物和装饰品,基本上是将你的游戏设计和构建成碎片。更多信息
请参阅术语表,它不会移动它所在的角色。换句话说,动画不包含”根运动(root motion) 角色根节点的运动,无论它是由动画本身控制还是外部控制。更多信息
请参阅术语表”.为此,您可以从脚本中修改根运动。要将所有内容放在一起,请按照以下步骤作(请注意,实现相同结果有很多变化,这只是一个食谱)。
打开inspector一个 Unity 窗口,显示有关当前所选游戏对象、资产或项目设置的信息,允许您检查和编辑值。更多信息
请参阅术语表,然后转到 动画(Animation) 选项卡。
确保肌肉定义这使您可以更直观地控制角色的骨架。当头像就位时,动画系统在肌肉空间中工作,这比骨骼空间更直观。更多信息
请参阅术语表设置为头像(Avatar) 用于将动画从一个绑定重定向到另一个绑定的界面。更多信息
请参阅术语表您打算控制(假设这个头像名为 Dude,并且它已经添加到层次结构视图中)。
选择动画剪辑可用于动画角色或简单动画的动画数据。它是一个简单的“单位”运动片段,例如(一个特定实例)“空闲”、“步行”或“运行”。更多信息
请参阅术语表从可用的剪辑中。
确保循环姿势(Loop Pose) 一种动画剪辑设置,用于混合动画的结束和开始以创建无缝连接。更多信息
请参阅术语表已正确对齐(旁边的灯光为绿色),并且单击了“循环姿势”复选框。
在动画查看器中预览动画,以确保动画的开头和结尾平滑对齐,并且角色“就地”移动。
在动画剪辑上,创建一条曲线来控制角色的速度(您可以从动画导入检查器 Curves-> + 添加曲线)。
将该曲线命名为有意义的名称,例如“运行速度”。
创建一个新的动画师控制器(Animator Controller) 通过动画层控制动画,包括动画状态机和动画混合树,由动画参数控制。具有 Animator 组件的多个模型可以引用同一个 Animator 控制器。更多信息
请参阅术语表,(我们称之为 RootMotionController)。
将所需的动画剪辑放入其中,这应该会创建一个带有动画名称的状态(例如 Run)。
将与曲线同名的参数添加到控制器(在本例中为“运行速度”)。
在层次结构中选择角色 Dude,其检查器应该已经有一个 Animator 组件。
将 RootMotionController 拖到 Animator 的 Controller 属性上。
如果您现在按播放键,您应该会看到“Dude”在原地运行。
最后,要控制运动,您需要创建一个脚本 (RootMotionScript.cs),用于实现 OnAnimatorMove 回调:
using UnityEngine;
using System.Collections;
[RequireComponent(typeof(Animator))]
public class RootMotionScript : MonoBehaviour {
void OnAnimatorMove()
{
Animator animator = GetComponent<Animator>();
if (animator)
{
Vector3 newPosition = transform.position;
newPosition.z += animator.GetFloat("Runspeed") * Time.deltaTime;
transform.position = newPosition;
}
}
}
您应该将RootMotionScript.cs附加到“Dude”对象。执行此作时,Animator 组件模型上的一个组件,使用动画系统为该模型设置动画。该组件具有对控制动画的 Animator 控制器资源的引用。更多信息
请参阅术语表将检测脚本是否具有 OnAnimatorMove 函数,并将“应用根运动”属性显示为“由脚本处理”