Jump to content
Ele

Control DropDownList para Unity

Recommended Posts

Desde hace una semana he estado diseñando un menú de opciones para mi juego, como sabemos antes de la llegada de Unity 5.2 no existía un control tipo Dropdown entre el UI de Unity de manera que me había dedicado a diseñarlo. Luego de que el progreso de mi control estaba a un 80% Unity saca su versión 5.2 con el control así que me había apartado un poco del proyecto del mi control.

Una noche decidí anexar el control Dropdown de Unity a mi proyecto y el control se comporto excelente, el control realmente hace lo que uno pudiera esperar de un Dropdown control, pero hay una limitación en el control de unity. Ahora imaginen este escenario: estas desarrollando un menú de opciones para tu juego y quieres que haya una opción para configurar los controles de tu jugador, para lograr esto deberemos ser capaz de pasarle un objeto de tipo KeyCode al evento controlador, por ejemplo:

Input.GetKeyDown(KeyCode.E)

es decir el cada item del dropdown debería ser capaz de almacenar cada KeyCode (KeyCode.A, KeyCode.B, etc…) para pasarselo directamente a Input.GetKeyDown, pero la limitante es que el control de Unity solo permite asignar dos propiedades “texto” y “sprite”, aunque si bien es cierto que pudiéramos hacer algún cast del string “texto” al enum esto se complicaría si el objeto que deseáramos asignar no es enum sino una clase mas compleja.

Por esto decidí retomar mi diseño original de un componente Dropdown, el cual si implementa una propiedad llamada “value” de tipo object a la cual se le puede asignar cualquier tipo de valores.

Para el ejemplo que les comente del listado con los KeyCodes la implementacion seria la siguiente:

DropDownList dpComponent = dropdown.GetComponent<DropDownList>();
dpComponent.source = Enum.GetValues(typeof(KeyCode)).
    Cast<KeyCode>().Select(x => new DropDownListItem()
{
    id = x.ToString(),
    text = x.ToString().CamelBreakup(),
    value = x,
    selected = x==KeyCode.E
}).ToList();

 

captura__13_09_2015__143834.jpg?w=707

 

La propiedad “source” del DropDownList permite definir el listado que se mostrara, cada item es un objeto de tipo DropDownListItem

Les dejo el código fuente a continuación:

 

para preguntas o sugerencias no se olviden comentar, espero les sea de utilidad.

fuente: https://eleazarcelis.wordpress.com/2015/09/13/control-dropdownlist-para-unity/

Edited by Ele
añadir fuente

Share this post


Link to post
Share on other sites

Si lástima que te lo haya chafado la 5.2

fíjate que no del todo, como mencione el dropdown de unity no permite asignar un objeto subyacente a cada item, dado que esto era lo que yo necesitaba para asignar un KeyCode, o un objeto Resolution directamente al item para después obtenerlo, opte por terminar mi control, y funciona como lo esperaba. ahora puedo hacer algo como esto:

 

dropdownlist.OnChange.AddListener(ResolutionSelected);
...

void ResolutionSelected(DropDownListItem item)
{
    Resolution resolution = (Resolution)item.value;
    Screen.SetResolution(resolution.width, resolution.height, true);
}

 

algo que con el de unity tendria que hacer un switch o castear el nombre del item
 

Edited by Ele
corregir errores

Share this post


Link to post
Share on other sites

UnitySpain © Todos los derechos reservados 2020
×
×
  • Create New...