无法更改 Canvas.overrideSorting 属性

Agg*_*sor 1 c# unity-game-engine unity-ui

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

public void SetSortingLevel(string sortinglayerName)
{
    _canvas.overrideSorting = true;
    _canvas.sortingLayerName = sortinglayerName;
}
Run Code Online (Sandbox Code Playgroud)

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

在此处输入图片说明

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

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

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

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

Pro*_*mer 5

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

例如,如果您的 aCanvas是其他画布或 UI 对象的根,您将无法更改Canvas.overrideSorting.

如果您有任何 Canvas 一个是 other的孩子Canvas,您将能够更改 的值Canvas.overrideSorting

变更要求Canvas.overrideSorting

1 . Canvas 这是其他人的孩子Canvas

  • 画布 //不能改变
    • 画布 //可以改变
      • 画布 //可以改变

2.游戏对象必须在层次结构中处于活动状态,并且Canvas必须启用组件才能更改Canvas.overrideSorting

层次结构中的活动意味着您要更改其的所有父 Canvas 游戏对象必须处于活动状态,并且必须启用脚本本身。这可以通过酒店进行验证。CanvasCanvas.overrideSortingCanvasgameObject.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");
Run Code Online (Sandbox Code Playgroud)