【Unity动画系统】详解Root Motion动画在Unity中的应用(一)

Root Motion动画与普通动画的区别

普通动画:动画文件里记录的是物体的绝对坐标和方向,在播放动画时,Unity会根据Animation中记录的值,直接修改游戏对象的坐标和方向,每一帧的坐标和方向都是通过插值计算得出来的,所以在动画播放的下一个循环的开头时,游戏对象的坐标值或者角度值都会被直接修改成初始值。

Root Motion动画:一般是动画师在制作动作的时候会在动画上添加逻辑驱动物体运动

Unity中应用RootMotion,Unity会通过动画文件里记录的绝对坐标和方向,以及当前游戏对象的缩放比例,计算出游戏对象在上一帧的相对位移和相对转角然后再根据相对位移和相对转角来移动游戏对象,所以当动画播放到下一个开头时,游戏对象的坐标并不会被修改成初始值。Unity会让游戏对象乘以缩放矩阵、旋转矩阵以及平移矩阵。

在Unity中应用Root Motion,需要在Animator组件上勾选

总结:

动画文件会直接修改每一帧里游戏对象的坐标值和角度值,Root Motion动画则通过相对位移和转角来移动对象。

控制Root Motion动画

Root Motion通过动画文件计算出游戏对象上一帧的位移,那么我们就可以使用deltaPosition来获取位移量。

在游戏对象使用OnAnimatorMove方法,Unity就不会用动画来驱动游戏对象的移动,把控制权交给我们,此时Root Motion也把操控权交给了脚本。

我们可以用代码来复现Root Motion:

Animator animator;void Start(){animator = GetComponent<animator>();
}private void OnAnimatorMove(){transform.position += animator.deltaPosition;	//游戏对象坐标值直接加上位移量
}

Generic动画中的Root Motion机制

Root Motion在Generic动画中指的就是将角色根骨骼的运动应用到游戏对象身上。

Generic下根骨骼只有一根,一般根骨骼在Unity中会设置为Root Node,唯一作用就是记录模型的位移和旋转。

在Generic动画中,应用Root Motion指的就是把动画中根骨骼节点上的绝对坐标和绝对角度,转换为游戏对象的相对位移和相对转角

Humanoid动画中的Root Motion机制及相关配置

        在Humanoid动画中,由于使用了Avatar系统,动画文件不再包含对具体骨骼的描述,也就无法通过指定根骨骼来应用root motion。

        Unity为解决这个问题,在humanoid动画中通过分析骨骼的结构,计算出模型的重心center of mass,也可以称为body transform。

点击上述按键,可以在预览动画中看见重心

脚本中通过animator.BodyPosition和BodyPosition来访问它的坐标和方向。

Root Transform Rotation:root motion的旋转特指绕y轴的旋转。

Root Transform Position(Y):沿y轴的位移。

Root Transform Position(XZ):沿x和z轴的位移,也就是水平平面的位移。

Unity会根据具体动画计算重心在水平平面的投影,把投影当作Root Motion的“根骨骼节点”来对待。

中心点被称作Root transform,脚本中通过animator.RootPosition和RootRotation来访问它的坐标和指向。

在humanoid动画中,Unity会计算出一个Root Transform。Root Motion会把动画文件中描述的Root Transform的坐标和角度值,转换为相对位移和相对转角,并以此来移动游戏对象.

Humanoid 动画下root motion原理:在这里Avatar把互不兼容的骨骼结构下的根位移转,转换为了统一的Unity重心位移,这样一来,同一套带有root motion的动画就可以在不同骨骼结构的人形角色上表达位移。

Root Transform Rotation

Humanoid中没有根骨骼,就把重心body transform的方向当作动画的朝向.一般是root motion动画直接选Original。

Root Transform Position(Y)

Feet和Original的区别:

在humanoid动画中,因为动画的复用会使得动画发生一系列的变形, 简单来说,动画原本是针对A模型制作的,那么original或者说原点就是A模型播放动画时的原点,当我们使用B模型复用这个动画时,没办法保证Avatar转移后的原点还能够保证其原来的准确性。

如果选择Original效果不佳,可以考虑选择Feet。

Root Transform Position(XZ)

Based Upon:指的是重心在水平平面的投影位置

为什么角色移动会下沉?不该处理垂直位移的动画在控制角色对象的垂直位移

为什么角色走着走着变歪了?说明不该处理旋转的动画在处理游戏对象的旋转

动画属性中Root Motion的变换

Root Transform Rotation:root motion的旋转特指绕y轴的旋转。

Root Transform Position:沿y轴的位移。

Root Transform Position:沿x和z轴的位移,也就是水平平面的位移。

Root Transform Rotation

Bake Into pose:表示把它当作普通的骨骼动画来处理,而不是将根骨骼节点的旋转当作root motion的一部分处理。

不勾选的话会启用上面的Root动画,勾选的话则会启用下面的Hips动画。

解释:比如我们做前进动画的时候,由于左右肩膀是会跟着晃动的(正常),所以在动画片段里面会产生旋转.而我们只把它当做是前进移动的动画,所以作为控制的时候只需要它的z轴上的位移来计算速度,以符合脚步的频率.由走路引起的旋转,只是作为走路姿态(bake into pose 其中pose 的意思就是姿态)的一部分,而不应该作为root motion控制移动的计算条件(因为root motion自己是不能判断你拿这个动画是作为前进动画还是旋转动画,所以就只能由你来指定)。

总结:

什么时候勾选Bake into pose,当不希望动画带动游戏对象旋转时。

在旋转的动画中一般是不用勾选的,因为就需要用它来带动我们的角色对象旋转。

但在比如前进、后退、待机等动画来说,我们就可以勾选这里,以避免因动画文件本身的瑕疵而给我们带来的旋转。

loop match:代表了这个动画在角度上的吻合度。

如果这个动画在播放中转角过大,那么就会显示红色,告诉我们如果勾选bake into pose,则会带来不好的效果。

要不要勾选Bake into pose这个选项取决于我们需不需要动画来驱动游戏对象的旋转,而至于能不能勾选,则要参考loop match是红色还是绿色了。

Based Upon:游戏对象在动画开始时对准的方向是哪里。

Root Node Rotation:让游戏对象在动画开始时对准跟骨骼节点的指向方向,是Unity根据整个动画片段中root node的姿态算出来的,一般不准,如果想要修正动画的话,可以在下面的Offset(偏移量)进行修改。

Original:这个动画本来的朝向。

Root Transform Position(Y)

Bake into pose:把它当作普通的骨骼动画来处理, 而不要将骨骼节点在垂直方向上的位移当作root motion的一部分来处理。

勾选后的跳跃中骨骼不会被计算,动画的跳跃不会带动游戏对象,不会产生瑕疵。

Based Upon:垂直方向上把模型的哪个位置对齐到游戏对象的原点上。

Offset:偏移量

Root Transform Position(XZ)

一般待机动画、原地转身动画、原地起跳动画都可以勾选。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/315000.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网工学习云计算HCIE感受如何?

作为一名网工&#xff0c;我经常会在各种网络论坛里查询搜索一些网络技术资料&#xff0c;以及跟论坛里的网友交流讨论平时在工作、学习中遇到的问题、故障&#xff0c;因此也经常能在论坛的首页看到誉天的宣传信息。机缘巧合之下关注了誉天的B站号&#xff0c;自从关注了誉天的…

李沐64_注意力机制——自学笔记

注意力机制 1.卷积、全连接和池化层都只考虑不随意线索 2.注意力机制则显示的考虑随意线索 &#xff08;1&#xff09;随意线索倍称之为查询(query) &#xff08;2&#xff09;每个输入是一个值value&#xff0c;和不随意线索key的对 &#xff08;3&#xff09;通过注意力池…

Python 面向对象——6.封装

本章学习链接如下&#xff1a; Python 面向对象——1.基本概念 Python 面向对象——2.类与对象实例属性补充解释&#xff0c;self的作用等 Python 面向对象——3.实例方法&#xff0c;类方法与静态方法 Python 面向对象——4.继承 Python 面向对象——5.多态 1. 封装的基…

每日一练-LeeCode-移除链表元素

题目 给你一个链表的头节点 head 和一个整数 val &#xff0c;请你删除链表中所有满足 Node.val val 的节点&#xff0c;并返回 新的头节点 。 示例 1&#xff1a; 输入&#xff1a;head [1,2,6,3,4,5,6], val 6 输出&#xff1a;[1,2,3,4,5] 示例 2&#xff1a; 输入&a…

【AI开发:音频】二、GPT-SoVITS使用方法和过程中出现的问题(GPU版)

1.FileNotFoundError: [Errno 2] No such file or directory: logs/guanshenxxx/2-name2text-0.txt 这个问题中包含了两个&#xff1a; 第一个&#xff1a;No module named pyopenjtalk 我的电脑出现的就是这个 解决&#xff1a;pip install pyopenjtalk 第二个&#xff1a…

156.25MHz的差分晶体振荡器SG3225VEN

数字经济正焕发出勃勃生机,云计算,大数据,5G和人工智能等新技术的发展给行业带来了新的机遇。无论是在数据中心内部还是在数据中心之间,提供低成本,高速的100/200/400G小型化解决方案都是光模块的发展需求。为了使DSP稳定工作&#xff0c;需要一个小型的封装晶体振荡器来提供参…

13.JAVAEE之HTTP协议

HTTP 最新的版本应该是 HTTP/3.0 目前大规模使用的版本 HTTP/1.1 使用 HTTP 协议的场景 1.浏览器打开网站 (基本上) 2.手机 APP 访问对应的服务器 (大概率) 学习 HTTP 协议, 重点学习 HTTP 的报文格式 前面的 TCP/IP/UDP 和这些不同, HTTP 的报文格式,要分两个部分来看待.请求…

「51媒体」城市推介会,地方旅游推荐,怎么做好媒体宣传

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好&#xff0c;我是51媒体网胡老师。 城市推介会和地方旅游推荐是城市形象宣传的重要组成部分&#xff0c;通过有效的媒体宣传可以提升城市的知名度和吸引力。&#xff1a; 一&#xff0c;活动内容层面&#xff1a; 突出亮点…

Jenkins CI/CD 持续集成专题四 Jenkins服务器IP更换

一、查看brew 的 services brew services list 二、编辑 homebrew.mxcl.jenkins-lts.plist 将下面的httpListenAddress值修改为自己的ip 服务器&#xff0c;这里我是用的本机的ip 三 、重新启动 jenkins-lts brew services restart jenkins-lts 四 、浏览器访问 http://10.…

【Django】初识Django快速上手

Django简介 Django是一个高级的、开源的Python Web框架&#xff0c;旨在快速、高效地开发高质量的Web应用程序 https://developer.mozilla.org/zh-CN/docs/Learn/Server-side/Django/Introduction 安装Django pip install Django如果要知道安装的Django的版本&#xff0c;可…

鸿蒙内核源码分析(进程管理篇) | 谁在管理内核资源?

官方基本概念 从系统的角度看&#xff0c;进程是资源管理单元。进程可以使用或等待CPU、使用内存空间等系统资源&#xff0c;并独立于其它进程运行。 OpenHarmony内核的进程模块可以给用户提供多个进程&#xff0c;实现了进程之间的切换和通信&#xff0c;帮助用户管理业务程序…

yolov8旋转目标检测输出的角度转化为适合机械爪抓取的角度

1. 机械爪抓取时旋转的角度定义 以X轴正方向&#xff08;右&#xff09;为零度方向&#xff0c;角度取值范围[-90&#xff0c;90)。 确认角度的方法&#xff1a; 逆时针旋转X轴&#xff0c;X轴碰到矩形框长边时旋转过的角度记为angleX&#xff1a; 1.如果angleX小于90&#xf…

【源码】IM即时通讯源码/H5聊天软件/视频通话+语音通话/带文字部署教程

【源码介绍】 IM即时通讯源码/H5聊天软件/视频通话语音通话/带文字部署教程 【源码说明】 测试环境&#xff1a;Linux系统CentOS7.6、宝塔、PHP7.2、MySQL5.6&#xff0c;根目录public&#xff0c;伪静态laravel5&#xff0c;根据情况开启SSL 登录后台看到很熟悉。。原来是…

docker容器技术篇:集群管理实战mesos+zookeeper+marathon(二)

docker集群管理实战mesoszookeepermarathon&#xff08;二&#xff09; 一 实验环境 操作系统&#xff1a;centos7.9 二 基础环境配置以及安装mesos 安装过程请点击下面的链接查看&#xff1a; 容器集群管理实战mesoszookeepermarathon&#xff08;一&#xff09; 三 安装…

STM32进入睡眠模式的方法

#STM32进入睡眠模式的方法 今天学习了如何控制STM32进入睡眠模式&#xff0c;进入睡眠模式的好处就是省电&#xff0c;今天学习的只是浅度睡眠&#xff0c;通过中断就能唤醒。比如单片机在那一放&#xff0c;也许好几天好几个月都不用一次&#xff0c;整天的在那空跑while循环…

Git重修系列 ------ Git的使用和常用命令总结

一、Git的安装和配置 git安装&#xff1a; Git - Downloads git首次配置用户信息&#xff1a; $ git config --global user.name "kequan" $ git config --global user.email kequanchanqq.com $ git config --global credential store 配置 Git 以使用本地存储机…

鸿蒙OpenHarmony【小型系统 编译】(基于Hi3516开发板)

编译 OpenHarmony支持hb和build.sh两种编译方式。此处介绍hb方式&#xff0c;build.sh脚本编译方式请参考[使用build.sh脚本编译源码]。 使用build.sh脚本编译源码 进入源码根目录&#xff0c;执行如下命令进行版本编译。 ./build.sh --product-name name --ccache 说明&…

刷机维修进阶教程---开机定屏 红字感叹号报错 写字库保资料 救砖 刷官方包保资料的步骤方法解析

在维修各种机型 中经常会遇到开机定屏 进不去系统,正常使用无故定屏进不去系统或者更新降级开机红色感叹号的一些故障机。但顾客需要报资料救砖的要求,遇到这种情况。我们首先要确定故障机型的缘由。是摔 还是更新降级 还是无故使用重启定屏等等。根据原因来对症解决。 通过…

Tiny11作者开源:利用微软官方镜像制作独属于你的Tiny11镜像

微软对Windows 11的最低硬件要求包括至少4GB的内存、双核处理器和64GB的SSD存储。然而&#xff0c;这些基本要求仅仅能保证用户启动和运行系统&#xff0c;而非流畅使用 为了提升体验&#xff0c;不少用户选择通过精简系统来减轻硬件负担&#xff0c;我们熟知的Tiny11便是其中…

Typora for Mac:轻量级Markdown编辑器

Typora for Mac是一款专为Mac用户设计的轻量级Markdown编辑器&#xff0c;它以其简洁的界面和强大的功能&#xff0c;成为了Markdown写作爱好者的首选工具。 Typora for Mac v1.8.10中文激活版下载 Typora的最大特色在于其所见即所得的编辑模式&#xff0c;用户无需关心复杂的M…