Unity Animator异常:Base Layer动画正常,移至第二层后仅编辑器显示播放
Unity Animator多图层动画无显示问题(版本2018.4.36f1)
Unity版本
2018.4.36f1
问题详情
我有一个绑定Canvas和Disclaimer对象的动画,放在Base Layer时一切正常。但因为需要在Canvas上同时播放多个动画,我把Disclaimer相关动画移到了第二层。现在Animator面板显示该动画正在播放(动画名称下方的蓝色进度条正常填充),但屏幕上完全看不到动画效果。
动画图层截图
- Base 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
相关产品推荐
相关产品推荐

