c# - 无法更改 Canvas.overrideSorting 属性

标签 c# unity3d unity-ui

非常奇怪的问题,我有一个 Canvas 对象,我正在尝试将 overrideSorting 标志设置为 true。

public void SetSortingLevel(string sortinglayerName)
{
    _canvas.overrideSorting = true;
    _canvas.sortingLayerName = sortinglayerName;
}

然而,这通常是有效的,但是如果我放置一个断点并查看代码,即使在将覆盖设置为 true 之后,它也是 false:

enter image description here

api 显示这只是一个 setter/getter。知道为什么会这样吗?

我以前用过这段代码,它正常工作。

注意:这是一个嵌套的 Canvas ,因此应该允许它设置排序层。

答案:正如下面的答案所指出的,activeInHierarchy 检查结果是错误的。

最佳答案

这是设计使然。您只能在嵌套 Canvas 上更改 Canvas.overrideSorting 的值。

例如,如果您有一个 Canvas,它是其他 Canvas 或 UI 对象的根,您将无法更改 Canvas.overrideSorting 的值。

如果您有 任何 Canvas 它是其他 Canvas 的 child ,您将能够更改Canvas.overrideSorting 的值。

更改 Canvas.overrideSorting 的要求:

1.Canvas 它是其他 Canvas 的 child

  • Canvas //不能改变
    • Canvas //可以改变
      • Canvas //可以改变

2。GameObject 必须在层次结构中处于事件状态并且必须启用 Canvas 组件才能更改 Canvas.overrideSorting

Active in hierarchy 意味着 all Canvas 的父 Canvas GameObject 您想要更改其 Canvas.overrideSorting 必须处于事件状态并且Canvas 脚本本身必须启用。这可以通过 gameObject.activeInHierarchy 属性进行验证。

如果 Canvas.gameObject.activeInHierarchy 不是 true,您不能设置或更改 Canvas.overrideSorting 属性。最好在尝试更改 Canvas.overrideSorting 之前检查这些属性。

if (_canvas.gameObject.activeInHierarchy && _canvas.enabled)
    _canvas.overrideSorting = true;
else
    Debug.Log("Cannot change Canvas overrideSorting");

关于c# - 无法更改 Canvas.overrideSorting 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52011266/

相关文章:

c# - 是否可以在空检查中推断类型的名称

c# - Lazy<T> ExecutionAndPublication - 可能导致死锁的示例

image - Sprite 和纹理的区别?

unity-game-engine - 如何在 UI 中设置相机 View 特定区域

c# - 无法加载文件或程序集 'Microsoft.Extensions.Logging.Abstractions, Version=7.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60'

c# - 在派生类中设置泛型类型属性

c# - 如何更改以下 Unity C# 游戏对象左/右滑动代码以进行鼠标点击?

android - 有没有办法将 UnityPlayerActivity 用作 AppcompatActivity?

android - 统一2017 : Canvas Not Rendering on Build