Está en la página 1de 51

Fundamentos Unity: Gameplay, parte 1;

teoría, diseño y el editor de unity.


Yone Moreno Jiménez Follow
Dec 16, 2017 · 13 min read

Siguiente parte, parte 2: https://medium.com/@yonem9/parte-2-


fundamentos-unity-gameplay-mover-rotar-y-animar-un-personaje-3d-
838bd6fa5bdb
Gameplay fundamentals:

Índice (cada apartado lleva al documento en Drive donde está escrito este
artículo)

Créditos 2

Recursos 2

¿Qué es el Gameplay? 2

Documento de diseño del juego: 3

Documento de diseño técnico: 4


Requisitos técnicos que vamos a cumplir en el curso: 5

Lo que ya sabemos: 5

Lo que no sabemos: diseño y buenas prácticas 6

Modularidad 7

Reducir repetición de código 8

Beneficios 9

Composición 9

Herencia 9

Ejemplo 10

Ejercicio práctico 12

Poner al personaje en escena 12

Importar los recursos del curso: 13


Organizar el espacio de trabajo y usar el editor de código 14

Ensamblar nuestro personaje jugador 19

Rigidbody 20

Capsule Collider 21

Configurando la Main Camera 24

Añadiendo el Animator Controller 25

Asociar el Animator Controller, al Animator del personaje 26

Abriendo el animator 27

Usando un blend tree, árbol de combinación por primera vez 28

Añadiendo animaciones de movimiento 31

Entendiendo cómo se transita entre estados 35

Modificando el umbral entre estados para hacer las transiciones 37


Conclusión 39

Créditos
Curso original creado por Joshua Kinney traducido por Yone Moreno
Jiménez.

Recursos
Materiales a usar durante el curso (animaciones y modelos 3d, más la
escena/mapa del juego) son 1.5GB comprimido en .zip) Los he subido para
que estén disponible públicamente en : Enlace

¿Qué es el Gameplay?
La programación de las mecánicas del juego significa dar vida a los objetos
del videojuego.

Para ello:

Se diseña el juego, se realiza la inteligencia artificial, los personajes


controlados por la máquina, las mecánicas de juego, la interfaz de usuario y
se llena el mundo del juego.

Documento de diseño del juego:


El documento de diseño del juego es:
La historia a transmitir, los personajes que la siguen y lo básico del juego.

Documento de diseño técnico:


El documento de diseño técnico es diferente:
Contiene las reglas y limitaciones, y se centra en los aspectos de
implementación del juego.

Una de las piezas más importantes es el personaje jugador:

Ya que suele ser lo primero que queremos implementar para hacer que el
jugador participe. Necesitamos crear un script que permita su movimiento.
Requisitos técnicos que vamos a cumplir en el
curso:
Como requisitos es nuestro documento técnico en este curso tendremos:

La necesidad de mover al personaje con el mando, lo cual cambia la forma


en la que tenemos que programar el movimiento. Crearemos una salud para
controlar el estado del juego. Por último tendremos un sistema de
interacción con el entorno, para abrir cofres, puertas etcétera.

Lo que ya sabemos:
Hasta ahora se supone que sabemos cómo programar en C# y a usar Unity:
Lo que no sabemos: diseño y buenas prácticas
Nosotros como programadores deberíamos ser capaces de pensar
detenidamente sobre las mecánicas del juego y tener una ligera idea de
cómo se relacionan:
En concreto nos interesa recordar que la programación orientada a objetos
es una forma de pensar que cada sistema lo tratamos como un objeto de la
vida real:

Así nuestro personaje podría tener vida, movimiento, ataque, recibir daño,
interactuar etcétera.

Sin embargo, si pusiéramos todo en un sólo archivo, en un sólo script,


terminaríamos creando algo que no es flexible ante el cambio y que sería
odioso de entender, además si quisiéramos crear otros personajes
tendríamos que duplicar el código:
Como programadores nos interesan dos temas:

Modularidad
Primero mantener el código flexible o modular, es decir que sea fácilmente
cambiable, modificable, extendible, entendible:

En concreto el código modular se consigue haciendo pequeños pedazos de


código o scripts, separados, y usándolos como componentes crear el
personaje que queramos:

Por ejemplo en nuestro personaje podemos hacer un script para cada


funcionalidad:

Uno para la vida, otro para el movimiento y otro para el ataque.


Reducir repetición de código
Segundo, mantener el código modular nos hace disminuir la repetición de
código y por tanto los errores:

La repetición del código es mala porque nos quita tiempo:

Beneficios
Mediante los dos pasos anteriores conseguimos dos beneficios:
Un código más limpio porque es fácil de entender, y un código escalable es
decir fácilmente modificable que nos ayudará en caso de que nuestra idea
sea compleja y tengamos que estar semanas desarrollándola.

Composición
Hace poco mencionamos la composición, aquí la definimos:

Es dividir el còdigo en archivos más pequeños de forma que cada uno tenga
una sola responsabilidad o tarea asignada.
Herencia
Otra forma de organizar y dividir el código es lo que se llama herencia:

La herencia significa escribir una clase base de la cual otras cogan


comportamientos comunes.

Ejemplo
Por ejemplo escribimos una clase base, llamada Enemy:
Donde agrupamos lo que tiene un enemigo común: salud, armadura.

Entonces podríamos crear tres tipos de enemigos:

Goblin, fantasma y zombie de forma que heredasen de Enemy.


Con lo que conseguimos que nuestro goblin, fantasma y zombie tengan los
tres vida y armadura, tan sólo escribiendo un script, Enemy.

Además la herencia nos permite:


Definir lo general para todo tipo de enemigo y luego diferenciar cada uno
de ellos, es decir podríamos hacer que el goblin fuese veloz, el fantasma
atravesase las paredes y el zombie reviviese.

Ejercicio práctico
A continuación el autor del curso nos propone un ejercicio, identificar los
rasgos y comportamientos, traits y behaviours en inglés que definen al
personaje jugador.

Poner al personaje en escena


Primero pondremos al personaje en la escena:
Importar los recursos del curso:
Los objetos se pueden importar dentro de la carpeta:

Tan sólo con arrastrarlos a Unity.


Organizar el espacio de trabajo y usar el editor de
código
Nos interesa tener todo organizado, así que creamos una carpeta llamada
Scripts, clic derecho, create new folder:

Clicamos dos veces en ella y creamos un nuevo script c#


Que llamaremos Player:

Si pulsamos dos veces sobre el script se nos abrirá el editor:


Primero borramos el Start() y Update():

Empezamos creando pseudo código, es decir comentarios con los cuales nos
ayudamos a aclarar los pasos que hay que seguir. Yo normalmente lo que
hago es escribir en una libreta lo que quiero conseguir y lo que necesito para
ello. El autor nos propone crear comentarios para anotar estas ideas:
Por ejemplo es importante indicar qué objetivo tenemos,, en este caso
mover al jugador.

También queremos que el jugador ataque:

Querríamos manejar la vida del jugador:

Y la forma con la que interactúa con el entorno:

Ahora hay que diferenciar que son rasgos, atributos o cualidades; de lo que
son operaciones, acciones, comportamientos.
Por ejemplo, movimiento es un verbo los cuales se suelen asociar a acciones
o comportamientos. Por lo que podemos empezar a listar las acciones como
métodos:

¿Qué ocurre con el ataque?

Sí, es una acción

En el caso de la vida, está palabra es un sustantivo, es decir un nombre, por


lo que podemos pensar que es un atributo o variable:

Luego, interactuar, es un verbo, así que estamos ante una nueva acción:
Hasta ahora hemos listado qué necesitamos hacer, pero nos falta el cómo.
Además, aún no hemos aplicado este código, este script a algún objeto del
juego, como componente.

Profundizando en cómo se mueve el jugador, tal vez haga falta que él corra,
así que necesitamos una velocidad. La velocidad es un sustantivo, lo cual
significa que es una variable o atributo:

Además, para que exista ataque necesitamos un daño. Como daño también
es un sustantivo, lo escribimos como una variable:

Hasta el momento tenemos algo así:


Y estamos observando que empezamos a tener muchas variables y métodos.
Si es cierto que todo tiene relación con el personaje jugador, pero no es
verdad que estas variables y métodos estén interconectadas, es decir, se
necesiten unas a otras.

Por tanto nosotros queremos dividir cada método en su propio scripts,


Move, Attack e Interact. Y aplicárselos a los personajes que los necesiten
como componentes.

Ensamblar nuestro personaje jugador


Recordamos que para añadir un script a un objeto, hay que ir al Unity, al
menú de la derecha, el inspector, y pulsar en Add Component, (teniendo al
jugador seleccionado), pulsar en New Script y poner el que acabamos de
crear Player.

Lo siguiente que aprenderemos será a ensamblar un objeto de juego para


que sea funcional. En concreto, querremos añadir animaciones al personaje,
si clicamos en él, llamado dwarf_hero por defecto, tenemos ya un Animator
En la derecha se ve:

Que es el componente que nos permite añadir una máquina de estados que
regule las animaciones del muñeco

A continuación nos interesa añadir físicas al personaje para que la gravedad


le haga efecto y cuando nos salgamos del puente caiga por el abismo, y
queremos que interactúe con las cosas, para ellos hace falta que se choque
contra ellas:

Rigidbody
Le damos a add component, physics, rigidbody:

Capsule Collider
Luego le añadimos un Capsule Collider, es decir, una región que controla
contra qué choca nuestro personaje, clicamos en add component, physics,
capsule collider:
Además le cambiaremos la altura en el eje y, para que se ajuste al tamaño de
nuestro modelo:

Acortamos un poco el radio, para que sobresalga poco y se ajuste mejor al


personaje:
Le ponemos la altura, height a 1.6 para que coincida con la del muñeco:

Con lo cual obtenemos un capsule collider que se amolda a la figura:


Si levantamos el personaje del suelo, al haberle puesto el rigidbody caerá
hasta el suelo:

Le damos al Play:
Y el personaje cae hasta el suelo.

Configurando la Main Camera


Si seleccionamos la Main Camera en el menú de la izquierda, veremos algo
así:
Abajo a la derecha observamos la perspectiva de la cámara la cual es de
arriba hacia abajo.

Añadiendo el Animator Controller


Hasta ahora tenemos todo lo que necesitamos excepto para el Animator
Controller del personaje dwarf_hero:
Así que navegamos hasta la carpeta Animations, hacemos clic derecho
dentro de ella, y pulsamos en Animator Controller:

Lo podemos nombrar como al personaje: DwarfHero:


Asociar el Animator Controller, al Animator del personaje
Con el personaje seleccionado, vamos al menú de la derecha y pulsamos
sobre el botón redondo a la derecha de Controller:

Y elegimos el controller que acabamos de crear:


Si pulsamos dos veces en el controller que acabamos de crear:

Abriendo el animator
Se nos abre el Animator:
Que es la máquina de estados que gestiona las animaciones del personaje.
Bien, primero hacemos clic derecho en la zona central y creamos un nuevo
blend tree ( en español se traduce como árbol de mezcla o árbol de
combinación), lo cual se usa para crear un estado compuesto por múltiples
animaciones, lo cual conviene si queremos que el muñeco camine y corra:

Usando un blend tree, árbol de combinación por primera vez


Lo vamos a nombrar Locomotion, porque controla la locomoción del
personajillo:

Si pulsamos dos veces sobre él, sobre el recuadro naranja que hemos
llamado Locomotion, entramos:
Añadiendo animaciones de movimiento

Después vamos arriba a la derecha, al signo del más y añadimos un nuevo


campo de movimiento, Add Motion Field:
Necesitamos añadir tres:

Clicamos en el icono redondo del primer campo:


Y le asignamos la animación de Idle, es decir, de ocioso/desocupado/vago:
Veremos que se asocia con la raíz del árbol:

Elegimos el segundo:
El cual es Walk, el estado de caminar:

Y en el tercero escogemos Run:


Por lo tanto hemos combinado Idle, Walk y Run, ocioso, caminar y correr en
el estado llamado Locomotion, que es un árbol de combinación.

Entendiendo cómo se transita entre estados

La transición entre animaciones se consigue mediante el parámetro que


ahora por defecto se llama Blend, así que vamos a darle un mejor nombre:
blendSpeed, velocidad de combinación:
Si nos damos cuenta, al rodar el círculo que indica el valor actual del
parámetro blendSpeed:
Vemos que se transita de estar ocioso a caminar y a correr, a medida que
incrementamos el valor.

Modificando el umbral entre estados para hacer las transiciones

A continuación necesitamos modificar los valores del umbral con los cuales
se transita entre estados, porque nos interesa que la velocidad del personaje
sea 10, por tanto umbrales de 0.5 y 1 son demasiado pequeños:
Para ello desmarcamos la opción Automate Threshold:

Pondremos los valores así:


Empezará el personaje a caminar, walk, cuando el umbral sea 1. Seguirá
caminando hasta que el umbral sea 8, cuando comenzará a correr.

Como se observa estamos cambiando el gráfico superior, que indica cuándo


se transita entre estados:
Conclusión
Con lo hecho ya hemos creado nuestro jugador con físicas y animación, lo
siguiente será hacer el código del movimiento mediante mando.

Learning Programming Tech Technology Unity

Discover Medium Make Medium yours Become a member


Welcome to a place where words matter. Follow all the topics you care about, and Get unlimited access to the best stories on
On Medium, smart voices and original we’ll deliver the best stories for you to your Medium — and support writers while
ideas take center stage - with no ads in homepage and inbox. Explore you’re at it. Just $5/month. Upgrade
sight. Watch

About Help Legal

También podría gustarte