Estou tentando ocultar minha interface de usuário no Unity, mas uiObject.SetActive(false);
redefine eventos de clique e cores para todos os objetos naquele gameObject da interface de usuário do Unity.
Depois de desabilitar e habilitar: Como devo ocultar a interface do usuário quando ela não for necessária?
Saúde.
O problema de desativar o GameObject raiz (
UIDocument
) é que, quando ele é reativado, o Unity recarrega a IU a partir do linkVisualTreeAsset
=> Tudo o que você definiu por meio do código e todos os retornos de chamada de botão etc. que você configurou desaparecem, pois agora você está lidando com novas instâncias de todos os elementos da IU!Você prefere usar apenas
VisualElement.visible
. Note que isso apenas torna o(s) elemento(s) invisível(is) e não interativo(s), mas ainda reserva seu espaço no layout.Se não for apenas sobre esconder, mas remover completamente do layout que você
IStyle.display
usariaDisplayStyle.None
.Alternativamente, você pode armazenar o
Children
do elemento visual raiz (em uma lista ou array) e usarRemoveFromHierarchy
para removê-los completamente da hierarquia temporariamente, mas mantê-los na memória - eAdd
depois novamente. Mas essa é uma maneira bastante agressiva e propensa a erros, é claro.Na sua folha de estilo, você pode definir uma classe para ocultar elementos. Use
display
para ocultar o elemento e remover o espaço que ele ocupa. Usevisibility
para reter o espaço enquanto oculta o elemento.Adicione alguns métodos utilitários para mostrar/ocultar.
Para mostrar/ocultar um elemento, adicione/remova a
hide
classe.