jueves, 14 de diciembre de 2017

Unity III

Manager Salud + Score



El primer paso es crear en Hierarchy un Empty Object, al que llamaremos Manager. A este

ESTADO 1
Manager le creamos un primer estado, con una acción Set Int Value, en cuya variable añadiremos New Global Variable, que se llamará Puntos Numero, y lo ponemos a 0.
Después añadimos una transición al primer estado Add Transition -> Finished

ESTADO 2 -> Actualizar
Creamos un segundo Estado que se llamará actualizar. Le añadimos una acción que será Convert Int to String; en Int variable -> Globals -> Puntos Numero, y en String Variable -> New Global Variable -> Numero String.
A continuación tenemos que crear un Canvas con texto en Hierarchy -> Click der -> UI -> Text, y lo organizamos en la composición
Tambien añadimos una acción Set Property, en Target Object metemos el Text (script) que se encuentra en el Inspector, y en Property -> Text -> String, y en Set Value –Globals - “Numero String”
Para terminar, creamos una transición Click der. -> Add Transition -> FINISHED, y unimos FINISHED con el ESTADO 2 - Actualizar

ESTADO 3
Creamos otro estado llamado Eventos Globales. Creamos, a su vez, dos eventos, que se llamarán Restar y Sumar; debemos marcar a los dos como globales

A continuación, creamos dos cubos:
CUBO 1 -> En Inspector, en el Box Collider, debemos activar Is trigger, y modificar su radio hasta que sea un poco más grande que el cubo.
A continuación le añadimos un FSM, y en el
ESTADO 1 - Se detecta, le hacemos Click der. -> Add Transition -> System Event -> Trigger Enter. Entonces creamos un ESTADO 2 - Suma, le añadimos una acción Send Event, y en Event Target -> Game Object SFM, Game Object -> Specify Game Object -> Manager -> … -> FSM, y en Send Event le damos a sumar, ya que esta será la vida. Entonces creamos un ESTADO 3 - Desaparece, donde añadiremos una acción de Destroy Self.
De vuelta al Manager y al ESTADO 3 - Eventos Globales, Con Click der. -> Add Transition creamos una transición RESTAR y otra SUMAR. Entonces creamos un ESTADO 4 y lo llamamos Se suma, y le añadimos un Int Add, donde la Int Variable será Globals -> Puntos Numero y el Add Será 25. Para poner un límite de vida debemos crear ESTADO – Limite Vida y le añadimos una acción Int Compare: En el Integer 1 pondremos Puntos Numero, en el Integer 2 -> 100, en Equal -> FINISHED, en Less tan -> FINISHED y en Greater tan creamos un nuevo evento que se llamará Alcanzar Maximo. Entonces creamos una transición FINISHED y ALCANZAR MAXIMO
Ahora vamos con el circulito que quitará puntuación. Primero iremos a sphere collider y pulsaremos Is trigger y le añadimos ESTADO 1 - Se detecta y le añadimos una transición con Add Transition -> System Events -> TRIGGER ENTER. Creamos entonces otro estado al que llamaremos Resta y le añadiremos un Send Event, donde el Event Target será Game Object SFM, el Game Object -> Specify Game Object -> Manager, FSM Name -> FSM y Send Event -> RESTAR. Finalmente creamos un ESTADO 3 y lo llamaremos Desaparece.

Al terminar con esto, volvemos al Manager, y creamos Un nuevo estado al que llamaremos Se Resta; le añadiremos un Int Add y su Int Variable será Puntos Numero y en Add pondremos -10

martes, 12 de diciembre de 2017

Unity II



Mixamo
Para comenzar debemos descargar nuestro personaje y sus animaciones. Para este ejercicio utilizaremos la página web de Adobe, Mixamo.
Primero, descargamos nuestro Character en pose T, es decir, con las piernas rectas y los brazos horizontales.
Click en el Character -> Download
                                        -> Format -> FBX For Unity(.Fbx)
Por último, debemos descargar las animaciones, que para esta actividad serán Idle, Walking y Running.
Click en la animación -> Download
                                         -> Format -> FBX For Unity(.Fbx)
                                         -> Skin -> Without Skin

Unity
Una vez tengamos los personajes debemos importarlos en Unity. Para ello los arrastramos a la ventana Project.
Sin embargo, y a pesar de que tengamos el personaje y las animaciones, no podemos utilizarlas, ya que no existe ningún elemento que las organice y les mande información de cuándo actuar.

Xbot -> Character

Animator
El primer paso para hacer nuestro Character Controller es crear algo que controle a nuestro Character. Para ello vamos a usar el Animator
Window -> Animator
Entonces creamos un Animator Controller al que llamaremos xbot_animation
Project -> Click der. -> Create -> Animator Controller -> xbot_animation
Para que el Animator Controller afecte al Character debemos seleccionar el personaje y
Inspector -> Animator -> Controller -> Click arrastrar xbot_animation

A continuación, tenemos que insertar las animaciones que queremos usar. Para ello las arrastramos al Animator. Primero arrastramos la animación Idle, ya que necesitamos que esa sea nos salga de color naranja, es decir, que sea el Default State (estado de serie). Después tenemos que arrastrar las animaciones Walking y Running. Para que las tres animaciones se repitan en un bucle y no se paren ni vuelvan al lugar de inicio una vez terminadas, debemos seleccionar cada animación y:
Inspector -> Animation
                  -> Loop Time -> Activar
                  -> Loop Pose -> Activar
Después tenemos que crear transiciones entre las distintas acciones mediante:
Click der. en el State -> Make Transition -> Click arrastrar hacia la siguiente acción
Las transiciones deben realizarse en ambos sentidos.

De Idle a Walking y de Walking a Idle
Empezaremos con las transiciones necesarias para que el Character pase de estar inactivo (Idle) a andar (Walking) y a volver a estar inactivo.
A pesar de tener las transiciones hechas entre estas dos animaciones, aún no podemos controlarlas. Para ello debemos crear un Parameter en las transiciones, al cual llamaremos Animation Magnitude, y que indicará a la animación en qué momento debe comenzar.
Animator -> Parameter -> + -> Float -> Animation Magnitude
Entonces realizaremos dos variantes de este Parameter:
·         En la transición de Idle a Walking. Seleccionamos esta transición y:
Inspector -> Conditions -> Animator Magnitude -> Greater -> 0.1
                -> Has Exit Time -> desactivar
·         En la transición de Walking a Idle. Seleccionamos esta transición y:
Inspector -> Conditions -> Animator Magnitude -> Less -> 0.1
                -> Has Exit Time -> desactivar

Playmaker
A partir de este momento debemos utilizar PlayMaker, para así poder añadir distintos estados para hacer posible que el jugador controle al personaje.
El primer paso es seleccionar el Character y añadir un FSM al que llamaremos Movement, y al que añadiremos varios estados.
Inspector -> Add Component -> Play Maker FSM -> Movement

ESTADO 1 -> Idle
A este estado, de momento, le tenemos que añadir tres acciones:
·         La primera acción que debemos añadir es un Get Axis Vector.
State -> Action Browser -> Get Axis Vector
                                           -> Store Vector -> New Variable -> Input Vector
                                           -> Store Magnitude -> New Variable -> FSM Magnitude
·         La segunda acción se trata de un Set Animation Float.
State -> Action Browser -> Set Animator Float
                                           -> Parameter -> Animation Magnitude
                                           -> Value -> FSM Magnitude
                                           -> Every Frame -> Activar
·         La tercera acción consiste en un Float Compare
State -> Action Browser -> Set Animator Float
                                           -> Float 1 -> FSM Magnitude
                                           -> Float 2 -> 0.1
                                           -> Greater Than -> New Event -> To walk
                                           -> Every Frame -> Activar
Al terminar de configurar esta acción nos aparecerá una nota avisando de un error. Solo debemos hacer Click en ella y Unity la solucionará.

ESTADO 2 -> Walking
A este estado debemos añadirle 4 acciones:
·         Para la primera acción debemos copiar el “Get Axis Vector” del ESTADO 1 - Idle
·         Para la segunda acción debemos copiar el “Set Animation Float” del ESTADO 1 - Idle
·         Para la tercera acción debemos copiar el “Float Compare” del ESTADO 1 - Idle, aunque:
-> Less Than -> New Event -> To Idle
-> Greater Than -> None
Aquí también tenemos que hacer Click en la nota del error.

·         Si dejásemos aquí nuestro trabajo el personaje solo andaría hacia delante. Es por eso que hay que añadir una nueva acción que será “Smooth Look At Direction
State -> Action Browser -> Smooth Look At Direction
                                                               -> Target Direction -> Input Vector
Al terminar estos dos estados, debemos añadir dos transiciones con Click arrastrar:
To Walk -> ESTADO 2 - Walking
To Idle -> ESTADO 1 - Idle

Animator
De Walking a Running y de Running a Walking
De vuelta en el Animator, debemos crear las transiciones que llevarán al personaje de andar (Walking) a correr (Running) y viceversa. Una vez creadas, debemos añadir un nuevo Parámetro, que esta vez será Boolean, y lo llamaremos Running. Este hará que al pulsar un botón (true) se active la acción de correr y que, por el contrario, al dejar de pulsarlo (false), vuelva a andar.
Animator -> Parameter -> + -> Bool -> Running
Aquí también debemos crear dos variantes de este Parameter:
·         En la transición de Running a Walking
Inspector -> Conditions -> Add Condition -> Running -> False
                                           -> Has Exit Time -> Desactivar
·         En la transición de Walking a Running
Inspector -> Conditions -> Add Condition -> Running -> True
                                           -> Has Exit Time -> Desactivar

Playmaker
Para hacer que el Jugador pueda accionar la acción correr con un botón, debemos añadir y modificar una serie de estados y acciones en Playmaker:

ESTADO 3 -> Running
A este estado le añadiremos una acción que será Set Animator Bool
State -> Action Browser -> Set Animator Bool
                                           -> Parameter -> Running
                                           -> Value -> Activar
                                           -> Every Frame -> Activar
Después copiaremos las acciones “Smooth Look at Direction” y “Get Axis Vector” del ESTADO 2 - Walking
La última acción que tenemos que crear hará que al dejar de pulsar Shift Click el Character deje de correr:
State -> Action Browser -> Get Button Up
                                           -> Button Name -> Fire 3
                                           -> Send Event -> To Walk
Para finalizar, añadimos una transición a To Walk y con Click arrastrar creamos una transición entre:
To Walk -> ESTADO 2 - Walking

ESTADO 1 -> Idle
Debemos volver al ESTADO 1 -> Idle y copiar el “Set Animator Bool” del ESTADO 3 -> Running, con la diferencia de:
-> Value -> Desactivar

ESTADO 2 -> Walking
Ahora tenemos que añadirle una nueva acción a este estado, que consistirá en asignar la tecla Shift a la acción de correr. Esta acción será Get Button Down.
State -> Action Browser -> Get Button Down
                                           -> Button Name -> Fire 3
                                           -> Send Event -> New Event -> Running
Además, también debemos pegar aquí la acción Set “Animator Bool” que creamos en el ESTADO 3 – Running, cambiando:
-> Value -> Desactivar
Para terminar con el ESTADO 2, tenemos que crear una transición con Click der. -> Add Transition -> Running

Y para terminar con el Character Controller, solo tenemos que añadir transiciones con Click arrastrar entre:
Running -> ESTADO 3 -> Running
Detalles
Aunque hayamos terminado con el Character Controller en sí, aún podemos añadir detalles que lo mejorarán, como por ejemplo que la cámara siga al personaje, que cuando se termine el terreno el Character caiga o que no aparezca ningún texto sobre qué estados están activos mientras nos encontramos en el modo juego

Camera -> Main Camera
Para crear una cámara que siga al personaje debemos crear un Empty Object al que llamaremos Camera Base
Hierarchy -> Click der. -> Create Empty -> Camera Base
Una vez creado, tenemos que meter la Main Camera que nos viene de serie dentro
Hierarchy -> Click arrastrar hacia Camera Base
A continuación, seleccionaremos otro Empty Object dentro del Character, y lo llamaremos Camera Follows. Una vez creado, debemos colocarlo en la mitad del personaje.
Hierarchy -> Click der. -> Create Empty -> Camera Follows
Entonces, copiamos los componentes de este nuevo objeto
Inspector -> Transform -> Ajustes -> Copy Component
Y los pegamos en Camera Base, ajustando el objeto también a la mitad del personaje.
Inspector -> Transform -> Ajustes -> Paste Component Values

Playmaker
El siguiente paso es colocar la Main Camera en la posición que deseemos y añadirle un nuevo estado

ESTADO 1 -> Camera Movement
A este estado le añadimos una acción Move Towards
State -> Action Browser -> Move Towards
                                            -> Target Object -> Camera Follows
                                            -> Finish distance -> 0
Y otra segunda acción que se llamará Mouse Look
State -> Action Browser -> Mouse Look
                                           -> Sensitivity X -> 5
                                           -> Sensitivity Y -> 5
Para una mayor comodidad en el manejo de la cámara a la hora de jugar, podemos seguir los siguientes pasos:
Edit -> Project Settings -> Input
Inspector -> Axes -> Mouse Y
 -> Invert -> Activar
Para finalizar, debemos regresar a los estados del xbot Character, y en la acción Get Axis Vector del
ESTADO 1 - Idle, el ESTADO 2 - Walking y el ESTADO 3, arrastramos la Main Camera.
State -> Get Axis Vector -> Relative To -> Click arrastrar Main Camera

Character Controller
Si queremos que el personaje caiga cuando se termine el terreno, debemos seleccionarlon y añadir un Component al Character, que será un Character Controller, que debemos ajustar al tamaño de nuestro personaje
Inspector -> Add Component -> Character Controller

State Labels
Para terminar, si no queremos que aparezca ningún texto sobre qué estado estamos mientra estamos en el modo juego, debemos irnos a:

Hierarchy -> Play Maker Guy -> Inspector -> Draw Active State Labels -> Desactivar

viernes, 8 de diciembre de 2017

P's Adventure

Mi trabajo en el proyecto de Videojuegos consistió en el apartado de diseño artístico de los personajes de P's Adventure.
Mi primera tarea fue el concept art de una serie de personajes: Houdinguin, el puma, el sabueso, la foca, el búho y el gorila. Para realizarlos tomé de referencia el pingüino P, previamente modelado por Ignacio, además de referencias reales de cada animal.




Mis personajes son un poco más realistas que P, ya que mi prioridad era hacer que el protagonista del videojuego tuviese mucha más expresividad que el resto de los personajes de relleno. 

Una vez realizado este trabajo, procedí con el Turnaround de cada uno: En la mayoría de los diseños dibujé tan solo el frente y el perfil; sin embargo, en algunos personajes que lo necesitaban, como el búho o el gorila, realicé además la espalda.
En los personajes cuádrupedos tuve problemas con el Turnaround, ya que de la pata trasera no se podía ver el frente; es por eso que la dibujé separada del cuerpo.  
Para el gorila diseñé además props (una flor) y otra variante de gorila, algo más masculino, para hacer que la gorila trans destacase del resto, ya que con ella interactuaría el personaje.
Para Houdinguin también diseñé algunas props, como el bastón o los "abalorios" que cuelgan de él.






Al haber finalizado esta tarea, consideramos mis compañeros y yo que debería haber más personajes en el juego. Es por eso que añadí los pingüinos genéricos, tanto el concept como el turnaround de la girafa y una variación del puma, que simplemente consistiría en añadirle una melena y un mechón de pelo en la cola.


























Tras haber finalizado toda esta tarea, realicé una hoja de tamaños para hacer más fácil la tarea de dimensionar los personajes. Para ello recopilé información sobre los tamaños en la naturaleza de todos los animales, y con esos datos realicé la comparación.

lunes, 4 de diciembre de 2017

Unity I

Score
 En este juego tenemos que conseguir recoger 5 libros para conseguir que una puerta se abra y nos deje salir.



Game Object -> Manager
Como primer paso debemos crear un Game Object que hará la función de manager, es decir, que hará que aparezcan los textos, hará el recuento de los libros, comprobará si tenemos todos los libros o no… Para ello:
Hierarchy -> Click der. -> Create Empty
Una vez creado debemos empezar a añadirle distintos estados:

ESTADO 1 -> Inicio
Para crear un estado debemos:
Playmaker -> Click der. -> Add SFM
A continuación, tenemos que crear un evento al que llamaremos ORDEN_MANAGER, que nos servirá para enviar órdenes al Manager.
Playmaker -> Events -> Add event -> ORDEN_MANAGER -> Add
                                                         -> Global -> Click en el cuadrado
Entonces creamos dos variables globales, que recogerán la información tanto de los códigos como de su representación numérica:
·         Para los códigos:
   Variable -> New Variable -> “UNLIBROMAS_I”
                -> Variable Type -> Int
                ->Add
·         Para los números:
   Variable -> New Variable -> “UNLIBROMAS_S”
                             -> Variable Type -> String
                             -> Add
Después tenemos que añadir un nuevo estado:
State -> Action Browser -> Set Int Value
                                        -> Int Variable -> UNLIBROMAS_I
                                        -> Int Value -> 0
Para que aparezca un texto explicándonos la misión que tenemos que cumplir tenemos que seguir dos pasos:
Primero debemos crear un Canvas, que es donde se escribirá el texto:
Hierarchy -> Click der. -> UI -> Canvas
Una vez creado, debemos ajustarlo a la composición.
A continuación, debemos añadir un Texto dentro del objeto Canvas:
Hierarchy -> Click der. -> UI -> Text -> Mision
                                                 -> Inspector -> Text -> Pick 5 books
                                                 -> Hierarchy -> Desactivar objeto Text
Finalmente tenemos que activarlo añadiendo otra acción que utilizaremos para activar el texto cuando empiece el juego.
State -> Action Browser -> Activate Game Object
                                        -> Game Object -> Specify Game Object -> Text
Después, añadimos una acción que hará que el texto no se active hasta pasado un tiempo determinado,
State -> Action Browser -> Wait
 -> Time -> 2.5
Una vez creado este estado por completo, debemos añadirle una transición:
Playmaker -> Click der. -> Add Transition-> FINISHED

 ESTADO 2 -> Actualizar
Para comenzar, tenemos que crear otro estado que utilizaremos para cambiar el valor del “Int” al “String”.
Debemos añadirle tres acciones:
·         La primera:
    State -> Action Browser -> Convert Int to String
                                           -> Int Variable -> Globals -> UNLIBROMAS_I
                                           -> String Variable -> Globals -> UNLIBROMAS_S
·         La segunda:
   State -> Action Browser -> Set Property
                                          -> Target Object -> Numeros
                                          -> Property -> Text
                                          -> Set Value -> Globals -> UNLIBROMAS_S
·         Y la tercera y final:
    State -> Action Browser -> Activate Game Object
                                           -> Game Object -> Specify game object -> Mision
                                           ->Activate -> Desactivar
Y para finalizar, le añadimos una transición:
Playmaker -> Click der. -> Add Transition -> FINISHED

ESTADO 3 -> Añadido
Tenemos que añadir un tercer estado al que llamaremos “Añadido”; en este estado simplemente añadimos una transición:
Playmaker -> Add Transition -> ORDEN_MANAGER

ESTADO 4 -> Actualizar Score
A continuación, debemos añadir un estado que realizará la actualización del Escore. Para ello tenemos que añadir una acción llamada “Int Add
State -> Action Browser -> Int Add
                                        -> Int variable -> Globals -> UNLIBROMAS_I
                                        -> Add -> 1
Para finalizar añadimos una transición:
Playmaker -> Click der. -> Add transition -> FINISHED


Libro
Antes de continuar con el Manager debemos añadirle algunos estados a los libros que vamos a recoger:

ESTADO 1 -> Listener
Este estado es el que va a detectar que hagamos click. Le tenemos que añadir un evento:
Playmaker -> Click der. -> Add transition -> System Events -> MOUSE DOWN

ESTADO 2 -> De Score a Manager
A este estado le añadimos la acción "
Send Event", que servirá para enviar información al Manager.
 State -> Action Browser -> Send Event
                                         -> Game Object -> Specify Game Object -> Click arrastrar objeto a Manager
                                         -> Send Event -> ORDEN_MANAGER
Además debemos crear una acción "
 Destroy Self"
Para finalizar, debemos arrastrar el "
 ESTADO 1 -> Listener" al " ESTADO 2 -> De Score a Manager" para crear una transición entre ellos.

  
Game Object -> Manager
Volvemos al Manager. Conectamos con Click arrastrar de Inicio a Actualizar, de Actualizar a Añadido, y de Añadido a Actualizar Score.

ESTADO 5 -> Comprobar
Creamos otro estado que se encargará de comprobar si ya has recogido los libros o no.
Es necesario crear dos nuevos eventos que se llamarán SI y NO
Events -> Add Event-> SI
                                 -> NO
A continuación, añadimos al estado una acción "
Int Compare" ,
State -> Action Browser -> Int Compare
                                        -> Integer 1 -> UNLIBROMAS_I
                                        -> Integer 2 -> 5
                                        -> Equal -> SI
                                        -> Less Than -> NO
                                        -> Greater Than -> SI
Para finalizar con este estado, debemos crear transiciones haciendo "
Click arrastrar"
ESTADO 5 Comprobar - NO -> ESTADO 2 Actualizar

ESTADO 6 -> Hecho
En este estado debemos copiar las acciones del "
ESTADO 2 -> Actualizar":
"
Convert Int to string" y "Set Property".
Además tenemos que crear un nuevo texto que avisará de que la misión se ha cumplido...
Hierarchy -> Click der. -> UI -> Text -> Mision Cumplida
                                              -> Inspector -> Text -> Done!                                            
... Para después añadir una acción acción Activate Game Object
State -> Action Browser -> Activate Game Object
                                       -> Game Object -> Specify Game Object -> Click arrastrar "Mision Cumplida"
                                       ->  Inspector -> Desactivar objeto texto
También podemos añadir una acción Wait para que espere un poco hasta llegar al siguiente estado, lo que significaría que desde el momento que se coge el último libro y se abre la puerta pasa un cierto tiempo.
State -> Action Browser -> Wait
                                       -> Time -> 2
Entonces debemos crearle una transición
Playmaker -> Click der. -> Add transition -> FINISHED
Y para finalizar, debemos crear una última transición con Click arrastrar:
ESTADO 5 Comprobar - SI -> ESTADO 6 Hecho

ESTADO 7 -> Abrir Puerta
Para finalizar creamos un nuevo estado al que llamaremos Abrir Puerta, que se encargará de activar la animación de la puerta cuando hayamos recogido todos los libros. Solo tenemos que añadirle una acción:
State -> Action Browser -> Activate Game Object
                                       -> Game Object -> Specify Game Object -> Click arrastrar "Mision Cumplida"
                                       -> Activate -> Desactivar
Creamos dos estados que harán que la puerta se abra cuando hayamos cumplido la misión. Para ello debemos tener dos puertas, una con una animación y otra sin ella:
·        La primera puerta será la original. Debemos desactivarla
               Hierarchy -> Door_a -> Click der. -> Rename -> Door_animacion
              Inspector -> Desactivar Objeto Door_animacion
·        La segunda puerta será un duplicado de la primera
               Hierarchy -> Door_animacion -> Ctrl. + D -> Click der. ->Rename -> Door_sinanimacion
Y, para finalizar, añadimos las acciones:
·        La primera acción hará que la puerta sin animación aparezca
State -> Action Browser -> Activate Game Object
                                       -> Game Object -> Specify Game Object -> Door_sinanimacion
                                       -> Activate -> Desactivar
·        La segunda acción hará que la puerta con animación aparezca
State -> Action Browser -> Activate Game Object
                                       -> Game Object -> Specify Game Object -> Door_sinanimacion
                                       -> Activate -> Desactivar