GUI Flexível

    O Unity possui uma grande facilidade para criação de interfaces de menu para interação com o usuário. Neste tutorial será apresentado a ideia de como criar uma interface flexível na Unity 3D e além disso facilitar a criação de janelas e interfaces de interação para jogos digitais. A título de exemplo será criado uma classe base para interfaces e uma tela de login de usuário e senha.

    Os usos da criação de menus em jogos digitais são muitas, alguns desses usos são: 
- menu de entrar do jogo;
- seleção de opções do jogo;
- créditos;
- login com usuário e senha;
- barra de energia do jogador;
- pontos do placar;e
- barra de itens ou de ferramentas;
- etc.

    Que dificuldades encontramos em construir GUI na Unity 3D:
- As proporções e escalas das telas variam de dispositivo para dispositivo, ou seja, pode existir proporções e tela 5:4, 4:3, 3:2, 10:9, 16:9 e outras proporções não padronizadas.
- Os componentes não ficam alinhados corretamente quando trocamos de interface gráfica.

    Como podemos solucionar essas dificuldades?

    A ideia é criar um script base de tal forma que possamos criar algumas janelas flexíveis para a entrada de dados. Esse script base poderá servir como base para qualquer outra interface que será criada na Unity 3D.

    Se pensarmos que a tela de cada dispositivo pode ser normalizada, ou seja, sua altura e largura serão representada por valores numéricos reais com o intervalo de 0.0 a 1.0. Logo podemos criar valores de posição inicial e final para a altura e largura de uma janela que irá conter os objetos da interface GUI do jogador. Para fazermos isso precisamos ter valores reais que serão representados na programação por variáveis do tipo float.

    No nosso script base teremos o seguinte esqueleto base para a criação de uma janela GUI na Unity 3D. Estou utilizando a linguagem C# para a criação da programação da interface.

Nome do script: FlexiableGUIBase.cs

using UnityEngine;
using System.Collections;
/// <summary>
/// 
/// This classe describes a abstract class for an Unity3D's GUI implementation. 
/// This is not a silver bullet example, may be you need to customize an implement new features.
/// using as base this example.
/// 
/// If you use this class in your projets, please share it under GPL3 license to everyone and publish it.
/// 
/// License: GPL3 http://www.gnu.org/copyleft/gpl.html
/// 
/// Creator: Mário Madureira Fontes.
/// Date: 2011-09-14
/// 
/// </summary>
public abstract class FlexibleGUIWindowBase : MonoBehaviour {
    // Set a proporcional area to create a window
    public float beginWidthWindow = 0.0f;
    public float beginHeightWindow = 0.0f;
    public float endWidthWindow = 1.0f;
    public float endHeightWindow = 1.0f;

}

    Verificando a documentação da Unity 3D podemos verificar nos exemplos das classes GUI.Window que tem um breve exemplo de como criar uma janela. tomando base nesse exemplo podemos modifica-lo para que sejam utilizado os valores de proporções iniciais e finais da janela propostos anteriormente. Será utilizado para a o ajuste dinâmico da tela a multiplicação do tamanho da tela Screen.width e Scree.height com os valores de inicio: beginWidthWindow e beginHeightWindow e valores de fim: endWidthWindow e endHeightWindow.

    Atualizando o nosso script vamos implementar uma sobrescrita do método OnGUI da classe MonoBehaviour e criar um call back para a criação de uma janela do tipo GUI.Window.

Nome do script: FlexiableGUIBase.cs



Comments