【Unity】Animation Playable Bug、限制及解决方案汇总

这篇具有很好参考价值的文章主要介绍了【Unity】Animation Playable Bug、限制及解决方案汇总。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【Unity】Animation Playable Bug、限制及解决方案汇总

先自荐一下我的PlayableGraph监控工具,比官方的Visualizer好用得多:https://github.com/SolarianZ/UnityPlayableGraphMonitorTool

animationlayermixerplayable,Unity,unity,bug,游戏引擎,playable,job

Bug

文中提及的各项Bug及解决方案的最小化测试工程可在此仓库下载:https://github.com/zdirtywork 。

【可规避】UUM-30899

使用 AnimationClipPlayable 播放动画时,调用 Playable.Pause() 方法后,角色仍继续移动(姿态可以正常暂停)。

解决方案:对 AnimationClipPlayable 调用一次 SetTime() 方法。或者使用 SetSpeed(0) 代替 Pasue()

  • https://github.com/zdirtywork/Unity-Bug-Report-Playable-IN-35780
  • https://issuetracker.unity3d.com/product/unity/issues/guid/UUM-30899

【可规避】UUM-14492

已暂停的Playable会在角色的可见状态改变时(进入相机视野,无论Scene窗口还是Game窗口)自动恢复播放。

解决方案:使用 SetSpeed(0) 代替 Pasue()

  • https://github.com/zdirtywork/Unity-Bug-Report-Playable-IN-15660
  • https://issuetracker.unity3d.com/product/unity/issues/guid/UUM-14492

【可规避】UUM-32824

将正在播放的PlayableGraph的UpdateMode设为 Manual (这之后, PlayableGraph.IsPlaying() 方法会返回 false ),然后再调用 PlayableGraph.Play() 方法(这之后, PlayableGraph.IsPlaying() 方法会返回 true ,但仍需要手动驱动更新),然后再将PlayableGraph的UpdateMode设为任意 非Manual 值,PlayableGraph无法按预期恢复自动播放。

解决方案:调用 PlayableGraph.Stop() 方法,然后再调用 PlayableGraph.Play() 方法,强制刷新状态。参考下方连接中的示例工程。

  • https://github.com/zdirtywork/Unity-Bug-Report-Playable-IN-37603
  • https://issuetracker.unity3d.com/product/unity/issues/guid/UUM-32824

【可规避】【不会修复】UUM-33177

连续调用2次 Playable.SetTime() 方法无法消除对跟运动的影响。例如,一个具有跟运动的动画当前播放到第5秒,使用 SetTime() 方法将其时间设置到10秒后,角色不仅会将自己的姿态变为动画第10秒所对应的姿态,从第5到第10秒之间所应产生的跟运动也会被施加到角色身上,具体表现就是角色位置突变。

Unity表示不会修复此Bug。

解决方案:在 AnimationClipPlayable 后面接一个 AniamtionScriptPlayable ,在其Job中手动将时间差导致的跟运动数据剔除。参考下方连接中的示例工程。然后你会遇到UUM-36098。

  • https://github.com/zdirtywork/WillNotFix_Unity-Bug-Report-Playable-IN-36756
  • https://issuetracker.unity3d.com/product/unity/issues/guid/UUM-33177

【可规避】UUM-36098

在使用Humanoid动画时,通过 AnimationStream.velocity 属性修改跟运动速度不生效。

解决方案:不要用 Animator 自己的跟运动计算方法,而是手动从 AnimationStream 中收集跟运动数据,然后手动施加给角色。参考下方连接中的示例工程。然后你会遇到UUM-33952。

  • https://github.com/zdirtywork/Unity-Bug-Report-Playable-IN-41394
  • https://issuetracker.unity3d.com/product/unity/issues/guid/UUM-36098

【Unity 2022无法复现】【不会修复】UUM-33952

Time.timeScale 的值会影响 AnimationStream 中动画跟运动旋转数据的值。很神奇的Bug,具体表现是,当 Time.timeScale 的值大于 0.85 时,从 AnimationStream 中取出的跟运动旋转数据和 Animator 中的跟运动旋转数据不一致,并且在 Time.timeScale 的值大于 1 后, Time.timeScale 的值越大,两者中的跟运动旋转数据差距越小。情况非常多,参考下方连接中的示例工程。

我只在简单的PlayableGraph中注意到此问题,当PlayableGraph连接的复杂了以后,这个问题就变得不明显了。另外,使用UUM-36098中提及的方式手动计算跟运动时,角色会有轻微滑步,估计和这个Bug有关。

Unity表示不会修复此Bug。但我在Unity 2022中没能复现这个问题,可能他们说的是与此问题相关的其他底层逻辑Bug不会被修复。

  • https://github.com/zdirtywork/WillNotFix_Unity-Bug-Report-Playable-IN-38581
  • https://issuetracker.unity3d.com/product/unity/issues/guid/UUM-33952

【可规避】【不会修复】UUM-34442

AnimationScriptPlayable 输入到了 ScriptPlayable<T> 的非第0个输入端口时,其Job中的 ProcessRootMotion() 方法和 ProcessAnimation() 方法不会执行。

Unity表示不会修复此Bug。

解决方案:使 ScriptPlayable<T> 只有1个输入端口,然后在 ScriptPlayable<T> 前输入一个 AnimationMixerPlayableAnimationLayerMixerPlayable ,把原本 ScriptPlayable<T> 上的多个输入端口改为Mixer的多个输入端口。参考下方连接中的示例工程。

  • https://github.com/zdirtywork/WillNotFix_Unity-Bug-Report-Playable-IN-39561
  • https://issuetracker.unity3d.com/product/unity/issues/guid/UUM-34442

【可规避】UUM-33944

AnimationScriptPlayable 的有效权重不为 1 时,在其Job中通过 PropertyStreamHandle 修改动画曲线值不生效。

解决方案:在 Animator 上绑定一个名为 GravityWeight 的属性。暂不清楚此方法会不会造成其他负面影响。参考下方连接中的示例工程。

  • https://github.com/zdirtywork/Unity-Bug-Report-Playable-IN-38805
  • https://issuetracker.unity3d.com/product/unity/issues/guid/UUM-33944

UUM-31822

Animator.applyRootMotion 属性为 false 时,绑定 Animator 组件所处节点的 TransformStreamHandle 会导致角色位置异常。

  • https://github.com/zdirtywork/Unity-Bug-Report-Playable-IN-35588
  • https://issuetracker.unity3d.com/product/unity/issues/guid/UUM-31822

限制/规则

PlayableGraph.IsPlaying() 方法的返回值

Editor中逐帧播放时, PlayableGraph.IsPlaying() 方法总是返回 false 。我对此提过Bug单,但Unity说设计如此不是Bug。我觉得这个设计太烂了!原因有二:

  1. Runtime应该对Editor无感知,逐帧播放是存粹的Editor功能,而它却改变了Runtime接口的行为。
  2. 如果Runtime代码依据 PlayableGraph.IsPlaying() 方法的返回值执行不同逻辑,这里很有可能导致逐帧调试时出现Bug。

AnimationScriptPlayable 的输入不受权重影响

AnimationScriptPlayable 预期用户手动处理其输入Playable中的数据,因此,连接输入Playable时设置的权重不会实际作用到输入数据上,而是要用户手动处理。

角色未被渲染时, AnimationScriptPlayable 的Job中的 ProcessAnimation() 方法不会执行

符合预期,因为角色不可见时计算其姿态通常没有意义,浪费性能。如果希望在角色不可见时仍执行 ProcessAnimation() 方法,可以将 Animator.cullingMode 设为 AlwaysAnimate

没有直接或间接输出到 AnimationPlayableOutputAnimationScriptPlayable 不会执行其Job中的 ProcessRootMotion() 方法和 ProcessAnimation() 方法

符合预期,因为这种情况下动画数据始终无法施加到角色身上,计算了也是白算,浪费性能。文章来源地址https://www.toymoban.com/news/detail-789043.html

到了这里,关于【Unity】Animation Playable Bug、限制及解决方案汇总的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • Elasticsearch查询10000条限制解决方案

    目录 问题描述 问题原因 解决方案 Elasticsearch官方默认最多只能查询10000条数据,查询20000条数据开始就会报错: max_result_window 是 Elasticsearch 中一个重要的搜索参数,它控制了单个搜索请求返回的最大结果数。具体来说,它定义了从搜索结果中的哪个位置开始返回结果,以及要

    2024年02月04日
    浏览(33)
  • 前端开发中遇到的小bug--解决方案

    1.在 searchBox 搜索栏中,用到了多级下拉框的筛选条件,样式如下:  这样看起来是没什么问题的,但当我选择时,在框中显示的内容和筛选条件的内容就出错了: 这里其实是选择了 采矿业 -- 石油和天然气开采业 ,但显示框中是 林业,筛选条件的内容也有问题: 这里没有显

    2024年02月10日
    浏览(40)
  • YOLOv8 Bug及解决方案汇总

    Traceback (most recent call last): File “D:AnacondaScriptsyolo-script.py”, line 33, in sys.exit(load_entry_point(‘ultralytics==8.0.83’, ‘console_scripts’, ‘yolo’)()) self.model, self.save = parse_model(deepcopy(self.yaml), ch=ch, verbose=verbose) # model, savelist File “D:Anacondalibsite-packagesultralytics-8.0.83-py3.8.eggultralyti

    2024年02月07日
    浏览(43)
  • 【Mysql】| 超详细常见bug及解决方案

    MySQL是一款广泛使用的开源数据库管理系统,它具有高效、稳定、可靠等优点,并支持多种操作系统和编程语言。然而,在使用MySQL过程中,我们也会遇到一些常见的bug,这些bug会影响我们的数据操作效率和操作体验。为了更好地使用MySQL,我们需要了解这些bug以及它们的解决

    2024年02月07日
    浏览(43)
  • 安卓APP限制截屏录屏解决方案

    经过两天的研究, 思路:投屏到电脑,然后windows窗体截图。 具体思路是:可以使用投屏软件,把安卓屏幕投到电脑上,然后根据句柄,截取windows窗口截图 于是,我根据思路,,研究出来了使用python【当然如果精通其它语言,不会python,可以根据上面的思路自行写代码】,

    2023年04月08日
    浏览(39)
  • 【bug】vscode python 3.6 无法debug 解决方案

    某个环境是使用python 3.6 安装的,vscode没法调试。是由于python插件太新了,直接下载一个,用VSIX安装 1.下载python 拓展包 https://marketplace.visualstudio.com/_apis/public/gallery/publishers/ms-python/vsextensions/python/2022.6.0/vspackage 2.可以将2022.6.0更改为指定版本,2022.6.0经过测试支持python 3.6 在v

    2024年02月11日
    浏览(54)
  • Vue 3 开发中遇到的问题及解决方案(fix bug)

    开发环境:mac系统,node版本: 16.15.0 解决方案1 升级或降级(版本) 思路 Vue和pinia 版本不兼容;Vue 的版本为 “vue”: “^3.2.47”, pinia的版本为 “pinia”: “^2.0.36” 解决过程 升高pinia的版本 “pinia”: “^2.0.36”, ==》 “pinia”: “^2.0.36”, 先删除pinia npm uni pinia 再重新安装 y

    2024年02月04日
    浏览(52)
  • 【python修复bug】—— HTTP_2 网站超时问题的解决方案

    在进行网络数据爬取时,使用 Python 程序访问支持 HTTP/2 协议的网站时,有时会遇到超时问题。这可能会导致数据获取不完整,影响爬虫程序的正常运行。 问题描述 在实际操作中,当使用 Python 编写的爬虫程序访问支持 HTTP/2 协议的网站时,可能会遇到超时异常。即使尝试强制

    2024年01月18日
    浏览(38)
  • Selenium 无头浏览器被知乎限制访问的解决方案

    我尝试使用如下代码爬取知乎的有关内容,出现知乎安全验证界面: 添加启动参数 在网上的许多文章中,反复提到了如下三行代码,然而我将他们加入代码后没有什么效果: JavaScript特殊全局变量 有一些文章提到,通过 WebDriver 启动的网页会存在一些特殊的 JS 变量,这些变

    2024年02月14日
    浏览(45)
  • 「Bug」“OSError [WinError 1455] 页面文件太小,无法完成操作” 解决方案

    训练YOLOv5模型时出现错误 修改train.py中配置项workers的默认值,从初始值8修改为0(也可以试试1或2等较小的数)。 workers_per_gpu=2, # 每个gpu分配的线程数,给每一个GPU喂数据的进程,GPU性能越强,取值越大,这样才能充分利用GPU的算力。如果用自己的电脑训练,这个值需要取小一

    2024年02月11日
    浏览(47)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包