无法更改 Canvas.overrideSorting 属性
Cannot change Canvas.overrideSorting property
非常奇怪的问题,我有一个 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 Objects 的根,您将无法更改其值Canvas.overrideSorting
.
如果您有 任何 Canvas
,这是其他 Canvas
的 child,您将能够更改 Canvas.overrideSorting
.
的值
变更要求Canvas.overrideSorting
:
1.Canvas
这是其他 Canvas
[=30 的 child =]
- Canvas//不能改变
- Canvas //可以改
- Canvas //可以改
2。GameObject 必须在层次结构中处于活动状态,并且必须启用 Canvas
组件才能更改 Canvas.overrideSorting
。
Active in hierarchy 意味着 all parent 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");
您需要等待一帧。
private void Start()
{
Canvas canvas = GetComponent<Canvas>();
StartCoroutine(OneFrame(() => { canvas.overrideSorting = true; }));
}
private IEnumerator OneFrame(Action callback)
{
yield return null;
callback();
}
非常奇怪的问题,我有一个 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 Objects 的根,您将无法更改其值Canvas.overrideSorting
.
如果您有 任何 Canvas
,这是其他 Canvas
的 child,您将能够更改 Canvas.overrideSorting
.
变更要求Canvas.overrideSorting
:
1.Canvas
这是其他 Canvas
[=30 的 child =]
- Canvas//不能改变
- Canvas //可以改
- Canvas //可以改
- Canvas //可以改
2。GameObject 必须在层次结构中处于活动状态,并且必须启用 Canvas
组件才能更改 Canvas.overrideSorting
。
Active in hierarchy 意味着 all parent 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");
您需要等待一帧。
private void Start()
{
Canvas canvas = GetComponent<Canvas>();
StartCoroutine(OneFrame(() => { canvas.overrideSorting = true; }));
}
private IEnumerator OneFrame(Action callback)
{
yield return null;
callback();
}