返回介绍

教程:为“原状”类人动画编写根运动脚本 (Scripting Root Motion)

发布于 2021-06-19 18:03:20 字数 2224 浏览 953 评论 0 收藏 0

有时您的动画保持为“原状”,这意味着,如果您将其放入场景中,它不会移动上面的角色。换言之,动画未包含“根运动”。为此,我们可以使用脚本来修改根运动。要把所有一切综合到一起,请遵循以下步骤(请注意,有多种不同的方式可达到相同结果,这只是其中的一种方法)。

  • 打开包含原状动画的 FBX 文件的检视器,然后转至动画 (Animation) 标签。
  • 确保肌肉线条 (Muscle Definition) 已设为您打算控制的 Avatar(假设该 avatar 的名称是 Dude,且已被添加到层级视图 (Hierarchy View))。
  • 从可用片段中选择动画片段。
  • 确保正确对齐循环姿势 (Loop Pose)(它旁边的灯为绿色),并点击循环姿势复选框。
  • 在动画查看器中预览动画,以确保动画开始和结束处流畅对齐,角色“原地”移动
  • 在动画片段上创建一条曲线,该曲线控制角色速度(您可以通过动画导入检视器 (Animation Import inspector)曲线 (Curves)-> + 添加曲线)
  • 为该曲线取一个有意义的名称,比如 "Runspeed"
  • 创建一个新动画器控制器 (Animator Controller),(让我们称之为 RootMotionController)
  • 将需要的动画片段投入该控制器,这样会创建一种以该动画为名的状态(比如 Run)
  • 向与曲线同名(在这种情况下,名称为 "Runspeed")的控制器 (Controller) 添加一个参数
  • 在层级视图 (Hierarchy) 中选择角色 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"
  • 请注意,动画器组件检测到一个含有 OnAnimatorMove 的脚本,应用根运动 (Apply Root Motion) 属性显示为“由脚本处理 (Handled by Script)”
  • 现在您会看到角色以指定的速度移动。

(返回 Mecanim 简介

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文