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 检查结果是错误的。
这是设计使然。您只能更改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)
| 归档时间: |
|
| 查看次数: |
3138 次 |
| 最近记录: |