Si usted está creando un UI dinámico dónde los elementos UI aparecen, desaparecen, o cambian basándose en las acciones del usuario u otras acciones en el juego, usted podría necesitar hacer un script que instancie nuevos elementos UI basándose en una lógica personalizada.
Con el fin de ser capaz de instanciar de manera fácil elementos UI de manera dinámica, el primer paso es crear un prefab para el tipo de elemento Ui que usted quiere que sea una instancia. Configure el elemento UI de la mera que usted quiera que se vea en su escena, y luego arrastre el elemento a la Project View para hacerlo a un prefab.
Por ejemplo, un prefab para un botón puede ser un Game Object con un componente Image y un componente Botón, y un Game Object hijo con un componente Texto. Su configuración podría ser diferente dependiendo en sus necesidades.
Usted podría preguntarse por qué nosotros no tenemos métodos API para crear los varios tipos de controles, incluyendo visuales y todo. La razón es que hay un infinito número de manera e.g un botón podría ser configurado. Utilice una imagen, texto, o ambas? De pronto incluso múltiples imágenes? Cuál es la fuente del texto, color, tamaño de la fuente, y alineamiento? Qué sprites o sprites debería la imagen utilizar? Al dejarlo a usted hacer un prefab e instanciarlo, usted puede configurarlo exactamente de la manera que usted quiera. Y si usted después quiere cambiar el aspecto y la sensación de su UI usted solamente necesita cambiar el prefab y luego será reflejado en su UI, incluyendo el UI creado dinámicamente.
Los Prefabs de elementos UI son instanciados como normal utilizando el método Instantiate. Cuando se configure el padre de un elemento UI instancia, es recomendado hacerlo utilizando el método Transform.SetParent con el parámetro worldPositionStays configurado a falso.
Un elemento UI es normalmente posicionado utilizando su Rect Transform. Si el elemento UI es un hijo de un Layout Group éste va a automáticamente ser posicionado y el paso de posicionamiento puede ser omitido.
Cuando se posicione un Rect Transform es útil primero determina que tiene o debería tener cualquier comportamiento de estiramiento. El comportamiento de estiramiento sucede cuando las propiedades anchorMin y anchorMax no son idénticas.
Para un Rect Transform que no se estire, la posición es configurada más fácil al ajustar las propiedades anchoredPosition y sizeDelta. anchoredPosition especifica la posición del pivote relativo a los anchors (anclas). El sizeDelta es justo la misma que el tamaño cuando no hay un estiramiento.
Para un Rect Transform que se estire, puede ser más fácil configurar la posición utilizando las propiedades offsetMin y offsetMax. La propiedad offsetMin especifica la esquina de la esquina inferior izquierda del rect relativo al anchor (ancla) inferior izquierda. La propiedad offsetMax especifica la esquina de la esquina superior derecha del rect relativo al anchor superior derecho.
Si usted está instanciando múltiples elementos UI de manera dinámica, no es probable que usted quiera que todos ellos se vean igual y hagan lo mismo. Ya sea si es un botón en un menú, items en un inventario o algo más, usted probablemente le gustaría que los items individuales tengan diferente texto o imágenes y que hagan cosas cuando interactúan con ellos.
Esto es hecho al obtener varios componentes y cambiar sus propiedades. Ver la referencia de script de los componentes Image (imagen) y Text (texto), y para cómo trabajar con UnityEvents desde scripting.