Help Asked: 2024-10-02 16:10:45 +0800 CST2024-10-02 16:10:45 +0800 CST 2024-10-02 16:10:45 +0800 CST 在 Unity 工具包中隐藏 UI 772 我试图在 Unity 中隐藏我的 UI,但uiObject.SetActive(false);会重置该 Unity UI 游戏对象中所有对象的点击事件和颜色。 禁用之前: 禁用然后启用后: 当不需要时我应该如何隐藏 UI? 干杯。 unity-game-engine 2 个回答 Voted Best Answer derHugo 2024-10-02T17:14:28+08:002024-10-02T17:14:28+08:00 停用根游戏对象 () 的问题UIDocument在于,当重新激活它时,Unity 会从链接的VisualTreeAsset=> 重新加载 UI,无论您通过代码设置了什么,以及您设置的任何按钮回调等都将消失,因为您现在正在处理所有 UI 元素的全新实例! 您只想使用VisualElement.visible。请注意,这只会使元素不可见且不可交互,但仍在布局中保留其空间。 uiObject.GetComponent<UIDocument>().rootVisualElement.visible = false; 如果它不仅要隐藏,而且还要从布局中完全删除,那么您可以使用IStyle.display它DisplayStyle.None。 uiObject.GetComponent<UIDocument>().rootVisualElement.style.display = DisplayStyle.None; 或者,您可以存储Children根视觉元素(在列表或数组中)并使用RemoveFromHierarchy以便将它们从层次结构中临时完全移除,但将它们保留在内存中 -Add稍后再使用它们。但这当然是一种相当激进且容易出错的方法。 hijinxbassist 2024-10-03T01:11:34+08:002024-10-03T01:11:34+08:00 您可以在样式表中定义一个用于隐藏元素的类。用于display隐藏元素并删除其占用的空间。用于visibility在隐藏元素的同时保留空间。 .hide { display: none; /* visibility: hidden; */ } 添加一些显示/隐藏的实用方法。 private void Hide(VisualElement element) { element.AddToClassList("hide"); } private void Show(VisualElement element) { element.RemoveFromClassList("hide"); } 要显示/隐藏元素,请添加/删除hide类。 Hide(myWrapperElement); Show(myOtherElement);
停用根游戏对象 () 的问题
UIDocument
在于,当重新激活它时,Unity 会从链接的VisualTreeAsset
=> 重新加载 UI,无论您通过代码设置了什么,以及您设置的任何按钮回调等都将消失,因为您现在正在处理所有 UI 元素的全新实例!您只想使用
VisualElement.visible
。请注意,这只会使元素不可见且不可交互,但仍在布局中保留其空间。如果它不仅要隐藏,而且还要从布局中完全删除,那么您可以使用
IStyle.display
它DisplayStyle.None
。或者,您可以存储
Children
根视觉元素(在列表或数组中)并使用RemoveFromHierarchy
以便将它们从层次结构中临时完全移除,但将它们保留在内存中 -Add
稍后再使用它们。但这当然是一种相当激进且容易出错的方法。您可以在样式表中定义一个用于隐藏元素的类。用于
display
隐藏元素并删除其占用的空间。用于visibility
在隐藏元素的同时保留空间。添加一些显示/隐藏的实用方法。
要显示/隐藏元素,请添加/删除
hide
类。