Crie Menus Dinâmicos em Unity Usando UXML e Data Binding

Criar📡 RESTful 101: Princípios que Todo Dev API Precisa Saber!📡 RESTful 101: Princípios que Todo Dev API Precisa Saber!Descubra os fundamentos do REST e boas práticas para criar APIs simples, escaláveis e eficientes. Domine métodos HTTP e status codes com exemplos práticos. menus dinâmicos em Unity é essencial para jogos modernos e aplicações desktop. Imagine um menu de seleção de fases que se atualiza automaticamente conforme o jogador progride, ou uma loja in-game com itens carregados de um servidor. Neste artigo, você aprenderá a usar UI Toolkit (UXML) e📊 Behavior-Driven Development: Testes que Todo Mundo Entende!📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades. Data Binding📦 Data Binding: Conecte UI e Dados como um Maestro!📦 Data Binding: Conecte UI e Dados como um Maestro!Aprenda a utilizar Data Binding para conectar dados de forma automática entre back-end e interface, criando aplicações reativas e fáceis de manter. para criar interfaces flexíveis e profissionais, mesmo sem experiência🌐 LinkedIn para Devs .NET: Perfil que Atrai Recrutadores!🌐 LinkedIn para Devs .NET: Perfil que Atrai Recrutadores!Aprenda a otimizar seu perfil LinkedIn com dicas essenciais para devs .NET. Conquiste oportunidades e destaque suas habilidades! prévia em UI.

Exemplo Prático📝 Logging com Serilog: Registre Tudo como um Detetive de Bugs!📝 Logging com Serilog: Registre Tudo como um Detetive de Bugs!Aprenda a usar Serilog em .NET para registrar logs estruturados, identificar erros e enriquecer informações, transformando seu código num enigma solucionável.:

Um menu de configurações que atualiza elementos visuais em tempo real quando📊 Behavior-Driven Development: Testes que Todo Mundo Entende!📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades. o jogador altera opções.

📚 Tabela de Conteúdo🔗

1. 🛠️ UXML: O HTML do Unity

2. 🔗 Data Binding📦 Data Binding: Conecte UI e Dados como um Maestro!📦 Data Binding: Conecte UI e Dados como um Maestro!Aprenda a utilizar Data Binding para conectar dados de forma automática entre back-end e interface, criando aplicações reativas e fáceis de manter.: Conectando Dados e Visual

3. 🎮 Criando um Menu Dinâmico🎭 Dynamic Types: Flexibilidade com `dynamic`!🎭 Dynamic Types: Flexibilidade com `dynamic`!Descubra como utilizar o tipo dynamic no C# para flexibilizar o código, conhecendo suas vantagens, riscos e aplicações práticas em tempo de execução. Passo a Passo

4. Boas Práticas🔢 Operadores Aritméticos: Faça Cálculos como uma Calculadora Humana!🔢 Operadores Aritméticos: Faça Cálculos como uma Calculadora Humana!Aprenda a dominar operadores aritméticos em C# com exemplos práticos, técnicas de cálculo e dicas para evitar erros e maximizar resultados. para Performance

5. 🧩 Exemplo Avançado: Loja com Itens Carregados via JSON

6. 📋 Criando Menus Básicos com UXML

7. 🖌️ Conectando Dados com Data Binding📦 Data Binding: Conecte UI e Dados como um Maestro!📦 Data Binding: Conecte UI e Dados como um Maestro!Aprenda a utilizar Data Binding para conectar dados de forma automática entre back-end e interface, criando aplicações reativas e fáceis de manter.

8. 🎭 Criando Menus Dinâmicos

9. 💡 Dicas🔢 Operadores Aritméticos: Faça Cálculos como uma Calculadora Humana!🔢 Operadores Aritméticos: Faça Cálculos como uma Calculadora Humana!Aprenda a dominar operadores aritméticos em C# com exemplos práticos, técnicas de cálculo e dicas para evitar erros e maximizar resultados. para Melhorar a Usabilidade

🛠️ UXML: O HTML do Unity🔗

O UXML é uma linguagem declarativa🖌️ XAML Básico: Crie Interfaces sem Código C# (Quase)!🖌️ XAML Básico: Crie Interfaces sem Código C# (Quase)!Descubra como usar XAML para criar interfaces atrativas em aplicações .NET. Aprenda conceitos e dicas práticas para iniciar seu projeto. para estruturar interfaces no Unity. Funciona como HTML, mas com elementos específicos para games:

<!-- Exemplo: Menu principal com botões dinâmicos -->
<ui:UXML xmlns:ui="UnityEngine.UIElements">
  <ui:VisualElement class="container">
    <ui:Label text="Menu Principal" class="title"/>
    <ui:ScrollView>
      <ui:ListView id="levelList" class="menu-list"/>
    </ui:ScrollView>
  </ui:VisualElement>
</ui:UXML>

Elementos Chave🗂️ Dicionários: Acesse Dados por Chaves como um Mestre dos HashMaps!🗂️ Dicionários: Acesse Dados por Chaves como um Mestre dos HashMaps!Aprenda a usar dicionários em C# de modo prático e eficiente. Nosso tutorial mostra criação, acesso e otimização para manipular dados com segurança.:

🔗 Data Binding: Conectando Dados e Visual🔗

O Data Binding📦 Data Binding: Conecte UI e Dados como um Maestro!📦 Data Binding: Conecte UI e Dados como um Maestro!Aprenda a utilizar Data Binding para conectar dados de forma automática entre back-end e interface, criando aplicações reativas e fáceis de manter. permite vincular dados do jogo (ex: lista de fases) diretamente à UI:

// Classe de dados para uma fase
public class LevelData {
    public string Name { get; set; }
    public bool IsUnlocked { get; set; }
    public int BestScore { get; set; }
}
// Binding com UI
void BindLevels(ListView listView, List<LevelData> levels) {
    listView.makeItem = () => new Label(); // Cria novos itens
    listView.bindItem = (element, index) => {
        var label = (Label)element;
        label.text = $"{levels[index].Name} - Score: {levels[index].BestScore}";
        label.SetEnabled(levels[index].IsUnlocked);
    };
    listView.itemsSource = levels; // Fonte de dados
}

Vantagens:

🎮 Criando um Menu Dinâmico Passo a Passo🔗

Passo 1: Crie um UXML com estrutura básica

Passo 2: Desenvolva a classe🏗️ Classes vs. Structs: Quando Usar Cada Uma (e Não Quebrar a Cabeça)!🏗️ Classes vs. Structs: Quando Usar Cada Uma (e Não Quebrar a Cabeça)!Descubra como escolher entre classes e structs em C#. Aprenda sobre alocação de memória, passagem por valor e referência, e performance nesta explicação clara. de dados

Passo 3: Implemente o binding usando ListView

Passo 4: Adicione interatividade:

levelList.selectionChanged += (selectedItems) => {
    var selectedLevel = levels[selectedItems.First()];
    SceneManager.LoadScene(selectedLevel.SceneName);
};

⚡ Boas Práticas para Performance🔗

1. Pooling⚡ Otimização Unity: Object Pooling e GC Avoidance!⚡ Otimização Unity: Object Pooling e GC Avoidance!Descubra técnicas essenciais de Object Pooling e estratégias GC Avoidance no Unity para otimizar a performance dos seus jogos e evitar pausas indesejadas. de Elementos: Reutilize elementos UI ao invés de criar📡 RESTful 101: Princípios que Todo Dev API Precisa Saber!📡 RESTful 101: Princípios que Todo Dev API Precisa Saber!Descubra os fundamentos do REST e boas práticas para criar APIs simples, escaláveis e eficientes. Domine métodos HTTP e status codes com exemplos práticos./destruir

2. Atualizações em Lote: Modifique múltiplas propriedades⚡ Propriedades: Get e Set com Elegância (e sem Campos Privados Bagunçados)!⚡ Propriedades: Get e Set com Elegância (e sem Campos Privados Bagunçados)!Aprenda como utilizar propriedades em C# para encapsular dados, validar informações e manter um código organizado, seguro e de fácil manutenção. antes de notificar mudanças

3. USS Eficiente: Evite seletores complexos em folhas de estilo

4. Caching de Referências🏗️ Classes vs. Structs: Quando Usar Cada Uma (e Não Quebrar a Cabeça)!🏗️ Classes vs. Structs: Quando Usar Cada Uma (e Não Quebrar a Cabeça)!Descubra como escolher entre classes e structs em C#. Aprenda sobre alocação de memória, passagem por valor e referência, e performance nesta explicação clara.: Armazene elementos frequentemente acessados:

// Ruim: Query toda vez
var scoreLabel = root.Q<Label>("scoreLabel");
// Bom: Cache
private Label _scoreLabel;
void OnEnable() {
    _scoreLabel = root.Q<Label>("scoreLabel");
}

🧩 Exemplo Avançado: Loja com Itens Carregados via JSON🔗

Implementação:

1. Carregue dados de uma API🌍 Projeto: API de E-Commerce com ASP.NET Core e SQL Server!🌍 Projeto: API de E-Commerce com ASP.NET Core e SQL Server!Aprenda a construir uma API robusta para e-commerce com ASP.NET Core, EF Core, JWT e Swagger, validando suas habilidades em um projeto prático real./JSON

2. Crie templates UXML para🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)Descubra como automatizar repetições em C# utilizando loops for e while com exemplos práticos que evitam erros e otimizam seu código. Aprenda mais! itens da loja

3. Use data binding📦 Data Binding: Conecte UI e Dados como um Maestro!📦 Data Binding: Conecte UI e Dados como um Maestro!Aprenda a utilizar Data Binding para conectar dados de forma automática entre back-end e interface, criando aplicações reativas e fáceis de manter. para preencher informações

IEnumerator LoadShopItems() {
    var www = UnityWebRequest.Get("https://api.seujogo.com/shop");
    yield return www.SendWebRequest();
    var items = JsonConvert.DeserializeObject<List<ShopItem>>(www.downloadHandler.text);
    shopListView.itemsSource = items;
}

Estrutura do Item:

<ui:UXML>
  <ui:Template id="shopItemTemplate">
    <ui:VisualElement class="shop-item">
      <ui:Image class="item-icon"/>
      <ui:Label class="item-price"/>
      <ui:Button text="Comprar" class="buy-button"/>
    </ui:VisualElement>
  </ui:Template>
</ui:UXML>

📋 Criando Menus Básicos com UXML🔗

Vamos começar criando um menu simples com UXML. Imagine que você quer criar um painel de configurações com um título🌐 LinkedIn para Devs .NET: Perfil que Atrai Recrutadores!🌐 LinkedIn para Devs .NET: Perfil que Atrai Recrutadores!Aprenda a otimizar seu perfil LinkedIn com dicas essenciais para devs .NET. Conquiste oportunidades e destaque suas habilidades!, um slider para ajustar o volume e um botão para salvar as alterações.

Passos:

1. Crie um arquivo UXML chamado SettingsMenu.uxml.

2. Defina a estrutura do menu:

<ui:UXML xmlns:ui="UnityEngine.UIElements">
  <ui:VisualElement class="container">
    <ui:Label text="Configurações de Áudio" class="title" />
    <ui:Slider label="Volume" lowValue="0" highValue="1" value="0.5" class="volume-slider" />
    <ui:Button text="Salvar" class="save-button" />
  </ui:VisualElement>
</ui:UXML>

3. No Unity, crie um script🎭 Scripts em C#: Controle Personagens e Física!🎭 Scripts em C#: Controle Personagens e Física!Aprenda a desenvolver scripts em C# para personagens e integrar física realista em Unity. Um guia passo a passo para iniciantes e devs em transição. C# para carregar e exibir o menu:

using UnityEngine;
using UnityEngine.UIElements;
public class SettingsMenu : MonoBehaviour
{
    private VisualElement root;
    void Start()
    {
        // Carrega o UXML
        var visualTree = Resources.Load<VisualTreeAsset>("SettingsMenu");
        root = visualTree.CloneTree();
        // Adiciona o menu à hierarquia da UI
        GetComponent<UIDocument>().rootVisualElement.Add(root);
    }
}

4. Adicione um UIDocument ao seu GameObject e associe o script🎭 Scripts em C#: Controle Personagens e Física!🎭 Scripts em C#: Controle Personagens e Física!Aprenda a desenvolver scripts em C# para personagens e integrar física realista em Unity. Um guia passo a passo para iniciantes e devs em transição. SettingsMenu. Pronto! Seu menu básico está funcionando.

🖌️ Conectando Dados com Data Binding🔗

Agora, vamos conectar o slider de volume com um valor🗂️ Dicionários: Acesse Dados por Chaves como um Mestre dos HashMaps!🗂️ Dicionários: Acesse Dados por Chaves como um Mestre dos HashMaps!Aprenda a usar dicionários em C# de modo prático e eficiente. Nosso tutorial mostra criação, acesso e otimização para manipular dados com segurança. real no jogo. Para isso, usaremos Data Binding📦 Data Binding: Conecte UI e Dados como um Maestro!📦 Data Binding: Conecte UI e Dados como um Maestro!Aprenda a utilizar Data Binding para conectar dados de forma automática entre back-end e interface, criando aplicações reativas e fáceis de manter. para sincronizar o valor do slider com uma variável🧠 Variáveis em C#: Onde os Dados Ganham Vida (e Nome!)🧠 Variáveis em C#: Onde os Dados Ganham Vida (e Nome!)Descubra como as variáveis em C# funcionam, com exemplos do mundo real, boas práticas de nomeação e dicas para otimizar seu código. em C#.

Passos:

1. Defina uma classe🏗️ Classes vs. Structs: Quando Usar Cada Uma (e Não Quebrar a Cabeça)!🏗️ Classes vs. Structs: Quando Usar Cada Uma (e Não Quebrar a Cabeça)!Descubra como escolher entre classes e structs em C#. Aprenda sobre alocação de memória, passagem por valor e referência, e performance nesta explicação clara. para armazenar os dados:

public class AudioSettings
{
    public float Volume { get; set; } = 0.5f;
}

2. No script🎭 Scripts em C#: Controle Personagens e Física!🎭 Scripts em C#: Controle Personagens e Física!Aprenda a desenvolver scripts em C# para personagens e integrar física realista em Unity. Um guia passo a passo para iniciantes e devs em transição. SettingsMenu, crie uma instância dessa classe🏗️ Classes vs. Structs: Quando Usar Cada Uma (e Não Quebrar a Cabeça)!🏗️ Classes vs. Structs: Quando Usar Cada Uma (e Não Quebrar a Cabeça)!Descubra como escolher entre classes e structs em C#. Aprenda sobre alocação de memória, passagem por valor e referência, e performance nesta explicação clara. e conecte o slider ao valor:

private AudioSettings audioSettings = new AudioSettings();
void Start()
{
    var visualTree = Resources.Load<VisualTreeAsset>("SettingsMenu");
    root = visualTree.CloneTree();
    GetComponent<UIDocument>().rootVisualElement.Add(root);
    // Conecta o slider ao valor
    var volumeSlider = root.Q<Slider>("volume-slider");
    volumeSlider.value = audioSettings.Volume;
    volumeSlider.RegisterValueChangedCallback(evt =>
    {
        audioSettings.Volume = evt.newValue;
    });
}

3. Agora, o valor do slider está sincronizado com a variável🧠 Variáveis em C#: Onde os Dados Ganham Vida (e Nome!)🧠 Variáveis em C#: Onde os Dados Ganham Vida (e Nome!)Descubra como as variáveis em C# funcionam, com exemplos do mundo real, boas práticas de nomeação e dicas para otimizar seu código. Volume. Quando📊 Behavior-Driven Development: Testes que Todo Mundo Entende!📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades. o usuário ajusta o slider, o valor é automaticamente atualizado.

🎭 Criando Menus Dinâmicos🔗

Menus dinâmicos são aqueles que mudam com base no estado do jogo. Por exemplo, um menu de inventário que exibe itens coletados pelo jogador. Vamos criar📡 RESTful 101: Princípios que Todo Dev API Precisa Saber!📡 RESTful 101: Princípios que Todo Dev API Precisa Saber!Descubra os fundamentos do REST e boas práticas para criar APIs simples, escaláveis e eficientes. Domine métodos HTTP e status codes com exemplos práticos. um exemplo simples.

Passos:

1. Crie um arquivo UXML para🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)Descubra como automatizar repetições em C# utilizando loops for e while com exemplos práticos que evitam erros e otimizam seu código. Aprenda mais! o inventário:

<ui:UXML xmlns:ui="UnityEngine.UIElements">
  <ui:VisualElement class="container">
    <ui:Label text="Inventário" class="title" />
    <ui:ListView name="item-list" class="inventory-list" />
  </ui:VisualElement>
</ui:UXML>

2. No script🎭 Scripts em C#: Controle Personagens e Física!🎭 Scripts em C#: Controle Personagens e Física!Aprenda a desenvolver scripts em C# para personagens e integrar física realista em Unity. Um guia passo a passo para iniciantes e devs em transição. C#, crie uma lista de itens e conecte-a ao ListView:

public class InventoryMenu : MonoBehaviour
{
    private VisualElement root;
    private List<string> items = new List<string> { "Espada", "Poção", "Escudo" };
    void Start()
    {
        var visualTree = Resources.Load<VisualTreeAsset>("InventoryMenu");
        root = visualTree.CloneTree();
        GetComponent<UIDocument>().rootVisualElement.Add(root);
        // Conecta a lista de itens ao ListView
        var itemList = root.Q<ListView>("item-list");
        itemList.itemsSource = items;
        itemList.makeItem = () => new Label();
        itemList.bindItem = (element, index) => ((Label)element).text = items[index];
    }
}

3. Agora, o menu exibe dinamicamente os itens da lista📦 List<T>: Dinamismo além dos Arrays!📦 List<T>: Dinamismo além dos Arrays!Descubra como utilizar List<T> em C# de forma eficiente. Aprenda a criar, manipular e otimizar listas para diferentes cenários com exemplos práticos. items. Se você adicionar📦 List<T>: Dinamismo além dos Arrays!📦 List<T>: Dinamismo além dos Arrays!Descubra como utilizar List<T> em C# de forma eficiente. Aprenda a criar, manipular e otimizar listas para diferentes cenários com exemplos práticos. ou remover itens da lista, o menu será atualizado automaticamente.

💡 Dicas para Melhorar a Usabilidade🔗

1. Animações: Use animações para🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)Descubra como automatizar repetições em C# utilizando loops for e while com exemplos práticos que evitam erros e otimizam seu código. Aprenda mais! transições suaves entre menus ou estados da UI.

2. Responsividade: Teste sua UI em diferentes resoluções e dispositivos para🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)Descubra como automatizar repetições em C# utilizando loops for e while com exemplos práticos que evitam erros e otimizam seu código. Aprenda mais! garantir que ela se adapte corretamente.

3. Feedback Visual: Adicione feedback visual, como mudanças de cor ou ícones, para🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)Descubra como automatizar repetições em C# utilizando loops for e while com exemplos práticos que evitam erros e otimizam seu código. Aprenda mais! indicar interações do usuário.

4. Organização: Mantenha seus arquivos UXML e estilos (USS) organizados para🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)Descubra como automatizar repetições em C# utilizando loops for e while com exemplos práticos que evitam erros e otimizam seu código. Aprenda mais! facilitar a manutenção.

Conclusão🔗

Dominar UXML e Data Binding📦 Data Binding: Conecte UI e Dados como um Maestro!📦 Data Binding: Conecte UI e Dados como um Maestro!Aprenda a utilizar Data Binding para conectar dados de forma automática entre back-end e interface, criando aplicações reativas e fáceis de manter. permite criar interfaces complexas que se adaptam dinamicamente ao estado do jogo ou da aplicação. Comece com menus simples e evolua para sistemas complexos como lojas in-game ou painéis de progressão.

Próximo Passo:

Experimente criar um menu de achievements que atualiza automaticamente quando📊 Behavior-Driven Development: Testes que Todo Mundo Entende!📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades. o jogador conquista novos objetivos!

Autor: Marcelo V. Souza - Engenheiro de Sistemas e Entusiasta em IoT e Desenvolvimento de Software, com foco em inovação tecnológica.

Referências🔗

Compartilhar artigo

Artigos Relacionados