Publicat per

Joc de lluites amb les animacions i models fets als curs

Introducció

En aquest curs, s’ha vist pas per pas com construir un model 3D de dos robots i s’ha creat desde zero les seves animacions corresponents (a tenir en compte: atac, defensa, moviment, mort i estàtic). En aquesta última entrega es desenvouparà un joc de lluites incorporant aquests elements.

Joc pujat al drive: https://drive.google.com/file/d/1-3Y7mxidDEZgoWxsRzLo29FpTkHCK-fn/view?usp=drive_link

Correccions en les animacions

Els primers problemes van venir en exportar les animacions a Unity ja que el motor gràfic necessita d’unes certes correcions per funcionar tal com es veu a Maya. A continuació, s’enumeren les difcultats trobades en aquest apartat

-Problema amb el rig del peu: Desafortunadament, es va obsevar que, al importar l’animació del robot 2 (el blanc) a Unity, el peu esquerre no estava correctament conectat a seu òs superior (en aquest cas lower leg). Això provocava que Unity no llegís bé l’estructura òssea i no pogués desenvolupar un rig humanoide correcte. Es va decidir tornar a Maya, desencaixar el peu i tornar-ho a connectar. Això provoca que aquest peu, si un es fixa molt, faci un moviment diferent del seu parell però no s’aprecia gaire. En la següent figura, s’observa com quedava el peu al desencaixar-lo.

-Posició del robot 1 en l’animació: Un altre problema que va sorgir durant els primers compassos va ser que Unity interpretava incorrectament la posició incial de l’animació, produint un gir de casi 45 graus (provocant que el robot ataqués en diagonal en comptes de recte). Això es va solucionar canviant l’0pció de Root Transforn Rotation de l’animació a Original en comptes de Body Orientation.

En les següents figures s’aprecia el canvi d’orientació. La figura dreta és la correcta.

-Problema típic del model movent-se cap adalt: Per últim, un problema comú que va sorgir va ser que el model, una vegada exportat, es movia cap adalt. Això es va corregir, canviant l’opció a Center of Mass en el Root Transfrom Position (Y).

Controlador d’animacions

El controlador d’animacions pels dos robots va acabar sent de la següent manera:

L’animació d’entrada es l’anomenada Idle (repòs) i per tant, només encendre el programa els robots aniran cap aquest estat. Des d’aquí hi ha un paràmetre float, anomenat Run, que incialment es zero però que quan els robots es moguin variará. Aquest paràmetre controlarà l’animació Movement i l’activarà quan Run sigui diferent a zero i la desactivarà quan torni al seu valor original.

Per les animacions Block, Death i Attack s’ha decidit que s’activin des de Any State per poder fer els canvis d’animació instantàneament sense passar per Idle. Els paràmetres són de tipus Trigger i, quan s’apreta la tecla corresponent, s’activa l’estat especificat. Per impedir que les animacions es superposin, es controla la duració de les animacions mitjançant codi de la següent manera:

El mètode GetCurrentAnimatorStateInfo() permet comprobar si l’animació entre cometes está activa o no. Si una animació está activa no es permetrá començar d’altres. El mètode Block() no té aquesta restricció (intencionalment) per permetre bloquejar de forma ràpida, interrumpent altres animacions si es necessari. El mètode Death(), inclou la destrucció del codi i per tant no pot ser interrumput.

A mode d’exemple s’incorpora el mètode Attack():

On es pot veure que s’invoca a un mètode (amb Invoke) que provocará l’activació del Collider de l’espasa per tal de controlar quan els cops d’un robot impacten contra l’altre. Com que les animacions que es van exportar eren ReadOnly (no es va poder fer d’una altra manera) no es va poder utilitzar l’Animation de Unity per tal d’especificar en quin moment de l’animació acitvar el Collider dels cops. Alternativament, es va mesurar el temps en el que l’espasa estava recta i es va escruire en el codi, directament, en quin moment passava això. Tambés es pot veure en el codi que es para el so del moviment del robot i s’activa el so de l’espasa.

Elements de Gameplay afegits

Aquí s’enumeren elements de joc que s’han pogut afegir

-S’ha pogut realitzar un menu inicial, que permet començar nova partida i sortir del programa.

-S’ha implementat una barra de vida i es té en compte que els cops bloquejats no resten vida. Quan la vidda arriba a zero, el robot mor i surt un menú on s’indica quin robot ha guanyat, un botó per tornar a jugar i un botó per sortir.

-L’espasa emet soroll a l’atacar. També hi ha so pels cops bloquejats i els cops que resten vida. El robot emet so quan es mou i també hi ha música de fons.

Valoració de futur
Millores 
Hi ha força millores que es poden realitzar sense ampliar el propi programa:
-Implementar un gradient a la barra de vida (verd, groc o vermell depenent de la vida sobrant)
-Encara que GetCurrentAnimatorStateInfo() permet que no es superposin les animacions, si es tecleja molt ràpid hi ha un petit staggering. Una cosa semblant passa amb el so, al teclejar vàries tecles al mateix temps, a vegades, el so del moviment del robot no es sent. Investigar per tal que això no passi.
-L’atac del robot 2 no sembla que impacti bé contra el robot 1. Intentar arreglar-ho d’alguna manera.
-Implementar un timer per mostrar un compte enrere abans de començar a lluitar
-Crear un menú i una  taula pel so.
-Retardar el temps al rebre un KO.
Ampliació
El joc es pot ampliar, implementat elements típics dels jocs de lluita, com poden ser:
-Ampliar la selecció de personatges disponibles per batallar.
-Crear diferents movesets per cada personatge i ampliar el llistat d’atacs que poden realitzar els robots,
-Implementar combos de tecles per realitzar atacs més espectaculars
-Permetre saltar i atacar a l’aire.
Es podrien aplicar altres aspectes més avançats però es creu que els primers passos seríen aquests.
Plataforma
Es creu que els jocs d’aquests gènere tenen sortida sobretot en consola (tipus PlayStation y XBox) ya que el controlador es ideal en aquestes situacions. Millorat i ampliat es creu que s’hauria de publicar primordialment en aquestes plataformes.
Assets

Els assets de tercers utilitzats són els següents:

So:

RibhavAgrawal Pixabay (block)

Mixkit.co (hit and sword sound)

jeussfl2009 (backgorund)

DavidDumaisAudio (robot steps)

Models 3D:

MadMedicSoft- Russian buildings pack
Kobra Game Studios-Storage Building
EVPO Games-Modular Lowpoly Streets

 

Debat0el Joc de lluites amb les animacions i models fets als curs

Deixa un comentari