非常奇怪的问题,我有一个 Canvas 对象,我正在尝试将 overrideSorting 标志设置为 true。
public void SetSortingLevel(string sortinglayerName)
{
_canvas.overrideSorting = true;
_canvas.sortingLayerName = sortinglayerName;
}
然而,这通常是有效的,但是如果我放置一个断点并查看代码,即使在将覆盖设置为 true 之后,它也是 false:
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 //可以改变
- 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/