当前位置: 首页 > article >正文

【博客节选】再谈Unity 的 root motion

节选自 【Unity实战笔记】第二十三· root motion变更方向攻击 (OnStateMove + rootmotion + rigidbody 使用的一些问题)

小伙伴们应该对root motion非常困惑,包括那个bake into pose。

在这里插入图片描述
当xz bake into pose后,角色攻击动画与父节点产生偏移,动画结束后,模型还会瞬移归位。

如何理解?先看一下这位看过Mecanim源码的人的介绍:

根节点运动(Root Motion)

  • 这里的根节点运动并不是一般意义上的“动画中的根节点的运动”,而是Mecanim动画系统处理根节点运动的一些列相关功能,以下都直接称之为RootMotion,而Mecanim一般称原本动画中对根节点的运动为< Root Transform >;
  • Mecanim有很具有特色的RootMotion处理功能,这里首先要提出两个概念:
    - Scene Root,模型文件中骨骼中真正的根节点,一般名称就是Scene Root,
    - Model Root,是Mecanim系统中模型语义上的中心节点;
  • 在非人形动画(Generic)中,默认没有Model Root,开发者可以指定任何节点为Model Root,而人形动画(Humanoid)中,Model Root不是任何一根具体的骨骼,而固定是人形骨骼的重心,在Unity给出的API中,根据导入配置选项差别,也称为Body或者Center of Mass;
  • 一旦骨骼对象拥有Model Root,其上的动画就会有RootMotion的语义,其详细意义是将Model Root在模型空间内的变换映射至Scene Root上,换句话说,RootMotion可以在原动画中不包含RootTransform时在Runtime时根据设置计算得到RootTransform;
  • RootMotion为开发者提供了两种处理计算得到的RootTransform的方法,一种是保留根变换,一种将根变换烘焙进Model Root中,也就是Unity官网解释的RootTransformBodyTransform方法;具体使用方法取决于Animator和AnimationClip的设置;
  • 应用RootTransform,也就是在Animator处开启Apply Root Motion,计算得到的RootTransform就会实际变换Scene Root,而应用BodyTransform,也就是选择对应Bake Into Pose,计算得到的RootTransform就会只变换Model Root,Scene Root会保持不变

    根节点运动(Root Motion)逻辑控制方案
  • Unity提供了一套代码支持逻辑管理RootMotion而不是让Animator直接管理的需求,在Animator组件的同级任意组件中实现OnAnimatorMove()回调接口即可;
  • 实现接口后Animator原本的RootMotion就不会生效,但是RootMotion计算得到结果会分别保存在Animator.rootPosition,Animator.rootRotation,Animator. deltaPosition, Animator. deltaRotation中,代码中根据需求使用;

在这里插入图片描述

  • ① Scene Root,对应 RootTransform
  • ② Model Root,对应 BodyTransform

如果不应用root motion,不bake into pose,就是一个原地动画,①不动和②也不动。
如果不应用root motion,bake into pose,①不动,②动。
如果应用root motion,bake into pose,①不动,②动。
如果应用root motion,不bake into pose,那就是②跟随①运动。

如下(出自我 第十一篇文章《动画基础》7.6.2 节):
在这里插入图片描述


http://www.kler.cn/a/599010.html

相关文章:

  • Mybatis注解的基础操作——02
  • WPF 样式(Style)和模板(Template)
  • 机器学习课堂4线性回归模型+特征缩放
  • 05STM32定时器-01定时器概述
  • 医学领域的deepseek:Med-R1,用强化学习开启医学视觉语言模型推理
  • Python与区块链隐私保护技术:如何在去中心化世界中保障数据安全
  • MySQL抖动浅析
  • 某个业务采用【规则引擎】重构大幅降低耗时
  • JavaScript |(七)BOM及JSON简介 | 轮播图 | 尚硅谷JavaScript基础实战
  • 蓝桥杯 回文数组
  • VLAN综合实验
  • x86 Docker镜像转换为 ARM 架构镜像
  • 我的Go学习路线概览
  • Git安装与使用详解
  • GPT与Bert,预训练语言模型
  • React--》文件上传优化技巧与最佳实践
  • 纯血鸿蒙:中国操作系统自主创新的里程碑
  • MediaPipe实时机器学习框架
  • 前端 AI IDE应用优缺点
  • NFS客户端与服务端用户不一致问题