Jump to content
lozdanmultimedial

Menu para crear un personaje ( sin usar herramientas externas a Unity )

Recommended Posts

HOla a todos. Para mi proyecto quiero programar un menú para que los jugadores puedan crear su propio personaje combinando alogunas figuaras geométricas en 3D. Si bien el jugador juega en 1era persona, el juego es multijugador por lo tanto debe ser visto por el resto de los jugadores.

El menu debe ofrecer que el jugador pueda seleccionar 5 cuerpos 3D, si es posible los 5 sólidos pitagóricos: https://es.wikipedia.org/wiki/Sólidos_platónicos

y si es muy complejo podrían ser tambien: esfera, cubo, cilindro ( q son stndar de unity ) y si es posible pirámide triangular.

Algún tutoria ( si es un doc de texto, pdf,  puede ser en inglés,  francés, portugues e italiano, si es video solo en español), pista, script ayuda de algún tipo ???

MUchas gracias y saludos desde Argentina.

 

Share this post


Link to post
Share on other sites

Refinando un poco más la cuestión: EL post anterior no expica bien el problema que necesito solucionar. Los botones y la interacción con ellos no es la cuestión si no esto otro:

el jugador debe construir su personaje elijiendo 5 cuerpos geométricos entre 3 posibilidades, para seleccionar uno de ellos se clickea el botón correspondiente el personaje se construye como si fuese un apilamiento o totem con las figuras seleccionadas. UN ejemplo con 3 figuras, supongmos que se selecciona cubo, esfera, cilindro. Que el cubo tiene 2 unidades por lado, la esfera 2 unidades de diámetro y el cilindro 2 unidades de altura y se acopla al apila por una de sus bases. Supongamos que se instancia el cubo en x = 0; y = 0; z = 0; luego seleciona la esfera entonces esta deberia instanciarse en x = 0; y = 3; z = 0; // por que y = 3; ?? por que son 2 unidades del lado del cubo + el radio = 3. y Ahora seleciona otro cubo u un cilindro (apara el caso es lo mismo), se debería instanciar en x = 0; y = 4; // ( depende este valor del punto de anclaje) z = 0;

Tengo en el canvas 3 botones uno por cada cuerpo que puede ser selecionado.

El script debe poder saber que botnon se ha clikeado y en que orden se lo ha hecho para poder hacer los cálculos de coordenadas, como se hace esto????

Yendo a otro caso distinto, cuando dos objetos colisionan y uno de ellos tiene un Collider activo y un tag, por ejemplo "Player" en le metodo o función onTrigerEnter( Collider: otro) proguntamos: if( otro.tag == "Player") { // alguna acción; }    existe algo similar en los botones??? me refiero a si en la funcion OnClikc( ) se le puede pasar como parámetro un botón???

[[ Me parece que al redactar este post y refleionar sobre el asunto creo haber enconrado una solución, si esto es cierto obviamente que la publicaré aqui miso ]]

Gracias a todos.

Share this post


Link to post
Share on other sites

Si tus personajes son 5 figuras geométricas unidas, entiendo que estas no tendrán animaciones faciales, ni esqueletos, ni nada de ello. En tal caso, creo que podrías crear a tu jugador, con 3 objetos vacíos que indiquen la posición de las figuras (Por ejemplo, CabezaOrigen, CuerpoOrigen, PiernasOrigen...). Y después la acción de los botones lo que harán será mirar esos Origenes, si tienen algún hijo (alguna pieza geométrica ya añadida) pues la eliminan, y acto seguido, instancia la pieza nueva y se pone como hija de dicho objeto origen.

Así que, lo 1º sería averiguar qué parte del jugador se va a modificar, eso se podría crear un objeto a parte con un script que tenga guardadas las posiones de origen y que tenga también una variable diciendo que parte toca modificar, por ejemplo, un número, si es 0, es la cabeza, si es 1 el cuerpo, 2 las piernas, etc... de modo que al pulsar el botón, se va a este controlador para mirar su número y dependiendo del que sea, pues le devuelve el Origen correspondiente.

Ahora se mira que el origen no tenga ya ninguna pieza aplicada, y si la tiene, pues la borra para poder aplicar la nueva.
GetChild: http://docs.unity3d.com/ScriptReference/Transform.GetChild.html

Si es distinto de null, es porque encontró un hijo, entonces se destruye:
Destroy: http://docs.unity3d.com/ScriptReference/Object.Destroy.html

Ahora que está vacía seguro, se crea la nueva pieza.
Instantiate: http://docs.unity3d.com/ScriptReference/Object.Instantiate.html
Set Parent: http://docs.unity3d.com/ScriptReference/Transform.SetParent.html
Y colocas la posición y rotación local a 0.

Esa acción es algo genérica, la cosa es saber qué pieza será la que hay que instanciar, imagino que eso ya dependerá del botón que se pulse, hay que hacerle algo a los botones para que cada uno, a pesar de ejecutar la misma función, generen diferentes resultados.

- Si estás programando el menú completamente desde el código, si podrás aplicar condicionales dentro de la función OnClick, A pesar de ser el mismo código, puedes poner la variable de la figura como una variable pública, lo que te permitirá ponerle en el inspector un gameobject diferente a cada botón. 

- Si estás usando el UI moderno del únity, cuando crees el botón deberá dejarte que le pongas alguna función, cuando le pongas la función, de nuevo te dejará ponerle también las variables públicas que tenga dicha función. (GameObject -> UI -> Button, en vivo se entiende más rápido). 

Así que al código, al principio hazle esa variable pública de tipo GameObject para poder configurarla en el Inspector de cada botón y también para hacer referencia a dicha variable cuando vaya a usar el Instantiate.


 

Share this post


Link to post
Share on other sites

Muchas gracias por tu respuesta @adngel algunas coss de las que decís ya les he implementado tal cual, uso los botones de la UI y en mi script hay un método "instanciar" llamado por el OnClik, cada boton tiene un tag y en el instanciar se pregunta por ese tag , en el update hay un condicinal por cada figuara donde finalemnet se instancian. La cuestión de los parentescos nunca lo he aplicado así que voy a estudiar los links que me dejaste y probar con ello. Nuevamente muchas gracias.

PD. exactamente el personaje a crear tal como decis no tendra animaciones faciales ni esqueleto ni nada de eso simplemente es un trencito o gusanito formado por esas cinco fuguras elejidas por el jugador en el orden en que las elija.

Share this post


Link to post
Share on other sites

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