c# - 无法更改 Canvas.overrideSorting 属性
问题描述
非常奇怪的问题,我有一个 Canvas 对象,我正在尝试将 overrideSorting 标志设置为 true。
public void SetSortingLevel(string sortinglayerName)
{
_canvas.overrideSorting = true;
_canvas.sortingLayerName = sortinglayerName;
}
但是,通常这是可行的,但是如果我放置一个断点并查看代码,即使在将覆盖设置为 true 之后,它也是 false:
api 显示这只是一个 setter/getter。知道为什么会这样吗?
我以前使用过这段代码,它通常可以工作。
注意:这是一个嵌套画布,因此应该允许设置其排序层。
答案:正如下面的答案所述,activeInHierarchy 检查结果是错误的。
解决方案
这是设计使然。您只能更改Canvas.overrideSorting
嵌套画布上的值。
例如,如果您有一个Canvas
它是其他画布或 UI 对象的根,您将无法更改Canvas.overrideSorting
.
如果您有任何 是otherCanvas
的孩子Canvas
,您将能够更改 的值Canvas.overrideSorting
。
变更要求Canvas.overrideSorting
:
1 . 这是其他人Canvas
的孩子Canvas
- 画布 //不能改变
- 帆布 //可以改变
- 帆布 //可以改变
- 帆布 //可以改变
2.游戏对象必须在层次结构中处于活动状态,并且Canvas
必须启用组件才能更改Canvas.overrideSorting
。
层次结构中的活动意味着您要更改其的所有父 Canvas GameObject必须处于活动状态,并且必须启用脚本本身。这可以通过属性进行验证。Canvas
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");
推荐阅读
- android - Nestedscrollview 内的 Viewpager2 包含两个 Fragment,Recyclerview 有问题
- python - 您的企业 Python 包治理方法是什么?
- javascript - 无法使用 Flask 运行 Javascript 验证
- java - BadSqlGrammarException with namedParameterJdbcTemplate 但不是 psql
- android - Android BottomNavigationView 部分隐藏 RecyclerView 中的最后一项
- javascript - 当 jscript 确认并通过 AJAX 调用 PHP 时如何更新 $_SESSION 值
- firebase - Firebase Firestore:将新数组合并到存储在文档中的数组中?
- html - 如何在我已将 grid-auto-flow 设置为 column 的情况下使用 CSS grid 给出多个列
- sql-server - 密码不得包含超过 SQL Server 中三个连续字符的用户帐户名或用户全名的一部分
- optaplanner - scoreManager.explainScore(解决方案)在 Optaplanner 中不起作用