【unity实践记录】动画层的顺序和混合模式Override/Additive

这篇具有很好参考价值的文章主要介绍了【unity实践记录】动画层的顺序和混合模式Override/Additive。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

手册上关于层顺序的介绍基本没有,只是一个不明所以的Q&A一带而过:

层的排序是否重要?

是的。层的优先级是按顺序从上到下的。层设置为 override 将始终覆盖先前的层(如果层有遮罩,则基于其遮罩)。

基础层的权重值是否应始终设置为 1?或者在使用其他层时权重是否应为 0?

基础层权重始终为 1,覆盖层将完全覆盖基础层。

(原文:)

Does the ordering of the layers matter?

Yes. Layers are evaluated from top to bottom in order. Layers set to override will always override the previous layers (based on their mask, if they have a mask).

Should the weight value of the base layer always be set to one or should the weight be zero when using another layer?

The base layer weight is always 1 and override layers will completely override the base layer.

如何理解“优先级是按顺序从上到下”?

以及 两种混合模式 overrideAdditive 如何理解 ?

实践出真知。

实验方法:

我有一个2D角色,默认动画是 “闲置状态”(全身的动画,包含手部),在默认层 BaseLayer

它还有一个“开枪动作”(手部的特别动画),放在新建的动画层 arms

【unity实践记录】动画层的顺序和混合模式Override/Additive

为了明确不同混合方式达到的效果

  • 闲置状态 的动画中,我将身体变为蓝色【unity实践记录】动画层的顺序和混合模式Override/Additive
  • 开枪动作 中,我将身体变成红色【unity实践记录】动画层的顺序和混合模式Override/Additive

预期的结果是: 开枪时,如实播放开枪动作身体呈现红色,则成功。如果是蓝色,失败。

实验结果记录: 

层顺序

arms层的

混合模式

arms层的

权重

结果

上:Base Layer

下:arms

override 1 红色(成功)
override 0.5 紫色
additive 1 蓝色

上:arms

下:Base Layer

override 1 蓝色
additive 1 蓝色
【unity实践记录】动画层的顺序和混合模式Override/Additive
override 混合,权重 0.5,得到紫色

         【unity实践记录】动画层的顺序和混合模式Override/Additive

  

结论分析

  • 顺序很重要:下方的层,会覆盖上方的层。
    • 现在回到一开始的问题:如何理解“优先级是按顺序从上到下”?我的理解是:先计算上方的层,后计算下方的层,后面的结果可以修改之前的结果。跟Sprite的Sort Order一样去理解就可以了。
  • override 模式: 覆盖位于它上方的层。
    • 例如,多个层都控制某一属性,override层会覆盖其上方的层的效果,覆盖的程度取决于权重:
    • 权重=1时,可以完全覆盖(所以结果呈红色);权重=0时,等于完全没有效果,以此类推。所以在上面的实验中,权重=0.5时,按比例混合其效果(0.5红+0.5蓝 = 紫)。
  • additive 模式:
    • 将动画“加”在之前的层上 (见下文)
  • 所以一般的做法就是,将 “特别的” 动画放在下面的层,选择override,权重=1,就可以完美播放该层的动画。

以上个人解读,如有谬误欢迎指正


Edit : 感谢评论区朋友的指正,重新看了下文档,确实由于我实验方法的特殊性,造成了误导性的结论(关于Additive的混合方式的解读),已更正。

关于Additive

文档说明:

  • Select Override to use the animation on this layer, replacing the animation on previous layers.
  • Select Additive to add the animation on this layer on top of the animation from previous layers.
    For additive blending to be successful, the animation on the additive layer must contain the same properties as the previous layers.

我翻译:

  • 使用 Override 模式:用这一层的动画替换掉之前层的动画。
  • 使用 Additive 模式:把这一层的动画“”在之前层的动画上。为了成功混合,Additive层的动画必须包含与之前层相同的属性。

重新实验了一下,对于Additive层的“加”我是这样理解的:文章来源地址https://www.toymoban.com/news/detail-442606.html

  • 有些属性可以“加”,比如transform(位置,旋转等)
    • 例如,我在BaseLayer对物体的position做了【向左每秒移动1单位】的动画,如果在Additive层对其做【向左每秒移动2单位】动画,得到的结果是:该对象【向左每秒移动3单位】。
  • 而颜色属性似乎不能”加“,本以为可以简单地得到”红+蓝=紫“这样的结果,然而在Additive层,它并不能得到这个结果,反而override层将权重调到0.5时, 得到了紫色的混合结果。
    • (个人猜测:为什么颜色属性不能Additive,可能涉及到叠加的算法?颜色叠加的模式太多了,没有一个通用的定义,红+蓝=紫只是一个通俗的结论,但具体到把颜色作为RGBA的float4变量时,加法并不等于“叠加”。叠加是乘法,得到的结果通常视觉上是变暗,而加法得到的结果是变亮。颜色不像transform可以简单做加法。)
  • 还有就是帧动画,放在Additive层的sprite属性会直接替换掉前面层的。(权重大于0.5时)

到了这里,关于【unity实践记录】动画层的顺序和混合模式Override/Additive的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Photoshop图层混合模式公式(Unity,CG实现)

    本文主要目的来自于在unity符合美术在ps里面的演示效果。 两个图层叠加到一起的效果,废话不多说直接看效果: 图片资源 在文章末尾 完整代码 也在末尾 目录 目录 Multiply 正片叠底  Screen 滤色  Color Dodge 颜色减淡  Color Burn 颜色加深 Linear Dodge 线形减淡 Linear Burn 线形加深

    2023年04月22日
    浏览(26)
  • Unity | Spine动画记录

    https://blog.csdn.net/linshuhe1/article/details/79792432 https://blog.csdn.net/winds_tide/article/details/128925407 通常制作好的 Spine 动画导出时会有三个文件: .png 、.json 和 .atlas: skeleton-name.json 或 skeleton-name.skel.bytes,包含了skeleton和animation数据。 skeleton-name.atlas.txt,包含了texture atlas的信息。 一个

    2024年02月19日
    浏览(35)
  • C#---第二十:不同类型方法的执行顺序(new / virtual / common / override)

    本文介绍不同类型的方法,在代码中的执行顺序问题: 构造方法 普通方法(暂用common代替)、虚方法(Virtual修饰)、New方法(new修饰)三个优先级相同 overide方法(会替换virtual方法,此时virtual方法被隐藏,无法再调用到) 当父类、子类中的方法都是new/common/virtual/这三类的

    2024年02月10日
    浏览(22)
  • 【超级详细】Unity战斗模式(三)人物掉血处理+死亡动画处理

    双击 攻击动画clip ,打开 Events 区域,在时间轴上单击右键,选择合适帧,也就是在动作发出那一刻我们希望会执行某一方法。 可以通过下面的动画预览区进行预览那一帧的效果,蓝色的竖线就是我们创建好的帧。 改名字为 Attack ,记得 Apply 同时意味着我们在脚本里对应的方

    2024年02月12日
    浏览(31)
  • Unity3d C#实现场景编辑/运行模式下3D模型XYZ轴混合一键排序功能(含源码工程)

    在部分场景搭建中需要整齐摆放一些物品(如仓库中的货堆、货架等),因为有交互的操作在单个模型上,每次总是手动拖动模型操作起来也是繁琐和劳累。 在这背景下,我编写了一个在运行或者编辑状态下都可以进行一键排序模型的脚步。方便在场景搭建时,可以快速搭建

    2024年01月17日
    浏览(43)
  • 【unity之IMGUI实践】单例模式管理数据存储【二】

    👨‍💻个人主页 :@元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏 : unityUI专题篇 🅰️ 😶‍🌫️:步骤实现 1.首先将音乐数据封装在类中,不采用单例模式 2. 而后封装一个游戏数据类为单例模式:功能

    2024年02月16日
    浏览(36)
  • 【unity之IMGUI实践】单例模式管理面板对象【一】

    👨‍💻个人主页 :@元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏 : unityUI专题篇 🅰️ API:简单的旋转 解析: 1.采用单例模式,原因: 单例模式无法被纂改基类,适合当管理者 2.基类提取了子类所有的共

    2024年02月15日
    浏览(38)
  • UE4_官方动画内容示例1.3_ 运动混合空间(Locomotion BlendSpace)

    如何使用运动(Locomotion)混合空间将Actor在不同方向上及不同速度的运动混合起来。(例如,展示了一个混合了以不同速度向后、前、左和右走路/跑步动作的Actor)。 混合空间是允许根据多个输入的值混合任意数量动画的资源。 混合空间(Blend Space)  是可以在  动画图(

    2024年04月26日
    浏览(23)
  • Qt+C++多线程thread-QThread-QTimer视频-控件动画-混合应用实例

    程序示例精选 Qt+C++多线程thread-QThread-QTimer混合应用实例 如需安装运行环境或远程调试,见文章底部个人 QQ 名片,由专业技术人员远程协助! 这篇博客针对Qt+C++多线程thread-QThread-QTimer混合应用实例编写代码,代码整洁,规则,易读。 学习与应用推荐首选。 功能:多线程thr

    2024年02月16日
    浏览(36)
  • Python Opencv实践 - 图像混合

               

    2024年02月13日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包