You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity Animator异常:Base Layer动画正常,移至第二层后仅编辑器显示播放

Unity Animator多图层动画无显示问题(版本2018.4.36f1)

Unity版本

2018.4.36f1

问题详情

我有一个绑定Canvas和Disclaimer对象的动画,放在Base Layer时一切正常。但因为需要在Canvas上同时播放多个动画,我把Disclaimer相关动画移到了第二层。现在Animator面板显示该动画正在播放(动画名称下方的蓝色进度条正常填充),但屏幕上完全看不到动画效果。

动画图层截图

  • Base Layer:
    Base Layer
  • Second Layer:
    Second Layer

控制Animator的代码

[SerializeField] private Animator canvasAnimator;
[SerializeField] private GameObject loading;
[SerializeField] private Animator disclaimerAnimator;
[SerializeField] private Animator mainMenuAnimator;
[SerializeField] private GameObject mainMenu;
[SerializeField] private Text gameVersion;

void Start()
{
    loading.SetActive(false);
    disclaimerScreen.SetActive(true);
    canvasAnimator.Play(animDisclaimerShow.name,1);
}

public void HideDisclaimer()
{
    disclaimerScreen.SetActive(true);
    mainMenu.SetActive(true);
    gameVersion.text = "Version:"+Application.version;
    canvasAnimator.Play(animDisclaimerHide.name,1);
}

已尝试的解决方法

  • 将图层类型从Override改为Additive
  • 切换Animator中的"Apply root motion"选项
  • 将权重设置为1.0
  • 启用"Sync layers"选项
  • 检查Static Batching(已关闭)

以上方法均无效,恳请提供解决思路或建议!

解决思路建议

  • 确认图层索引正确性:Play方法的第二个参数是图层索引,Base Layer默认是0,第二层需确认是否为1(可在Animator图层列表中查看索引编号),如果索引不匹配,动画会在错误图层播放导致无效果。
  • 检查动画属性路径:动画移到新图层后,验证动画剪辑中的属性路径是否正确指向Disclaimer对象(比如RectTransform的位置、透明度等属性的路径是否是相对于Animator所在Canvas的正确层级路径)。
  • 验证运行时图层权重:通过代码在运行时打印canvasAnimator.GetLayerWeight(1)的值,确认权重是否确实为1.0——有时在Animator面板设置的权重可能未正确应用到运行时。
  • 检查动画写入模式:打开动画剪辑的属性面板,确认"Write Defaults"选项是否开启。如果关闭,Base Layer的默认属性可能会覆盖第二层的动画效果。
  • 确认对象激活状态:虽然代码中设置了disclaimerScreen.SetActive(true),但需确保动画播放过程中该对象没有被意外禁用,或者父物体的激活状态正常。
  • 尝试分离动画控制器:如果多图层冲突难以排查,可以给Disclaimer对象单独添加Animator组件,独立控制其动画,避免同一Animator多图层的干扰。

内容的提问来源于stack exchange,提问作者ADAMANT GD

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 05:17:43