Saltar navegación

Tutoría 9 - DEIM - UT5 y 6 - Curso 24·25 - 25 Marzo - Contenido educativo

Ajuste de pantalla

El ajuste de pantalla se aprecia al ver el vídeo en pantalla completa. Elige la presentación que más te guste:

Subido el 25 de marzo de 2025 por Daniel M.

67 visualizaciones

Grabación de tutoría de DEIM

Descargar la transcripción

Bienvenidos a la tutoría 9. Bueno, no he visto, voy a volver a mirar, no he visto ninguna duda en el foro. 00:00:01
Dame un segundo, me voy a refrescar, ni en los apartados. Por tanto, entiendo que no hay así ninguna duda concreta que me queráis plantear, ¿verdad? 00:00:13
Si no, pues empezamos por eso, pues para tenerlo en cuenta o resolverla cuanto antes, vaya. 00:00:21
A ver, estoy revisando, pero vamos, que antes de Mirai no había ninguna entrada nueva en los foros, así que dudas, al menos cuando las planteéis ahora, no hay. Vale, me está escribiendo. 00:00:27
Vale, duda no hay, me atasqué la parte de los nodos, entiendo que te refieres al animator. Vale, a los nodos y cómo conectarlos. Pues ahora lo vemos. No sé si en general o en algún caso concreto o es en todo y lo vemos. Vale. 00:00:46
¿Vale? Venga 00:01:01
Pues de primeras 00:01:04
primeras dudas, hablamos sobre 00:01:05
el Animator Controller 00:01:07
¿Vale? Decidme más 00:01:10
cosas por si acaso, para tenerlo en cuenta 00:01:12
Vale, pues 00:01:13
vamos con esa parte y luego 00:01:21
si no me vais, me vais diciendo 00:01:23
Sí, para avanzar desde el Animator al movimiento 00:01:24
del personaje en sí, vale, fenomenal 00:01:27
Voy a hacer un 00:01:29
repasillo rápido hasta llegar ahí 00:01:31
¿Vale? Voy a ir muy rápido porque entiendo que 00:01:33
eso sí, los que ya habéis empezado 00:01:35
habéis avanzado hasta ahí pues más o menos lo entendéis y no hay dudas vale 00:01:37
bueno os proporcionaba en la tarea a ver está aquí en sprites pues varios 00:01:43
sprites algunos que son imágenes sueltas como ya habréis visto si por defecto no 00:01:48
las está cogiendo estos sprites igual que sucedía en las imágenes de y por 00:01:55
ejemplo de los botones tienen que ser texturas del tipo 2d y yu hay vale y una 00:02:01
vez puesto hay que aplicar esta actualización y aparte de eso también había otras hojas de 00:02:05
sprites en este caso que como veis pues tienen se componen de diversos de diversos sprites en 00:02:10
sí bueno aquí ya aparecen con esta flechita porque ya los he dividido dividido esta hoja 00:02:16
de spray si os fijáis aquí en estos cuadradetes que es una operación rápido también lo cuento 00:02:21
porque lo ponen creo suficientemente desarrollada en el temario que hay que cambiar que al clicar 00:02:28
Estamos en el panel de proyecto y en el inspector que se abre cuando vamos seleccionando estas hojas de sprites o estos sprites a seca, vaya, estas imágenes. 00:02:35
Si queremos que se interprete uno de estos diseños como una hoja de sprites, es decir, que hay múltiples sprites independientes o que vamos a usar de manera independiente, 00:02:44
en vez de usar la modalidad de single que viene por defecto, tenemos que decir que sea de tipo múltiple. 00:02:54
Es decir, de este mismo archivo va a extraer varios diseños, como por ejemplo vemos aquí las distintas miniaturas que se corresponden en este caso con diferentes animaciones. 00:03:00
No siempre tienen que ser animaciones, lo que se guarda en una hoja de sprites, pero es una de las razones por las que se hace esto para tenerlo agrupado en una hoja de sprites. 00:03:11
Y dentro de esa hoja de sprites hay una sección que se llama sprite editor, que aquí nuevamente ya está dividido y en las instrucciones de la tarea, en el enunciado, os indicaba de cuánta área es o para qué está pensado la división de esta hoja de sprites, que pone que es de 275 por 275 píxeles, que eso se hace con la opción de slice e indicando el tamaño del grid. 00:03:21
Aquí no lo voy a hacer de nuevo, pero aquí es donde definimos la medida que tendrá, que coincide con la división que luego he hecho. Cada uno de los sprays, tal y como se sacaron, esto es algo que tiene que venir ya previsto desde el diseño de esta hoja de spray, ¿cuánta área es en la que ha ido segmentando una animación en este caso? 00:03:46
Una vez se pone, también es relevante en esta división, en este slice, indicar que en este caso, claro, los ojos, los pies del personaje van a estar en la parte inferior 00:04:11
Entonces el pivote, es decir, el punto que tiene de referencia para los movimientos, rotaciones, etcétera, más conveniente es que sea desde estos pies 00:04:25
Por tanto en esta operación, en otros casos puede ser otro el punto que nos interese, o también lo podemos ir ajustando a mano 00:04:33
a más no me refiero a que en custom se puede establecer que sea otro 00:04:40
las coordenadas, pero bueno, por lo general es verdad que no está 100% posado 00:04:47
en lo que es el límite de estas divisiones según las hacemos 00:04:52
pero bueno, más o menos sí que queremos que esté en esa parte inferior 00:04:56
y una vez ya lo tenemos, bueno aquí eso no lo quiero aplicar 00:04:59
porque ya está dividido, si no hay duda 00:05:04
una vez le diéramos a ese botón 00:05:07
de slice, pues hace 00:05:10
estas divisiones y aquí es cuando 00:05:12
lo descarto, lo que he hecho 00:05:14
cuando ya sí que nos sale este desplegable 00:05:15
con las distintas divisiones 00:05:18
independientes de cada 00:05:20
bueno, pues de cada división que hemos hecho en esa 00:05:21
hoja de sprite 00:05:24
una vez tenemos eso 00:05:25
normalmente lo que vamos 00:05:27
a generar, que a veces 00:05:30
no es lo más intuitivo, es 00:05:32
que podemos meter uno de estos sprites 00:05:33
Por ejemplo, uno de estos elementos, me voy a poner en la pantalla que hay que hacer las ediciones, recordad no liaros entre la de juego, que es para previsualizar el juego, y la de escena, aquí podríamos arrastrar a la jerarquía o a la propia escena uno de estos, en este caso es el personaje, una de estas divisiones. 00:05:36
En este caso vais a ver que cuando yo le dé aquí se va a quedar estática. Aquí veis ya, si no se ve lo hago con un pequeño zoom, que tiene una ligera animación. Pero por defecto cuando metemos un personaje, esto es importante, hago un inciso y tiene que ver con la duda que estáis planteando. 00:05:56
Cuando tenemos estas animaciones y esta sucesión en este caso de fotogramas que están ya prediseñados, al final lo que estamos haciendo por un lado es tener animaciones de un personaje que ya han sido diseñadas, como cuando se pintan dibujos animados. 00:06:19
Aquí este movimiento no está generado, es decir, este cabeceo, este meceo de las manos, no está generado por Unity en sí. Está generado porque un fotograma tras otro va desarrollando esta animación. 00:06:37
Por eso no hay que distinguir cuando, por ejemplo, ahora vayamos a una animación de que el personaje se mueve hacia izquierda o derecha, que lo que vais a ver es que lo que va haciendo es... un segundete, que me voy aquí y así lo vemos más en contexto. 00:06:51
Cuando me muevo, ¿vale? Este movimiento de piernas no es lo que está haciendo, que a veces intuitivamente lo que parece, no es lo que está haciendo que el personaje se mueva. Es decir, está haciendo una animación del personaje moviendo los pies en el sitio. Lo que va a hacer que se desplace por el espacio es que nosotros, por código, como hemos hecho ya en otras ocasiones con la nave, con la bola, etc., es lo que va a hacer que arrastre. 00:07:07
Entonces, es decir, que lo mueva en el espacio igual que que lo salte. Esta animación de saltar, si vamos a la animación de saltar, que está aquí preparada, si os fijáis, aquí hay una ligerísima... 00:07:30
Ligerísima, veis que vamos viendo la sucesión de fotogramas y hay una ligerísima elevación, pero no es la fuerza de salto que yo voy a querer. La fuerza de salto, aparte de que ya tenga este pequeño diseño de que salta, lo que va a hacer que efectivamente, y vuelvo a hacer más grande la pantalla, que efectivamente salte, aunque haga este pequeño movimiento de pies, es que le estamos aplicando una fuerza en el eje Y hacia arriba. 00:07:44
entonces eso es importante 00:08:09
y esto también sucederá cuando lo hagamos en 3D 00:08:11
hay que pensar que por un lado está la apariencia 00:08:14
visual de los movimientos 00:08:16
que en 2D 00:08:17
cuando se basa en sprites 00:08:20
se debe a que está la animación 00:08:21
ya diseñada y se está 00:08:24
en este caso reproduciendo en bucle 00:08:25
y otra cosa es el desplazamiento 00:08:27
en sí de lo que es el GameObject 00:08:30
es decir, si yo ahora voy aquí 00:08:32
al robot 00:08:35
que es este robot que tenemos aquí 00:08:36
Os lo enseño aquí. Este robot, cuando yo me muevo, está haciendo la animación y si fijáis en el cuadro, está todo el rato ese cuadro reproduciendo este grande que estamos hablando, se corresponde con las divisiones. Se corresponde con dónde está el objeto. 00:08:38
Y luego veis que toda la caja y lo que hay en su interior se desplaza hacia los lados o salta, etc. ¿Vale? Entonces lo primero que ocurre cuando, y vuelvo a este que tenemos aquí para el juego, a este que tenemos aquí es que por defecto, ¿vale? 00:08:56
Este nuevo diseño que hemos metido, por defecto, solo tiene un sprite renderer, que es el componente que permite que se visualice un sprite, ¿vale? 00:09:12
Entendido como un elemento 2D, que es el mismo que, por ejemplo, si yo pulso aquí, se ve en esta plataforma. 00:09:20
Cada uno tendrá un sprite, ¿vale? Incorporado, si vuelvo a la plataforma, fijaos que este es el iconito que representa los sprites, ¿vale? 00:09:28
cuadrado morado 00:09:36
y tiene varias opciones en sí mismas 00:09:39
que por defecto 00:09:41
en este caso no vamos a tocar 00:09:42
son interesantes, por ejemplo está 00:09:45
la de, si voy al robot otra vez 00:09:47
la de flip, y vais a ver 00:09:49
que lo que hace es voltearlo 00:09:51
y veis, fijaos también 00:09:53
que este volteo lo hace 00:09:55
no desde su centro, sino desde 00:09:56
la parte inferior, porque recordad 00:09:58
si yo le doy al volteo en Y 00:10:01
lo hace desde el suelo 00:10:02
desde los pies del personaje vamos a decir 00:10:04
porque el punto de pivote lo hemos puesto aquí 00:10:06
y nos interesa si el personaje 00:10:09
de pronto tuviera que andar al revés 00:10:11
bueno, según como fuera 00:10:13
nos podría interesar más o menos 00:10:15
pero queremos que las operaciones también 00:10:16
de rotación 00:10:18
de rotación 00:10:20
pues lo haga en base a ese 00:10:23
punto de pivote 00:10:25
porque si se echa para adelante o para atrás 00:10:26
queremos que sea desde ahí 00:10:28
por eso es importante el punto de pivote 00:10:29
pero ahora mismo yo lo que he arrastrado aquí es solo 00:10:31
un sprite, ¿vale? un elemento 00:10:35
un fotograma, y eso es lo que se está viendo 00:10:37
no hay ninguna sucesión, ninguna animación 00:10:39
de fotogramas 00:10:41
para que eso se vea, tienen que suceder 00:10:42
dos cosas, en primer lugar 00:10:45
como tenemos 00:10:47
una sucesión 00:10:49
de fotogramas 00:10:50
¿vale? de estos pequeños sprites 00:10:53
hay que, de algún modo 00:10:55
ensamblarlos para que se reproduzcan 00:10:57
uno después de otros, ¿vale? en el orden 00:10:59
que ya se ha hecho previamente en el diseño de esta hoja de spray, ¿vale? 00:11:01
Entonces, aquí tenemos una animación que fotograma a fotograma se va moviendo. 00:11:04
Para eso, existe dentro de las ventanas una primera que se llama Animation, ¿vale? 00:11:09
Y se ha abierto aquí, que es una línea de tiempo como la que conocéis con fotogramas, ¿vale? 00:11:15
Y luego, por otro lado, que es los nodos que estábamos hablando, por otro lado, esta ventana, 00:11:21
y otro concepto que es el animator 00:11:25
que es esto que tenemos aquí 00:11:28
que parece una estructura de nodos 00:11:29
yo aquí ya tengo varios conectados 00:11:32
y una y otra 00:11:34
se interrelacionan 00:11:35
ahora hacemos una muestra de cómo funciona 00:11:38
cada una, porque quiero ir más o menos 00:11:40
rápido 00:11:42
y luego ver dudas que surjan, porque esto 00:11:42
creo que está explicado, por ejemplo, en el vídeo 00:11:45
de Álvaro, aparte de en el tema 00:11:48
pero, eso, cuando tenemos aquí 00:11:50
un objeto seleccionado 00:11:52
vais a ver que está diciendo, para empezar a animar, y aquí está hablando de un GameObject concreto, veis que se llama igual, para animar este GameObject, crea un Animator y un AnimatorAnimationClip, aquí están ya referenciados o mencionados los dos elementos que se van a poner en juego, este Animator para ir incorporando, cada uno de estos nodos, ir incorporando las distintas animaciones que vayamos creando, 00:11:54
Y luego en este panel vamos haciendo estas animaciones en lo que se conocen como Animation Clips, que son distintos clips que van recogiendo, y fijaos en el icono que tienen esos Animation Clips, que es este triangulito verde, ahora os enseño alguno también de las que ya están desarrolladas, que en este caso es donde vamos incorporando los fotogramas. 00:12:19
Entonces, por un lado, la animación en sí con su línea de tiempo, tiene un tiempo, se van ejecutando animaciones y en este caso vamos a jugar con fotogramas, pero también se podría animar en el tiempo, pues por ejemplo el transform de un GameObject. 00:12:40
Meterme aquí e ir diciendo que la posición vaya cambiando en cierto momento, igual que hacemos en un objeto 3D. De hecho, vamos a hacer eso primero. De momento dejo de lado este robot y de hecho lo voy a desactivar, que es el que está preparado ya con las animaciones. 00:12:56
Nos vamos a centrar un segundo en este que tenemos aquí. A ver, perdonad, que me voy a poner la escena también aquí de momento. Ya van faltando espacios con tanto menú que tengo que abrir. Pero bueno, nos vamos apañando. 00:13:13
Entonces tenemos este robot aquí y voy a decirle, oye, yo quiero que esto, y lo voy a llamar además, para que no sea este nombre que ha cogido por defecto, robot tutoría. 00:13:27
Tutoría 00:13:41
¿Vale? Si queremos animar el robot 00:13:45
Tutoría, hay que crear 00:13:47
¿Vale? Y lo voy a crear 00:13:48
Por ejemplo, en el escritorio 00:13:50
En... Aquí, por ejemplo 00:13:53
Voy a crear una nueva animación 00:13:55
¿Vale? Y aquí es lo que hay que pensar 00:13:57
Las animaciones se van 00:13:59
Segmentando en distintos tipos, igual que las 00:14:01
Hojas de spray, viene una a andar, otra a correr 00:14:03
Otra a saltar, otra a agacharse 00:14:05
¿Vale? Pues la primera 00:14:07
Normalmente es la de estar como en reposo 00:14:09
se llamaría que es cuando no hay movimiento 00:14:11
pues el personaje pues eso tiene un pequeño 00:14:13
meceo para que se vea que está 00:14:15
en el sitio animado y no está estático 00:14:17
pues suele tener esta animación que se llama 00:14:19
el idle entonces bueno 00:14:21
por la primera que vamos a crear y voy a poner 00:14:23
idle tutoría más que nada porque por ahí tengo 00:14:25
las animaciones que 00:14:27
tenía el otro personaje para no 00:14:29
confundirlas y al crearlo 00:14:31
you cannot save to a non asset folder 00:14:32
vale si hay que ir 00:14:35
a cuando creamos 00:14:37
dentro de los assets 00:14:39
de nuestra jerarquía 00:14:41
nos ha dado ese aviso 00:14:43
pues yo por ejemplo aquí creé 00:14:45
dentro de la estructura de carpetas 00:14:47
veis que hay aquí ya una creada de animaciones 00:14:49
y aquí están las distintas animaciones 00:14:51
fijaos con este punto anim que es el que nos dice 00:14:53
aquí, las distintas animaciones en las que 00:14:55
yo ya he ido pues guardando 00:14:57
haciendo estos clips donde se 00:14:59
guardan estos movimientos 00:15:01
estos 00:15:03
animaciones de objeto 00:15:04
aquí tengo las del robot 00:15:07
Para no confundirla, nuevamente voy a hacer una que se llama Robot Tutoría, ¿vale? Y, perdona que me he ido a guardar a la escritoria y no se puede, ¿vale? 00:15:09
Idle Tutoría. Y ahí está. Y ya cuando hemos creado un Animation Clip, todos los Animation Clips que vayamos asociando a ese personaje, ¿vale? 00:15:18
Porque aquí se pueden ir creando más, irán apareciendo aquí y se irán seleccionando aquí. 00:15:27
Entonces, por ejemplo, el del idle. Yo ya he dividido, imaginaos, hemos hecho este trabajo de dividir el personaje, los distintos fotogramas y para incorporar estos fotogramas en una línea de tiempo de esta animación llamada idle, lo que hay que hacer es seleccionar todos del primero al último con shift, ¿vale? 00:15:30
A ver si lo podemos dar un poquito más de zoom. ¿Vale? Veis que por defecto lo que se van viendo aquí no hay mucha diferencia porque se ven cada fotograma en pequeñito, ¿vale? Pero esta animación es donde se puede ir ajustando, pues a lo mejor que el primer momento de reposo dure esto y luego entre fotogramas podemos ir variando la distancia. 00:16:00
Es decir, no tiene que durar un fotograma cada uno, ni dos, etc. Incluso, igual que sucede en los software de animación, aquí podemos hasta cambiar la velocidad de fotogramas por segundo. 00:16:25
Si nos parece muy rápido, muy lento. Por defecto viene en 60, yo lo voy a poner en 30 y así la animación, si no vamos desplazando los fotogramas entre sí, se irá reproduciendo a 30 fotogramas por segundo. 00:16:40
¿Esto qué significa? Que cuando ya tenemos una animación, ¿vale? Y le damos a este play, a ver, voy a escena que se verá aquí, vais a ver que ya tiene este cabeceo, porque si seleccionamos este personaje, ¿vale? Al final lo que está sucediendo es que aquí se está desarrollando esta animación y fijaos que se queda aquí unos segundos y luego empieza a moverse. 00:16:55
A ver, reproduzco de nuevo. Aquí está. ¿Vale? Es que se reproduce, se queda parado y luego ya va más rápido. ¿Por qué? Porque yo en esa animación, si os fijáis, cuando la selecciono he dejado unos fotogramas que se quedan como estancados y luego ya empiezan a desarrollarse a la velocidad. 00:17:23
Esto, cuando creamos un primer clip de animación, a través de este panel de animación, en un GameObject, que es en este caso Robot Tutoría, fijaos que por defecto, yo no lo he añadido de ninguna forma, si os fijáis, ha aparecido otro componente ya aplicado que se llama Animator. 00:17:45
Que el animator, como su propio nombre indica, está relacionado con el panel de animator 00:18:07
Y si os fijáis también, yo estoy aquí reproduciendo el juego 00:18:13
Y sin hacer nada, ya por defecto viene un primer nodo que se llama igual que esta animación 00:18:17
Y veis que hay una barra que en bucle se va llenando una y otra vez 00:18:22
En relación a lo que dura esta animación 00:18:28
Esto, aunque no se ve aquí, está reproduciendo la duración de la animación que tiene en su interior. 00:18:31
Entonces, lo que podremos ir haciendo es ir generando, por ejemplo, si yo ahora en este personaje creo un nuevo clip, que ahora va a ser salto en Tutoría. 00:18:39
Y lo vuelvo a guardar en Animations, Robot Tutoría, para tenerlos todos agrupados. 00:18:53
Al darle a guardar, aquí dice, ya tienes el Idle Tutoria en este objeto, asociado a este GameObject, y también ahora otro que se llama Salto Tutoria, que aún está vacío. 00:18:58
Cuando generamos un nuevo clip de animación, fijaos que aparte de generarse esta animación, aquí aparece otro nodo. 00:19:11
Y los nodos, además, cuando los vamos seleccionando, tienen en el propio inspector, tienen ya unida o vinculada, esto se podría cambiar si nos interesara, pero viene ya vinculada por defecto la animación. 00:19:18
Porque pensad que ese clip de animación que hemos creado aquí en Animation Robot Tutoría se ha generado un Animation Clip que aquí viene referenciado con este triángulo verde. 00:19:34
Entonces, cada uno de estos estados, por defecto, está asociado a una animación. Por ejemplo, vamos a asociar en este, lo dicho, para que podáis operar en el panel de animación con animaciones de un GameObject, hay que seleccionar ese GameObject. 00:19:44
incluso para ir comprobando la animación de esto que vayamos haciendo en el panel de animación, 00:20:04
independientemente del animator, aquí tenemos un reproductor en el panel de animation. 00:20:09
Para ver lo que está sucediendo, si nos vamos al panel de escena, en el que editamos normalmente, 00:20:14
si le damos aquí play con el objeto seleccionado, vemos esa animación tal y como está aquí. 00:20:21
Pero veis que ahora no se está reproduciendo el animator controller. 00:20:26
Ahora estamos viendo la animación como tenemos aquí. De hecho, fijaos, luego deshago, que si yo borro esto, se queda quieto, se mueve un poquito, está reaccionando todo el rato en relación a lo que vayamos haciendo en este panel. 00:20:30
¿Vale? Entonces, a ver, voy a mover estos fotogramas para que vayan hacia aquí y juntarlo con la velocidad real que quiero. Entonces aquí podemos ir manipulando los distintos fotogramas y sus duraciones. 00:20:45
Cuando luego, por ejemplo, nos metemos en salto, aquí podemos hacer nuevamente esa misma operación. 00:21:06
En los sprites, yo tengo aquí ya una hoja de sprites relacionada con el salto, que es esta que tenemos aquí, 00:21:11
y nuevamente yo lo voy a arrastrar, tras seleccionar con Shift todos los diferentes sprites, a esta línea de fotogramas, 00:21:18
que queremos ver cómo se ve, qué hace esta sucesión de distintos dibujos en este caso. 00:21:25
Pues le damos a play y se ve 00:21:31
Porque lo tenemos seleccionado y entonces se ve 00:21:33
Evidentemente hay que poner 00:21:35
La visión de escena para que se vea ese personaje 00:21:40
Pero veis que aquí se puede hacer una pequeña 00:21:44
Reproducción, ir fotograma a fotograma 00:21:46
Ir al último, al primero 00:21:48
Pues igual que se hacen 00:21:49
Los software 00:21:51
Que permiten animaciones 00:21:54
Entonces 00:21:55
Lo que vamos a conseguir por un lado 00:21:57
Con este animator es 00:21:59
pasar en ciertos momentos 00:22:01
de una animación a otra, pues cuando pulso 00:22:03
tal tecla paso de esta animación 00:22:05
de estar idle a estar en salto 00:22:07
¿vale? pero nuevamente 00:22:09
el salto en sí, si os fijáis 00:22:11
no lo está dando aquí 00:22:13
yo ahora le doy a 00:22:14
bueno, perdón, no lo quería ver 00:22:16
aquí, lo quería ver, selecciono el objeto 00:22:19
el salto no lo da 00:22:21
veis que este salto 00:22:23
que da es mínimo, es solo una animación 00:22:25
para dar la influencia de salto 00:22:27
Pero el salto realmente nosotros después lo haremos así, desplazando con fuerzas o con kinemáticas también se podría, pero en este caso se os pide con fuerzas. 00:22:29
Entonces, mientras el personaje iba con la otra animación andando, que lo iremos desplazando, en cierto momento, por ejemplo, cuando demos a la barra espaciadora, diremos pasa de este nodo a este. 00:22:38
Y aparte de hacer esa animación, también le pondremos que haga su desplazamiento en el eje Y o el que indicamos. 00:22:48
¿Hasta aquí qué tal? ¿Me seguís? 00:23:01
Sé que ya esta tarea tiene un montón de variables. 00:23:04
Por eso hay una sección que es la más compleja realmente, que es la de las torretas, que es opcional. 00:23:09
Y os dejo prácticamente el código para ir uniendo y bueno, irlo referenciando. Y es complejo, lo sé. Pero bueno, eso, irme parando e irme haciendo dudas. 00:23:14
Entonces, una vez tenemos eso, lo primero también, que no se nos olvide lo que hemos ido estudiando hasta ahora, el personaje se queda en su sitio cuando estamos diciendo de moverle en físicas, 00:23:25
porque primero no estamos aplicando ninguna física, ¿vale? 00:23:36
Que se queda ahí, pero independientemente de la animación 00:23:39
y de los movimientos que nosotros aportemos, 00:23:42
recordad que en un juego en el que vamos a basarnos en físicas 00:23:44
tiene que haber eso que se llama Rigid Body. 00:23:47
Y como pone en el tema, además cuando estamos usando sprites, 00:23:50
elementos en 2D, hay una nueva tipología de elementos basados en física 00:23:54
como este Rigid Body 2D, igual que va a haber, ¿vale? 00:23:58
Luego colliders 00:24:02
De tipo 2D 00:24:05
Que no son los mismos además 00:24:06
No son ni siquiera las mismas formas 00:24:08
Que las que había en 3D 00:24:10
Los colliders de elementos 3D 00:24:11
Ya para empezar, cuando le damos al play 00:24:13
Aparte de que esté en estado de reposo 00:24:15
Pues veis que se cae el personaje 00:24:17
Porque hay una física 00:24:19
Y no choca con este otro sprite 00:24:20
Que yo ya había metido 00:24:24
Esta plataforma 00:24:25
Que se han ido distribuyendo 00:24:26
Que nuevamente 00:24:28
Hasta que no se pone un box collider no se detectan estas colisiones. Entonces, nuevamente, igual que hacíamos en el tema 3 y 4, los objetos por físicas también tienen que verse, tienen que encontrarse. 00:24:30
Para ello existe un tipo de collider, el más básico, que puede ser o el capsule o el box collider, según la forma que queramos, cuando lo aplicamos tiene este área que sirve para definir qué sección va a encontrar cuando colisiona un objeto con otro. 00:24:44
Y hay un problema mínimo cuando lo dejamos así, que es que ahora se queda en el suelo, pero fijaos que esa pequeña diferencia que hay en el diseño del sprite, aquí es por donde estaría el punto de pivote, en el propio sprite hay un pequeño hueco que no es realista. 00:25:05
Esto se arregla, igual que sucedía en los otros colliders, con las opciones que tiene el propio collider para desfasar o ajustar medidas. 00:25:24
En este caso, por ejemplo, podemos decir, y de hecho es lo suyo, que los colliders se relacionen con la forma que tiene el personaje. 00:25:37
Porque si luego encontráramos una pared y se chocara con la pared, nuevamente se chocaría en este punto y no donde querríamos, que es más como por aquí. 00:25:47
Entonces, elementos como este ajuste de medidas hay que hacerlo de forma pertinente al diseño que tenemos. 00:25:55
Aquí hay un offset, lo ajustamos y ahora sí que si lo ajustamos aquí, pues ya tenemos que al arrancar el juego, la caja que está teniendo en cuenta para las colisiones es la de, incluso se podría ajustar un poquito más. 00:26:06
Ahora lo ajusto. Pero tiene que ver con la caja del collider. Nuevamente, que veáis un movimiento no significa que se esté moviendo en sí, ¿vale? Hay que ir combinando las distintas funciones o operaciones que podemos tener. 00:26:21
¿vale? entonces ahí 00:26:38
y lo bajo un poquico 00:26:39
y esto es importante no solo por esto 00:26:41
que estamos haciendo ahora del suelo 00:26:44
¿vale? sino porque 00:26:45
también los colliders, recordad que nos 00:26:47
pueden servir por ejemplo si nos disparan 00:26:50
aquí 00:26:51
ahí por ejemplo 00:26:53
creo que está más fino, para que detecte 00:26:58
las balas, por ejemplo, entonces 00:27:00
si al personaje de pronto le ponemos una caja 00:27:02
que sobresale muchísimo por arriba 00:27:04
¿vale? pues una bala que a lo mejor 00:27:06
Si llega hasta aquí el collider, llega aquí la bala, mata al personaje porque está detectando la colisión. Le voy a hacer un pelín más ancho y ya lo tenemos. Ahí, más o menos. Hay otros tipos de formas de colliders que incluso podrían ser más convenientes como un cápsule porque tiene una forma más redondeada y entonces estas aristas, pero bueno, esta podría servir. 00:27:08
Recordad luego, por ejemplo, cuando se agachara el personaje 00:27:29
Que cuando se agache el diseño, el sprite 00:27:33
Puede parecer que el personaje está así 00:27:39
Pero la caja del collider no 00:27:40
Habría que actualizarla por código 00:27:42
Para que, por ejemplo, cuando se agache 00:27:44
Pues sea así, ¿vale? De grande 00:27:45
Que si os fijáis en el otro objeto que tenía 00:27:48
¿Vale? Ya que estoy hablando de esto 00:27:51
Os lo enseño en un segundito 00:27:53
aquí, vale, si voy 00:27:54
a ese otro personaje que tengo 00:27:58
vale, bueno, yo le doy al play 00:28:00
ahora se va a cambiar 00:28:02
a la de game, pero vuelvo aquí 00:28:03
bueno, espera, lo pongo aquí la de game 00:28:05
y voy a dar un poquito 00:28:07
menos de espacio a esto, cuando yo voy moviendo 00:28:09
al personaje y lo agacho 00:28:11
veis que en algún momento 00:28:13
estoy actualizando 00:28:16
esa colocación 00:28:17
del boss collider, ver que se cambian 00:28:19
las dimensiones, vale, estoy metiéndose 00:28:21
en el componente Backbox Collider 00:28:23
por código, algo que ya vamos sabiendo 00:28:25
hacer, ¿verdad? 00:28:27
Y pues habrá que decir offset en X 00:28:29
en este momento 00:28:31
0, si yo pulso la letra control es 00:28:33
0,35. 00:28:35
Se puede ir ajustando visualmente 00:28:37
y luego por código se meten esas 00:28:39
medidas. 00:28:41
¿Sí? Bueno. 00:28:43
Hasta aquí más o menos me vais siguiendo. 00:28:45
Y me meto más con el 00:28:49
Animator Controller. 00:28:51
Vale. Animator Controller. 00:28:53
Pues lo dicho, cuando he añadido estos clips de animación al robot que hemos incorporado, a medida que vaya asociando más o menos animaciones a ese objeto, más de estos nodos irán apareciendo. 00:28:55
que ojo, aparecen por defecto 00:29:12
pero yo lo puedo borrar 00:29:15
borrándolo 00:29:17
que porque se haya creado 00:29:19
con el objeto seleccionado 00:29:20
se puede aparecer aquí pero en cierto momento 00:29:23
no puede sobrar y borrarlo 00:29:25
o más interesante entiendo porque esto si no lo unimos 00:29:26
pues ahí está y tampoco pasa nada 00:29:29
estos triangulitos hemos dicho que son los 00:29:30
clips de animación, entonces yo puedo coger 00:29:33
uno y meterlo aquí 00:29:35
que es un nodo que representa esa animación 00:29:36
¿vale? entonces 00:29:39
incluso, esto lo vais a ver 00:29:40
en el siguiente tema 00:29:43
cuando hagáis animaciones de objetos 3D 00:29:44
y a lo mejor tenéis un rig 00:29:47
del cuerpo y vais a meter 00:29:49
otra animación compatible con 00:29:51
ese rig de cuerpo, que venga 00:29:53
de otro sitio, de Mixamo, esto cuando veáis 00:29:55
el tema 6, lo veréis 00:29:57
claro, que no venga con 00:29:58
el mismo FBX, con la misma 00:30:01
geometría 3D, no significa que no podamos 00:30:03
incorporar otras animaciones que venían 00:30:05
de otro sitio, siempre y cuando 00:30:07
en el caso de 3D, pues estén relacionados 00:30:08
bien los puntos de rigging con el 00:30:11
avatar, con el esqueleto 00:30:13
inicial, ¿vale? Esto ya lo veremos, pero que 00:30:15
sepáis que va a ser incluso frecuente 00:30:17
coger animaciones de distintos modelos 00:30:19
e incorporarlos al mismo animator 00:30:21
para luego ir pasando de uno a otro, ¿vale? 00:30:23
Esto tendrá más sentido probablemente 00:30:25
en el futuro, pero aquí también, yo por ejemplo 00:30:26
ahora mismo, cojo 00:30:29
este robot walk que hice en otro 00:30:31
momento, ¿vale? Es verdad que aquí, si me 00:30:33
fijo, es el mismo robot porque es el 00:30:35
mismo dibujo, ¿no? Entonces yo 00:30:37
si yo ahora fuera a este objeto que tengo aquí 00:30:39
a este robot 00:30:41
tutoría 00:30:43
si le digo 00:30:43
que 00:30:47
por defecto 00:30:48
el que quiero que 00:30:51
se haga, ¿vale? Sea 00:30:53
dame un segundo y ahora os explico esto, sea este 00:30:54
robot walk, vais a ver que ya el que se está 00:30:57
reproduciendo en ese game object es el 00:30:59
que está caminando, fijaos que 00:31:01
está caminando o parece, pero no 00:31:03
se mueve, solo está haciendo una animación en el sitio 00:31:05
como está diseñado 00:31:07
pero no se mueve en el espacio 00:31:11
entonces eso, que sirve para ir conectando 00:31:14
distintas animaciones entre uno y otro 00:31:18
un concepto interesante que es esto 00:31:19
por lo que algunas cajas se ven en naranja 00:31:22
es este concepto de que dando clic con botón derecho 00:31:25
podemos fijar uno de estos estados 00:31:29
estos nodos se llaman estados 00:31:31
como el que surge por defecto 00:31:33
Y ese va a ser el que se anime de primeras 00:31:35
Es decir, yo cuando dé al play 00:31:41
Va a empezar la animación desde ese primer nodo 00:31:43
Yo lo llamo nodo, pero bueno, sería más correcto decir desde ese primer estado 00:31:48
Entonces, aquí hay un nodo de entrada 00:31:52
Que es cuando entres en el nivel 00:31:54
Ve al que esté conectado aquí 00:31:55
Que va a ser por defecto ese, que es el naranja 00:31:58
Si yo pusiera este, veis que el que se está reproduciendo es este 00:32:00
¿Vale? Entonces, una vez tenemos esto, más ingredientes 00:32:02
De estas animaciones que hemos creado, si nos vamos metiendo en las distintas animaciones 00:32:07
En la animación en sí, no en el nodo, en la animación en sí, en el panel proyecto 00:32:11
Vais a ver que hay tres opciones, bastante relevantes las tres 00:32:15
Pero ahora mismo nos interesa sobre todo una 00:32:19
Más para 2D, una que es que se haga en bucle 00:32:23
Es decir, si yo desactivara en la de salto, por ejemplo, tendría 00:32:27
y tiene sentido que esto del bucle 00:32:30
se desactive, porque cuando saltamos 00:32:33
queremos que el salto, la animación de salto 00:32:35
sea una vez y no se siga 00:32:37
haciendo el salto 00:32:39
si queremos que haga doble salto, pues lanzaríamos 00:32:40
otra vez, daríamos a lo mejor a la barra espaciadora 00:32:43
y se le haría 00:32:45
otra vez la animación, pero no queremos 00:32:47
que se haga un bucle, entonces mira, de hecho la de salto 00:32:49
desconecto, ¿vale? y la de idle 00:32:51
por defecto ya viene en bucle y por eso 00:32:55
pues se está haciendo en loop, ¿vale? importante porque 00:32:57
Porque si no, por mucho que aquí parezca que esto es un bucle infinito, fijaos que si yo voy a esta animación y se lo quito, bueno, espera, que lo estoy haciendo aquí, y ahora mismo, este idle tutorial no se debería reproducir en bucle, y ahí se ha parado, ¿vale? 00:32:59
fijaos que se ha parado y si voy al animator 00:33:22
aquí aunque ponga que se está reproduciendo 00:33:24
fijaos que no se mueve 00:33:26
¿vale? 00:33:28
bueno, pues es importante que esto esté 00:33:30
activo, ¿vale? 00:33:32
porque es la animación de base que hay 00:33:34
el bucle seguirá reproduciéndose 00:33:35
por... según el animator 00:33:37
pero la animación no, ¿vale? 00:33:40
pueden ocurrir estas cosas 00:33:42
vamos ahora a lo que es 00:33:43
las conexiones 00:33:46
o como pasamos de un estado a otro 00:33:48
y para esto voy a ir al que ya está hecho 00:33:50
voy a hacer un primero muy básico 00:33:53
para que veáis el del salto por ejemplo 00:33:55
que es 00:33:57
que se deben crear entre estas animaciones 00:34:00
distintos, lo que se llaman transiciones 00:34:03
para hacer una transición se clica 00:34:05
con botón derecho en el 00:34:07
nodo del que queremos que se vaya 00:34:09
y luego aparece 00:34:11
esta flecha que debemos arrastrar 00:34:13
al nodo que queremos que se vaya 00:34:15
yo quiero que vaya en algún momento 00:34:17
Todavía no hemos dicho. En algún momento pase de aquí a salto tutoría. Y de hecho, si por defecto le doy, fijaos, que yo le doy aquí y se ha reproducido este idle tutoría, ha pasado directamente a salto tutoría y se ha reproducido y ya se ha quedado ahí parado porque no está en bucle. 00:34:19
Si yo ese lo pusiera en bucle, en principio, nuevamente, fijaos lo que pasaría. Ahora está haciendo reproducciones en bucle porque nada hace que salga de este nodo y a esto le hemos dicho que sea en bucle. 00:34:38
Entonces es importante ir definiendo qué es loop y qué no es loop para que se vayan realizando estas lógicas de ir una animación tras otra. 00:34:52
Entonces, estas animaciones, normalmente, cuando ponemos una que va de un estado a otro, también es muy frecuente, siempre tiene que ser así, que luego se pase de esa a la primera. 00:35:02
Por ejemplo, en este caso queremos que empiece estando parado, que cuando pulsemos, y aquí pondremos una condición, cuando hemos clicado en esa transición, pondremos una condición que cuando se cumpla pasará a salto, y cuando se ejecute el salto, si no lo ponemos en bucle, aquí habrá otra condición que volverá al idle. 00:35:15
Si queremos que el objeto, que el personaje en este caso, esté quieto hasta que pulsemos la barra espaciadora, salte y luego vuelva a estar tranquilo una vez caiga, 00:35:39
pues ya tenemos un poco la lógica de primero va a ir, va a empezar en este, porque es el que hemos puesto por defecto, va a hacer el salto y luego va a volver a idle. 00:35:48
¿Sí? ¿Qué ocurre ahora mismo? Que como no hay condición, en cuanto se ejecuta la primera, pasa la segunda y ahora está yendo de una a otra. 00:35:56
A ver, joder, esto es verdad que se me ha ido la interfaz. De hecho, esto de game lo voy a poner aquí. No, lo voy a poner aquí abajo porque no quiero que se vea mucho. Y ahora mismo ahí. Nos viene mejor. 00:36:10
Vale, pues lo dicho, que se va a animar, va a llegar al final, va a pasar al siguiente salto y va a estar en un bucle infinito. ¿Qué es lo que vamos a hacer con estas transiciones y las condiciones de las transiciones? Pues parar estas reproducciones según nos interesa a nosotros o que pase de una a otra según nos interesa a nosotros. 00:36:28
por ejemplo, ya pensando 00:36:46
aquí querremos que suceda el salto 00:36:48
cuando, por ejemplo, pulse la barra 00:36:51
espaciadora, ¿vale? pero cuando 00:36:52
haga el salto, es muy normal 00:36:54
a lo mejor, que pase ya 00:36:56
directamente, sin ninguna condición, es decir, que cuando 00:36:58
acabe esta, vaya a esta, para 00:37:00
para que se quede tranquilo al saltar 00:37:02
es verdad que normalmente habría otra animación de 00:37:04
después de saltar, una de 00:37:06
la reacción, cuando llega al límite, es la animación 00:37:08
de la bajada del salto 00:37:10
pues habría otro nodo aquí, imagina 00:37:12
que fuera este, que habría que conectar 00:37:14
En vez de así, así, ¿vale? Que cuando se haga el salto, al llegar arriba se verá cómo cae, ¿vale? La animación de cómo cae y luego de esta irá a esta, ¿vale? Que las direcciones que van tomando estas animaciones son las que nosotros queramos, ¿vale? Pero que sepáis que eso también es muy frecuente, que haya de ida y vuelta con distintas condiciones, ¿vale? 00:37:16
Entonces, ¿cómo hacemos estas condiciones? Porque el kit de la cuestión ahora es poder gestionar cuando se pasa de una animación a otra. Y fijaos, voy un segundo, porque veáis el controller. 00:37:37
Y bueno, importante porque lo he dicho, pero igual no de la manera suficientemente clara. Todo esto que estamos trabajando y que se está guardando de la configuración de nodos, transiciones, etcétera, se está guardando, está representado en este objeto, en este asset, que en este caso ha cogido el nombre por defecto, Robot Tutoría, que es un objeto de tipo Animator Controller. 00:37:51
Igual que hay clips de animación, esos clips de animación luego se meten como estados en un animator controller. 00:38:18
En un objeto, si no hemos creado nosotros uno específicamente, como habéis visto, al crear la primera animación, 00:38:25
se crea este primer animator y se incorpora ya directamente. 00:38:30
Aquí nuevamente, si nosotros quisiéramos, con clic derecho en esta área, vamos a crear. 00:38:34
Todo esto lo podemos hacer nosotros a voluntad. 00:38:40
Podemos hacer otro animator controller, ¿vale? Que se llame robot tutoría días pares y que sea el que use en el componente animator, ¿vale? Si yo lo arrastro, veis que coge el que yo arrastro aquí, este ahora está vacío, pues a lo mejor, imaginaos, una chorrada, pero el personaje va a tener unas animaciones diferentes según el día o la hora del día en el que se arranca el juego y por código conseguimos detectar qué hora del día es. 00:38:42
Pues aquí luego podríamos tener distintos sistemas de estados, distintos animators controles y según el que nos interese, pues se carga uno u otro, ¿vale? Entonces, que sepáis que todo se gestiona aquí, ¿vale? En 3D también existe este concepto del avatar, que es lo que os había dicho antes del rigging, ¿vale? Que va a ir siguiendo las animaciones, aquí no tiene tanto sentido, esto de Apply Room Motion también lo veremos en el futuro, ¿vale? 00:39:11
Y aquí hay una cosa que os pongo en los apuntes, que no es muy importante y por eso no quiero liar, que es que también los fotogramas o el cálculo de todo lo relacionado con el animator se haga según el update, ¿vale? O según, digamos, por decirlo rápido, la gestión de tiempo de las físicas. Recordad ese physics update, que no eran los mismos tiempos que los del update, ¿vale? Pues con esto podemos cambiar que el refresco se haga de una forma u otra. 00:39:35
Que nos puede interesar, incluso ya en esta tarea 00:40:02
Si ahondáramos mucho 00:40:04
Nos podría interesar, porque teniendo en cuenta 00:40:06
Lo voy a dejar en normal 00:40:09
Aunque se podría poner perfectamente en Animate Physics 00:40:10
Tener en cuenta que los movimientos 00:40:12
Que hemos dicho que vamos a hacer del personaje 00:40:14
Del personaje, no de las plataformas 00:40:16
¿Vale? Ahora hablamos de eso 00:40:18
Van a ser en base a física, le vamos a dar fuerzas 00:40:20
Entonces queremos que estas reacciones 00:40:22
También se calcuren en base a físicas 00:40:25
Así que bueno, tampoco va a haber una 00:40:26
Diferencia muy amplia 00:40:28
Pero bueno, de hecho, incluso ya con esta lógica que tenemos, tendría más sentido poner el AnimatePhysics. 00:40:30
Vale, vamos a hacer, lo voy a hacer rápido, porque no hay tiempo y prefiero casi que lo veamos ya sobre algo hecho, ¿vale? 00:40:36
Y voy comentando código que tengo yo, o otros ejemplos que ir haciéndolo todo, que tardaríamos muchísimo y no daría tiempo casi nada, ¿vale? 00:40:44
Pero en este robot voy a hacer un script, lo voy a hacer aquí, pues yo qué sé, voy a crear un script, 00:40:51
Se va a llamar Robot Tutoría 24-25. Por si yo en el futuro lo quiero ver, saber de qué año es. Un nombre cualquiera. Esto es regular porque no debería tener números, pero me lo va a admitir. 00:40:58
Pero en principio no uséis números. 00:41:12
Mira, de hecho, voy a poner 24 con letra. 00:41:15
Y recordad, ya me sirve de recordatorio, que si abrís una script que el nombre de su clase no está escrito igual, no lo va a detectar. 00:41:20
Entonces se tiene que llamar igual. 00:41:31
Esto era de la lección 1. 00:41:32
Entonces yo tengo este robot tutoría y se lo voy a aplicar al objeto que quiero que controle, que es el de robot tutoría. 00:41:34
¿sí? hasta aquí lo de siempre 00:41:40
¿qué es lo que vamos a hacer? 00:41:42
vamos a ir cambiando 00:41:45
o aportando 00:41:47
distintos parámetros 00:41:48
que sirvan para ir definiendo 00:41:50
condiciones 00:41:53
y si os fijáis, aquí hay algo de layers 00:41:54
las layers son más 00:41:57
complejas y más avanzadas 00:41:59
en el tema 6 algo se apunta pero es más avanzado 00:42:00
y es más para 3D de hecho, no es para esto 00:42:03
que son cada una de estas 00:42:05
igual que os he dicho antes de que se podían ir cargando 00:42:07
distintos animators controllers vale también dentro de un mismo animator controller se pueden 00:42:09
ir haciendo distintas layers vale y que cada una vaya se vayan activando no y vayan guardando o 00:42:14
lanzando distintas nodos de animación incluso se puede combinar que la parte de arriba de un 00:42:20
cuerpo en un 3d en un objeto 3d pues el torso se mueva en base a unas animaciones y la parte 00:42:25
inferior en otra entonces se pueden ir combinando distintas pero esto es más avanzado entonces de 00:42:30
momento vamos a trabajar en la base layer pero aquí hay otra sección que se 00:42:36
llaman parámetros y estos sí son ya importantes los parámetros los 00:42:39
parámetros como indica el nombre van a ser distintas vamos a decir variables 00:42:44
vale dentro de este ámbito de las animaciones que nos sirven para ir 00:42:50
aplicando condiciones vale los parámetros y las condiciones están 00:42:55
íntimamente ligados porque aquí lo que vamos a ir añadiendo en estas 00:42:59
condiciones son parámetros vale que según su valor o no pues permitirán que 00:43:03
esa condición se cumpla o no veis que sin ahora mismo le digo añadir una 00:43:07
condición dice no si es que no existe ningún parámetro efectivamente todavía 00:43:11
no lo hemos creado vale entonces parámetros hay de cuatro tipos ahí y 00:43:15
además los van a sonar todos ya parámetros basados en floats que son 00:43:20
números que pueden tener decimales no voy rápido vale ins que aunque yo meto 00:43:26
decimales? Pues me va a decir que 00:43:31
nanain, ¿vale? Y me lo va 00:43:33
a redondear. 00:43:35
Bulls, que como las booleanas pueden ser 00:43:37
verdaderas o falsas. Y luego 00:43:39
otro concepto que es trigger, con este circulito, que es 00:43:41
que según le das, se activa, 00:43:43
es un disparador, según le das le activas 00:43:45
y vuelve al reposo, ¿vale? Parece 00:43:47
lo mismo que una booleana, pero una booleana tú 00:43:49
le dices true y se queda en true hasta que le 00:43:51
digamos false. En un trigger 00:43:53
es como que se lanza, 00:43:55
¿vale? Lo dejo aquí, 00:43:57
se lanza 00:43:59
Y en principio, ahora porque no está habiendo más operaciones, pero en principio ya se desmarca enseguida. Es como para acciones momentáneas que hay que lanzar, como un salto. En un salto decimos saltar, se salta y ya está. No queremos estado de saltar, activo, true. Luego quitarlo, falso. Se podría también, pero es otra forma. 00:43:59
Entonces, podemos ir creando varias 00:44:20
Y es importante que hay que darles un nombre 00:44:23
Por ejemplo 00:44:25
Y para ir haciendo ya algo concreto 00:44:28
Voy a ir borrando 00:44:31
Se pueden poner todas las que queramos 00:44:32
Y del mismo tipo se pueden poner varias 00:44:33
Cada una tendrá un nombre 00:44:36
Y iremos diciéndole valores 00:44:38
Entonces 00:44:40
Vamos a este robot 00:44:43
Para ir accediendo a estos parámetros 00:44:46
importante, hay que primero acceder a 00:44:49
hay que crear una variable de tipo animator 00:44:54
¿vale? recordad, esto nunca es mal momento para 00:44:59
volver a decirlo, que estos son componentes y cada componente ya os he dicho 00:45:03
que es fragmentos de códigos que se han encapsulado y alguien lo ha programado 00:45:07
para que se vean estos campos, a los que podemos acceder normalmente, casi siempre 00:45:11
poniendo este nombre, entonces si yo quiero acceder a 00:45:15
las opciones del animator 00:45:18
¿vale? del animator 00:45:21
y al animator controller, lo primero que habrá 00:45:23
que hacer es capturar ese panel 00:45:25
animator, entonces por ejemplo 00:45:27
voy a hacer, normalmente 00:45:28
al animator se le suele llamar 00:45:30
anim, ya he creado una caja 00:45:33
que va a referenciar a la clase 00:45:34
¿vale? si me pongo aquí a la clase 00:45:37
de Unity Engine Animator 00:45:38
¿vale? y como siempre, lo primero 00:45:41
normalmente, ¿no? digo, que hay que 00:45:43
hacer es, hacer este GetComponent 00:45:45
en animator, etc. ¿Vale? Incluso si ya le doy 00:45:47
al tabulador, con la sugerencia 00:45:49
que tiene, aquí ya he capturado 00:45:51
que en esta variable llamada anim 00:45:53
pueda acceder a los 00:45:55
valores del animator. 00:45:57
¿Vale? Por eso cuando yo pongo anim, punto, 00:45:59
pues salen cosas como 00:46:01
esto de 00:46:02
getBull, setBull, 00:46:04
¿vale? 00:46:08
Quiero 00:46:13
alguno de los que salgan aquí. Fijaos, 00:46:13
esto de applyRootMotion, pues habrá una 00:46:15
de RootMotion. Pues yo ahora veo, 00:46:17
Mira, ApplyRootMotion. Y yo aquí ya podría acceder a ese parámetro. Para acceder precisamente a los parámetros, a estos parámetros, en el tema, voy a abrir un segundo el tema. 00:46:19
lo tengo, no, dame un segundo 00:46:32
que lo abro aquí, en una de las secciones del tema os pongo 00:46:36
varios de los métodos que se pueden usar 00:46:40
a ver, pa pa pa, directriz 00:46:44
animation, vale, ya estoy llegando 00:46:48
lanzar transiciones 00:46:50
parámetros, vale, que son 00:46:54
Esto es de aquí, ¿no? Anim, ¿vale? Y por eso lo explicas, es lo mismo que tenemos aquí. Podemos incluso acceder al animator de otro objeto si lo arrastramos por un serialize field, ¿vale? Pero eso, existen set trigger, set pull, set float, set, ¿cuál sería la otra? set int, ¿vale? 00:46:59
Y entonces, con esto, lo que podemos ir haciendo es establecer el valor del parámetro. Entonces, ¿qué quiere decir? Imaginaos que yo quiero fijar o decir, y esto lo voy a llamar, que va a ser el trigger que sirve para el salto, ¿vale? 00:47:18
Y ojo, este nombre va a ser un string que luego vamos a usar, ¿vale? Pues si yo lo que quiero es que cuando, if, y vamos a hacer uno, if input get key down, ¿vale? Cuando pulse una tecla, que en este caso va a ser la barra espaciadora, vamos, space, ¿vale? 00:47:36
Que cuando eso ocurra, yo voy a decirle que este disparador efectivamente se ejecute, ¿vale? Set, en este caso es trigger, ¿vale? Pero igual que había cuatro tipos de parámetro, aquí son todos iguales. Solo hay que cambiar el nombre del tipo de parámetro que es. 00:47:57
estará el setTrigger, estará el setBull 00:48:16
estará el setInt 00:48:19
vale, mira, si yo empiezo a escribir 00:48:21
aquí, pues me empieza 00:48:22
a ayudar, setInteger 00:48:25
vale, pero en este caso lo que queremos es 00:48:26
un setTrigger, de todos modos 00:48:29
a ver, una cosa, setBull 00:48:31
setFlow 00:48:32
setInteger, sí, vale, pues 00:48:33
setTrigger, y aquí lo tenemos 00:48:36
cuando nos ponemos encima dice 00:48:39
fija el valor del trigger 00:48:40
vale, pues vale 00:48:43
cuando nos ponemos aquí 00:48:44
si yo le digo que 00:48:46
al darle a la barra espaciadora el trigger que lance 00:48:48
sea el que yo he llamado salto 00:48:50
ya deja de haber estos 00:48:52
fallitos y vamos a ver 00:48:53
ya directamente sin hacer nada más 00:48:57
que yo cuando arranque el juego 00:48:59
y esté en la 00:49:00
pestaña game 00:49:02
para que se reaccione 00:49:03
yo cuando le dé a la barra espaciadora, fijaos 00:49:06
y se puede ir viendo en vivo 00:49:08
y ojo también, para que se vean 00:49:09
estas barras en reproducción y el animator 00:49:12
etcétera, tenéis que tener seleccionado el objeto 00:49:14
Que pueda haber varios objetos con Animator 00:49:16
No solo por reproducir el juego, aquí se va a ver 00:49:18
Seleccionar ese objeto 00:49:20
Cuando yo le dé a la barra espaciadora 00:49:21
Fijaos aquí, le doy 00:49:24
Y se ha lanzado 00:49:25
Como no se está ejecutando nada, se queda ahí 00:49:27
Pero en cuanto se ejecutara lo que nos interesa 00:49:29
Pues volvería a su estado original 00:49:31
Fijaos que yo 00:49:35
Gracias al código, ahora he cambiado 00:49:36
Algo, un parámetro 00:49:37
Y hay un parámetro aquí, que lo bueno 00:49:39
Es que como parámetro que hemos dicho 00:49:42
Se puede meter en condiciones 00:49:43
cuando yo ahora le di, bueno voy a borrar 00:49:45
el otro que había puesto que estaba vacío 00:49:47
cuando le di añadir una condición 00:49:49
ahora mismo solo aparece salto, no hay más 00:49:51
si hubiera más podría seleccionar más 00:49:53
y fijaos que en un trigger no hay nada más 00:49:55
es, le has dado a que 00:49:57
se ejecute, vale 00:49:59
pues fijaos ahora, si yo veo 00:50:01
aquí el muñeco que está 00:50:03
perpetuo 00:50:07
perpetua repetición 00:50:08
del idle y en cuanto yo 00:50:12
de A la barra espaciadora 00:50:13
fijaos como va a pasar al otro porque se cumple 00:50:15
la condición 00:50:17
¿vale? y ha vuelto al otro 00:50:18
porque como aquí no hay condición 00:50:21
en cuanto se ejecuta una vez, vuelve 00:50:23
al anterior y además no está en bucle el salto 00:50:25
¿vale? 00:50:27
con esto lo que podemos ir haciendo es 00:50:29
ir, pues eso 00:50:31
jugando con los parámetros 00:50:33
que nos interesa 00:50:35
la gracia de esto es que el set trigger 00:50:36
es el más básico, pero si por ejemplo 00:50:39
yo le digo 00:50:41
que esto del salto 00:50:43
se dé cuando 00:50:45
salto, claro, aquí habría que poner 00:50:46
un parámetro, voy a decirle que ahora 00:50:49
haya un parámetro que sea de tipo 00:50:51
float, que va a ser 00:50:53
salto f por float 00:50:55
¿vale? y por defecto 00:50:57
aparece cero, aquí podemos cambiar el valor 00:50:59
pero bueno, lo que queremos es cambiar este valor 00:51:01
por código realmente 00:51:03
entonces, cuando nos 00:51:04
ponemos aquí yo puedo decir que el valor 00:51:07
¿vale? y bueno, la diferencia con el 00:51:09
trigger si empezamos a escribir aquí el set float y nos ponemos aquí encima vais 00:51:11
a ver que aquí pide dos valores y de hecho hay tres sobrecargas podríamos 00:51:16
mirar más pero por defecto lo que nos pide un set float es 00:51:20
el nombre de ese parámetro y el valor que pasamos a ese parámetro y lo podemos 00:51:24
ir actualizando en todo momento vale por tanto si yo por ejemplo en este set float 00:51:30
yo le digo que este a lo que va a tocar es a el parámetro tipo float que se 00:51:35
llamado salto F, ¿vale? Y luego por coma, el segundo argumento es un valor, ¿vale? 00:51:41
Si yo por defecto le digo que ponga 10, ¿vale? Y guardo, ahora mismo estoy diciendo 00:51:48
cuando pulse la barra espaciadora me pones en este parámetro de tipo float 00:51:54
llamado salto F un valor de 10, ¿vale? Pues entonces yo ejecuto y vais a ver 00:51:58
que cuando le dé a la barra espaciadora se pone 10. Ahora mismo no tiene más repercusión 00:52:06
Más allá de que ponga aquí 10, porque no hay ninguna condición que pida eso. 00:52:10
Pero para empezar ya podemos incorporar la otra condición, ¿vale? 00:52:16
Salto F y aquí sí que ya podemos decir que el valor sea mayor o menor a un número. 00:52:20
O, bueno, pues que, por ejemplo, y podemos ir incorporando varios, ¿vale? 00:52:26
Que salto F, que sea mayor, que haya varios floats aquí, por ejemplo, con distintos valores. 00:52:35
Y este sea vertical. Y entonces, vertical podemos decir que si salto F es mayor de 0 y vertical menor de 10, yo que sé, por decir cosas, se cumple esta condición y entonces se pasa de un elemento a otro. 00:52:40
Entonces, esta es la base para ir generando estas transiciones 00:52:56
Como os he dicho, ahora voy al que ya está hecho para ir más rápido 00:53:05
Pero necesito que me digáis que la idea más o menos está clara de funcionamiento 00:53:07
Luego, evidentemente, seguir pensando qué distintas animaciones hay 00:53:14
Cómo se tienen que pasar entre unas a otras 00:53:18
Si a lo mejor nos interesa ir de esta a esta y luego a la otra que os he dicho o no 00:53:20
¿vale? y luego además 00:53:25
bueno, hay dos otros elementos 00:53:27
que os quiero indicar ahora 00:53:29
que es, que estos claro 00:53:31
van siguiendo un orden lógico, empieza según se entra 00:53:33
al nivel, se va a este y según 00:53:35
se cumplen condiciones va de uno a otro 00:53:37
siguiendo las flechas ¿vale? porque 00:53:39
es importante, si yo aquí 00:53:41
añado otra animación 00:53:42
bueno, esa justo 00:53:45
bueno, da igual, esta y esta 00:53:47
¿vale? si yo pongo 00:53:49
esto y pongo 00:53:51
esto, ¿vale? Para que veáis 00:53:53
tal. Por mucho que parezca 00:53:55
que aquí está unido y va de 00:53:57
AIDELTUTORIA a 00:53:59
ROBOTWALK, ¿vale? Estoy poniendo 00:54:01
cualquiera de ejemplo. 00:54:03
Para que se llegue de esta a esta, tal y como está ahora 00:54:05
configurado, tendría que ir pasando por todas estas 00:54:07
y cumpliéndose todas las condiciones, ¿vale? 00:54:09
Que en ocasiones también es 00:54:11
poner otra condición aquí, otra transición, 00:54:12
perdonad, y si se da esta condición 00:54:15
hará este paso 00:54:17
y si se cumple esta, se hará este otro. 00:54:18
¿Vale? Y luego hay otra 00:54:22
cosa que es, imaginaos que estáis en un juego y 00:54:23
queréis que cuando orde una bala 00:54:25
pues el personaje se muera 00:54:27
haga la animación de morir, claro 00:54:29
no podemos ir previendo que 00:54:31
desde cualquiera de las situaciones de movimiento 00:54:33
que tenga el juego se muera 00:54:35
entonces aquí hay otro nodo 00:54:37
especial, este de exit 00:54:39
la verdad es que no, bueno es por si 00:54:41
se quiere salir del controller, si no me equivoco 00:54:43
la verdad es que no lo sé 00:54:44
muy bien como decir 00:54:46
la funcionalidad no la tengo muy clara 00:54:48
pero sí que 00:54:51
Está este de, desde cualquier estado puedo saltar al que una con este any state, ¿vale? 00:54:53
Entonces, aunque estemos aquí con esta sucesión de nodos, ¿vale? 00:54:58
Incluso se puede poner más de uno, ¿eh? 00:55:04
Se pueden poner dos independientes. 00:55:06
Si en algún momento hay una condición que se cumple, ¿vale? 00:55:09
Da igual en la que estemos de la secuencia lógica que hemos ido estableciendo aquí, ¿vale? 00:55:13
Que si se da esta condición va a saltar de esa a la que pongamos aquí, por ejemplo para muerte, da igual que estemos saltando, que estemos andando, que estemos bailando, yo que sé, lo que sea, que si se cumple la condición que esté establecida de any state se ejecuta, ¿vale? Eso es importante porque a veces si no se hacen unos líos increíbles cuando se puede recurrir a este nodo, ¿vale? 00:55:18
Y otro parámetro importante es este del hash exit time, que por defecto viene marcado, que significa que a veces podemos tener animaciones, por poder, se puede de 20 segundos, ¿vale? Pero a lo mejor en mitad de esa animación de ir andando, porque es muy larga, el paso es muy largo, yo qué sé, dura mucho, en cuanto yo le dé a la barra espaciadora, quiero que salte, no que acabe toda la animación, que es lo que hace por defecto con esto de hash exit time, ¿vale? 00:55:40
Hace toda la animación y luego ya pasa a la siguiente 00:56:08
Cuando se pasa a la siguiente, claro 00:56:11
Si no, es un bucle, recordad 00:56:13
Si yo desactivo esto 00:56:14
En cuanto, da igual en qué momento 00:56:16
De la animación me encuentre, va a hacer 00:56:18
Si se cumple la condición, va a pasar a la siguiente 00:56:20
¿Vale? Ahora mismo esta es corta 00:56:22
Pero en cuanto yo pulse 00:56:24
Bueno, ahora es que justo he hecho esto de la prueba 00:56:26
De que ponga 10, pero si tuviera lo del trigger 00:56:28
Lo pongo en un segundo 00:56:31
¿Vale? Set trigger 00:56:31
Set trigger 00:56:35
Salto, y este no tiene 00:56:37
segundo parámetro, guardo 00:56:39
y ahora mismo la condición es 00:56:41
vale, ojo, estoy haciéndolo 00:56:44
todo también para que veáis la secuencia 00:56:45
de lo que hay que ir comprobando y ahora con salto 00:56:47
se pasaría, se cumpliría 00:56:50
esta condición, si yo además 00:56:54
quiero, para que lo veamos mejor 00:56:55
quiero alargar esta animación 00:56:57
le doy doble clic a la animación 00:56:59
al pulsar el estado 00:57:01
y le doy al objeto y voy a decir 00:57:03
mira, pues mientras está en 00:57:06
idle voy a hacer que esta animación dure mucho más la voy a alargar vale pues ahora dura 00:57:07
del orden de dos minutos parece vale entonces ahora cuando yo reproduzco dos minutos dos 00:57:14
segundos pero más larga ahora en cuanto se cumpliera esta condición de salto que la voy 00:57:24
a cumplir en cuanto de la barra espaciadora me voy a esperar que está aquí al principio le doy 00:57:30
y veis que ha pasado vale si esta transición tuviera has exit time vale lo vuelvo a poner 00:57:33
aunque yo le dé al salto hasta que no acabe vale bueno lo vuelvo a poner que nos ha visto bien 00:57:39
también dependiendo de cuánto de al final y al principio puede hacerlo vale pero si le doy veis 00:57:47
que le dado y hasta que no vale bueno no lo veis pero le voy a dar según está al comienzo de la 00:57:51
barra vale se hace un bucle y le doy aunque le haya dado hasta que no está acabando vale y se 00:57:55
cumple este periodo de transición para que haya una pequeña transición, no pasa al otro. Eso también 00:58:03
es importante. Entonces, a menos que me digáis que hay algo que queráis que veamos de esto de ahora 00:58:08
mismo, voy a desactivar este robot y activo el otro. Lo tengo aquí. ¿Qué tal? Hasta aquí. Más o menos es lo que pone 00:58:14
en el tema, creo. Tampoco lo que está en el vídeo de Álvaro. Vale, pues vamos a ello. Aquí tengo 00:58:26
varios estados como podéis ver a ver cómo podemos hacer para que lo veáis lo mejor posible 00:58:33
vale que va son las distintas animaciones que se han ido estableciendo incluidas algunas que 00:58:40
he sacado de otras bueno ahora lo vamos viendo veis que algunas las tengo por aquí de prueba 00:58:48
vale estando como no están conectadas a ninguna de las operaciones ni de ni stay ni de entry pues 00:58:53
están ahí que las tengo en stand by vale pero tenemos todas estas cuando empieza tiene un 00:58:58
idle no y qué es lo que he hecho fijaos la cantidad de parámetros que tengo en este en 00:59:03
este animator controller tengo un trigger que desencadena cuando detecte lo que sea que una 00:59:09
bala lo toca que se muere pues se lanza por un trigger vale y fijaos que desde este en state 00:59:17
La condición que hay es isDead, solo es esa, como hemos hecho antes con el salto. Hay una variable de tipo, entiendo que será float, esto es algo que nunca sé por qué no lo hacen, de poner aquí si es float o int para tenerlo claro. 00:59:22
Pero bueno, lo normal, aunque aquí están los íntegros, es usar float normalmente. Vale, pues aquí tenemos un float que se llama desplazamiento h, ¿vale? Que ahora veremos, lo voy a unir en todo momento con el axis horizontal de mi mando, del teclado o de lo que sea. 00:59:40
Y en todo momento va a estar definiendo un valor. Si el valor es mayor que 0.1, significa que hay movimiento, que yo quiero que se mueva el personaje. Por tanto, pasará del idle, por ejemplo, aquí al de caminado. 00:59:56
¿vale? que yo quiero 01:00:10
que vaya 01:00:13
a ver, al sprint 01:00:14
pues primero tiene que pasar 01:00:17
es decir, no quiero que pase directamente 01:00:19
de Robot Idle 01:00:21
al sprint de correr rápido 01:00:22
entonces tiene que pasar por el walk, igual el paso 01:00:24
es inmediato, es súper rápido 01:00:27
pero si aquí se cumple esta 01:00:29
condición de que el run 01:00:30
está activo, ¿vale? porque es una 01:00:32
booleana, entonces pasará 01:00:35
a Robot Sprint 01:00:37
hay otra para agacharse 01:00:38
que es otra booleana, otra que detecta 01:00:41
en todo momento si está o no está posada 01:00:43
en el suelo, por ejemplo para permitir que haya 01:00:45
un salto, si no está posada en el suelo 01:00:47
no va a cumplir 01:00:49
la condición de que se pueda impulsar para hacer un salto 01:00:51
a menos que quisiéramos hacer dobles 01:00:53
saltos y hubiera que complicar 01:00:55
un poquito 01:00:57
las operaciones 01:00:57
entonces yo si ahora mismo me meto 01:01:00
en este robot y en su código 01:01:03
que lo tengo por acá 01:01:04
vale 01:01:05
Pues vamos a ir rápido viendo un poco la lógica. Son códigos que hay que sentarse a pensar todo lo que se va necesitando, pero dos consejos previos. Por un lado, recordad que podemos ir agrupando cada tipo de acción en un método que creemos nosotros. 01:01:08
Este girar, este flip, yo he ido generando uno por cada operación que quiero que haga. Y más o menos deberían ir conectados a los distintos estados de animación. Uno que sirva para correr. 01:01:26
Y aquí está todo el rato el update, fotograma tras fotograma, viendo a ver si lo aplica o no. Habrá algunos que quiero que se apliquen en el update, que son los más relacionados con cambio de posición en el sitio, que no dependen de físicas. 01:01:42
Por ejemplo, agacharse. El personaje no se está agachando como tal, es que la animación va a ser la de agachar, recordad lo que hemos dicho. Y aparte también se cambiarán las dimensiones del boss collider, por ejemplo. Entonces ahí sí que no me importa que la detección se haga, la ejecución se haga en el update en cuanto se pueda, lo más rápido posible. 01:02:01
Y luego hay otras que tengo aquí en el Fixed Update, que son las más relacionadas con físicas, que es mover en horizontal y el mover en vertical, que es saltar. Entonces, todo ello, como ya hemos hecho en alguna otra ocasión, en base, por ejemplo, a este GetAxis que estamos capturando en desplazamiento X. 01:02:19
Hemos creado una variable de tipo float global al comienzo y con esto podremos ir también estableciendo valores, cambiando los valores de este float. 01:02:38
Entonces, vamos a ver poco a poco cómo va esto así de manera rápida. 01:02:56
lo dicho, esto 01:03:01
lo veis aquí y ya os da una pista 01:03:05
vosotros intentad hacerlo 01:03:07
dentro de la medida posible 01:03:09
viendo lo mínimo posible este código 01:03:11
que os pongo aquí, pero 01:03:13
esto ya da una idea 01:03:14
que esto además cuando lo hice 01:03:16
o cuando se hizo 01:03:19
no salió de primera, se van añadiendo más variables 01:03:20
globales a medida que se van necesitando 01:03:23
pero es importante tener 01:03:25
por ejemplo una variable alive 01:03:27
o vivo 01:03:28
Para ir determinando 01:03:30
Si el juego ha acabado 01:03:33
Y recarga el nivel, por ejemplo 01:03:34
Y lanza la animación de muerte o vida 01:03:35
¿Vale? Vamos, más bien la de muerte 01:03:38
Porque la de vida es cuando recarga 01:03:40
Ya debería estar 01:03:42
Esta booleana, que vamos a conectar mucho con el parámetro 01:03:43
De East Grounded para detectar que están en el suelo 01:03:46
Este estoy saltando, que son booleanas 01:03:48
Y veis que básicamente 01:03:50
Hay muchas que estas booleanas 01:03:51
Pues tienen que ver con agachado 01:03:54
Pues es esta misma de crouch 01:03:56
Pero ojo, no es lo mismo la variable agachado que el parámetro crouch o agachado, ¿vale? 01:03:57
Entonces aquí se van, pues como hemos venido haciendo, diciendo la fuerza de salto es 60 para multiplicarlo por el salto 01:04:03
El float que hemos creado para el desplazamiento que recoge el axis 01:04:10
La velocidad máxima por si queremos limitarla en algún momento o marcarla si damos a cierta tecla que coja velocidad máxima, ¿vale? 01:04:14
Pues aquí son los ingredientes que luego vamos a ir usando en el resto de situaciones 01:04:23
Al arrancar el juego, como suele pasar, toda variable que se base en un componente 01:04:28
Como cambiar el Box Collider, ¿veis? 01:04:34
Box Collider 2D 01:04:37
Pues con esto vamos a acceder al componente Box Collider que tenemos aplicado en este personaje 01:04:38
El Animator, como hemos hecho, también lo hemos capturado 01:04:45
Y ya las condiciones por defecto son que por defecto el personaje tiene que permanecer vivo. 01:04:50
Le ponemos una velocidad máxima, que podemos usar más tarde. 01:04:57
Por defecto también ponemos que no es grounded, porque básicamente el personaje no está tocando el suelo. 01:05:00
Lo ponemos así un poco elevado y cuando baje y toque un collider con otro collider, 01:05:07
ya sabemos usar on collision enter, on collision tal, el on trigger enter, 01:05:13
pues podemos cambiar que ese isGrounded, que por defecto es falso, pasa a ser verdadero, ¿no? Por ejemplo, si yo voy más abajo, en algún momento, aquí he dicho que cuando haya un collisionEnter, ¿vale? 01:05:19
con, en este caso, el concepto de layer y de tag que tenemos aquí. 01:05:35
También son importantes ya ir poniendo en juego porque el personaje puede ir tocando un tipo de suelo, 01:05:43
puede ir tocando otro y con estos layers y tags, como pone en el tema, podemos ir definiendo 01:05:47
que se activen o no se activen cosas según las condiciones. 01:05:52
Por ejemplo, aquí el personaje va a poner que isGrounded, según este código que tenemos aquí, 01:05:55
si el objeto 01:06:00
con el que colisiona 01:06:03
creo que ya os comenté que 01:06:04
este parámetro que tenemos 01:06:07
después de los onCollisionEnter o los onTriggerEnter 01:06:09
que también veis que son 01:06:12
tipo 2D 01:06:13
también tienen sus propios 01:06:15
sus propias versiones 01:06:17
ese objeto con el que colisiona 01:06:21
está en la layer 7, es decir 01:06:23
si por ejemplo el suelo 01:06:25
está en la layer 7 01:06:26
en ese caso sí se da la condición, ¿vale? Entonces, si este personaje, ¿vale? Porque estoy en el player manager aplicado al robot, si este objeto choca con un objeto que está en la layer 7, que yo he puesto que se llame suelo, pues is grounded de pronto is true, ¿vale? Con lo que significa que todas las condiciones de salto, por ejemplo, ahora vuelvo a donde estábamos, de salto, va a pedir que esté grounded. 01:06:29
Si esta no se cumple, pues no va a saltar, no se va a aplicar ni la fuerza, ni se va a desencadenar la animación, ese trigger para el salto. ¿Vale? Veis que aquí ya se van combinando muchas condiciones, porque si está mirando hacia un lado y le doy a la tecla control y además venía de la animación de la que fuera, entonces ya sí puedo cambiar a la otra, pero si no, a veces no me va a interesar. 01:06:55
¿Vale? Fijaos que ya en estos paréntesis cada vez hay más concatenaciones de, con estos síes, recordad, o con los de O, ¿vale? Que eran las dos, estas dos líneas verticales, ¿vale? Pero bueno, vamos con los is, se van estableciendo las condiciones. 01:07:23
entonces, vamos aquí 01:07:41
donde estábamos 01:07:44
aquí, pues 01:07:45
no solo es que esté grounded, sino que 01:07:49
además, dentro de los parámetros 01:07:51
el de is grounded va a estar en true 01:07:54
por eso vais a ver que según se lanza el juego 01:07:55
y de hecho voy a subir un poco más 01:07:58
al personaje 01:07:59
está en false 01:08:00
y cuando toque el suelo se va a poner 01:08:03
vais a ver en vivo que se va a poner 01:08:05
como true 01:08:08
ala, ha tocado el suelo y mira, ahí está 01:08:08
¿sí? 01:08:11
Entonces, aquí en vivo podemos ir viendo que las condiciones se cumplen o no. Incluso si nos interesara un momento, podemos aquí marcarlas o no marcarlas, ¿vale? Para hacer pruebas. Yo, por ejemplo, aquí si yo pongo 10, ¿vale? A ver, lo que pasa es que en todo momento me estará recalculando por otro lado que tiene que poner 0, ¿vale? 01:08:13
Pero se podría incluso ir testeando, igual que hacíamos en tiempo de ejecución aquí de ir cambiando los valores, ¿vale? 01:08:31
Se pueden ir aquí cambiando también los valores de los parámetros. 01:08:38
Pero eso, ahora mismo tenemos aquí que isGrounded es true, por eso se ha puesto como marcado. 01:08:43
Que la booleana de estoy saltando es falsa, porque todavía no estoy saltando. 01:08:51
Cuando le dé a saltar, pues a mí me puede interesar en algún momento crear una booleana, ¿no? 01:08:54
Pero este en collision enter, veis que hay una condición de si la otra capa con la que ha colisionado es de la layer 7. Pero a lo mejor si yo quiero que la colisión se haga con, por ejemplo, esta que tiene tag plataforma 1. 01:08:58
Si yo voy aquí al juego a estas plataformas que tengo móviles, fijaos que si es Layer 7, que lo es, va a permitir que el Is Grounded se detecte, se active, etc. para poder saltar desde esa plataforma. 01:09:17
Y luego, aparte, hay otra condición que he puesto aquí, que se aplicará solo si el suelo tiene este tag de plataforma móvil 1, ¿vale? Que las blancas, por ejemplo, fijaos que no lo tiene, pero esta sí, cuando caiga, cuando esté colisionando con una de este tipo, os lo pone el tema, para que el personaje se mueva con esa plataforma, que no está animada por física, sino que está animada con animación. 01:09:33
Eso también quiero que lo veamos ahora, ¿vale? Pues que lo adopte como padre y entonces, al ser, digamos, el robot hijo en la jerarquía de esa plataforma, se va a mover con esa plataforma hasta que saltemos o salgamos de esa colisión, ¿vale? 01:09:59
Que por eso aquí hay un onCollisionExit que hace las operaciones contrarias, básicamente. Tanto la condición de salto la revierte como la de que deje de ser padre, bueno, mejor dicho, que deje de ser hijo de esa plataforma. 01:10:15
Por eso si os fijáis, por ejemplo, cuando yo, fijaos en la jerarquía del robot, cuando el robot pise la plataforma, una plataforma como esta, que sí que tiene ese tag, cuando lo pise vais a ver que la jerarquía se ha puesto como hija de una plataforma. 01:10:33
A ver, que le van a matar enseguida, pero estaba por ahí. A ver, vuelvo a hacerlo. ¿Vale? Perdonad que es que esta plataforma está aquí. Vale, pues se va a hacer hija de esta plataforma. Entonces yo ando y cuando me poso en ella, fijaos que se mete aquí como hija y cuando salto, vuelve el robot a estar fuera. Se ha puesto aquí abajo porque no se ha colocado igual, pero vuelve a estar fuera. ¿Vale? 01:11:00
Entonces con eso, por ejemplo, podemos ir adoptando estos comportamientos de, pues eso, ahora ha desaparecido y vuelve a estar de hija de la plataforma. Salto y deja de estar de hija de la plataforma, ¿vale? 01:11:27
Bueno, esto me sirve para que sepáis lo de los tags y los layers que existen y se pueden usar, que los onCollision y los onTrigger también tienen su versión 2D, ¿vale? Y también el tipo de variable que se usa. 01:11:40
Y otra cosa importante del panel animation. A diferencia del personaje que se va a ir animando en base a los distintos fotogramas que hemos incluido desde la hoja de sprites, que es lo que hemos hecho hasta ahora, 01:11:53
también las animaciones os he dicho que pueden ser 01:12:14
de tipo kinemático 01:12:18
y cuando digo que es de tipo kinemático 01:12:19
es que si yo me meto en una 01:12:21
de estas plataformas y miro 01:12:24
su animator controller 01:12:25
solo tiene un estado 01:12:27
que es, si me meto en la animación 01:12:28
es que yo he cogido esa 01:12:31
plataforma, me he metido en el 01:12:33
panel de animation 01:12:35
y le he dicho, quiero crear 01:12:36
una animación para 01:12:39
esa plataforma 01:12:41
Por ejemplo, selecciono esa plataforma y veis que aquí está. 01:12:43
Y aquí no hay ningún tipo de sprite. 01:12:47
Aquí lo que hay es que podemos ir añadiendo propiedades de los distintos componentes y animarlos en el tiempo. 01:12:51
La posición, la rotación, la escala. 01:12:57
Y yo aquí lo que he hecho es la posición en X, cambiarla de izquierda a derecha y hago un bucle. 01:12:59
El primer fotograma y el último son el mismo. 01:13:06
y veis, voy a ampliar aquí, que básicamente lo que he conseguido es que poniendo esta animación en bucle, 01:13:08
además, si la busco por ahí, está con el loop activado, he hecho que esta plataforma esté de izquierda a derecha todo el rato. 01:13:16
Este movimiento es kinemático, es decir, no es en base a físicas, es porque estamos cambiando, 01:13:25
y lo podéis ver aquí claramente, estamos cambiando la posición en el transform. 01:13:31
Por eso hacemos lo de que cuando el personaje pise esa plataforma se mueva con la plataforma, porque no se está moviendo por físicas y no hay nada arrastrando otra cosa. Hay que hacerle hijo para que se asocien sus valores de transform, que los herede de su padre. Por eso hay que hacer esa operación. 01:13:34
Si esta plataforma la moviéramos, también se podría, mediante velocity sería más complejo, se moviera primero hacia la derecha, frenara y luego otra fuerza hacia la izquierda y que no tenga gravedad y no se caiga, que se mantenga fija siempre en el mismo eje Y, en la posición de Y, ahí sí que habría una cierta, no completa, una cierta inencia del personaje que se vería arrastrado. 01:13:54
Pero es verdad que sería cierta porque tampoco tendría por qué estar completamente anclado. Por eso, dependiendo de si va por físicas o va por kinemática, hay que hacer estas operaciones. 01:14:16
Pero que las animaciones, igual que las metemos aquí, también pueden ser animaciones que sí se mueven, por ejemplo, en el espacio o que rotan. Voy a hacer una cosa un poco así extraña, que es, yo que sé, voy a decirle que vaya rotando también. 01:14:30
y yo le digo, vale, aquí y que cuando esté en este punto 01:14:48
pues que rote en Y 01:14:51
despliego aquí y le digo 01:14:53
quiero que esto rote en Y 01:14:57
pues yo que sé, bueno, en Z mejor dicho 01:15:00
que rote hasta aquí, ¿vale? y ahí he añadido un fotograma 01:15:03
¿vale? pues ahora cuando 01:15:07
reproduzcamos el juego 01:15:09
como esa animación la he cambiado, vais a ver que tiene esa interpolación 01:15:10
Ahora el juego es bastante más complicado 01:15:16
Pero eso, que sepáis que las animaciones también se pueden 01:15:18
Se pueden 01:15:20
Realizar en base a 01:15:22
Animar parámetros, incluso se puede animar 01:15:24
Que el boss collider cambie de 01:15:27
Posición o que el sprite 01:15:29
El color vaya siendo de uno u otro 01:15:31
¿Vale? Todas esas animaciones se guardan 01:15:33
En clips de animación y luego 01:15:35
En el animator controller 01:15:37
Aquí solo hay uno porque queremos que este se haga en bucle 01:15:39
Bueno, pues podemos ir también 01:15:41
Pasando de uno a otro 01:15:42
¿Vale? 01:15:44
Y luego, simplemente para que lo sepáis, si marcáis este botoncito rojo de auto keyframing, si lo activamos en rojo, todo lo que vayamos cambiando, que antes había que ir aquí moviendo los parámetros y creando el keyframe, en cuanto se cambie un valor, veis que va a ir añadiendo los fotogramas según haga los cambios. 01:15:46
Esto puede ser muy cómodo o muy peligroso. Entonces ahora vais a ver que he cambiado así cositas y cuando reproduzco el juego, cuando vea la animación, para empezar la escala, por ejemplo, que la tengo aquí, se hace grande, se queda grande y luego se vuelve a reproducir y se hace pequeña. 01:16:10
Por eso no es suave el paso de grande a pequeño, ¿vale? Pero bueno, esto es como una animación que hacéis en 3D o en otros casos, pues que sepáis que también se puede aplicar a objetos. 01:16:28
Y en el caso de las plataformas o de unos pinchos que salen o un enemigo que está botando todo el rato a lo mejor y no queremos que sea por física, pues se puede hacer con este tipo de animaciones, ¿vale? 01:16:40
Entonces, voy a explicar una cosa más, así rápida, y vamos a dudas concretas, y si no, sigo explicando, ¿vale? Pero quiero una siguiente cosa, que es básicamente el movimiento, ¿vale? Que es lo que me han dicho antes. Pues yo en todo momento sé que voy a estar calculando en esta variable, desplazamiento x, bueno, la que llaman así, con el que taxis el valor, fotograma, fotograma, ¿vale? Y esto va a ir del menos uno al uno, si recordamos, pasando por el cero. 01:16:51
A diferencia del salto, que es pulsar una tecla, nos interesa en el desplazamiento que sean positivos o negativos, ¿no? Entonces vamos a estar en todo momento, ¿vale? Y como sabemos que la animación horizontal lo vamos a hacer por físicas, por eso lo meto en el Fixed Update, si no podría estar en el Update. 01:17:21
Yo he creado este método que se llama mover. ¿Y qué he hecho en mover? Pues decirle que en vez de usar el Digibody, el AddForce, que es simplemente para añadir fuerzas en una dirección u otra, está el parámetro de Velocity, la propiedad de Velocity. 01:17:41
Y Velocity es como mover, digamos, de manera kinemática, pero ampliando las fuerzas. Es decir, es un movimiento inmediato, hacia izquierda, hacia derecha, según la Velocity. 01:18:08
Entonces, con esto, la velocidad de este objeto, de este RigidBody, lo podemos ir variando, por ejemplo, con este valor, que va a ir variando la dirección de ese movimiento físico según lo que vayamos pulsando en las teclas, en este axis. 01:18:20
y además tiene dos dimensiones, la de x que multiplicará ese desplazamiento que conseguimos con el joystick o las teclas 01:18:38
y lo multiplicamos por este más speed, como está en el fix update no hay que hacer un time delta time, 01:18:50
ya está ejecutándose en tiempos de físicas y en el eje y no queremos que haya ninguna variación. 01:18:55
Esto también lo vimos ya si no me equivoco el otro día con la bola, pero cuando ponemos que un valor de varias dimensiones 01:19:02
Que coja el de uno de los ejes 01:19:08
Y está bien puesto en su eje 01:19:10
Como esta es la coma del eje X 01:19:12
De la dimensión X del vector 01:19:14
Y este es el Y 01:19:16
Esto simplemente hereda el movimiento que sea 01:19:17
No le decimos que sea cero 01:19:21
Y se estanca en cero la velocidad 01:19:23
Es que vaya heredando la vertical 01:19:24
Por ejemplo que apliquemos con el salto 01:19:26
Y con esto conseguimos que el personaje 01:19:29
Se mueva de izquierda a derecha 01:19:31
En horizontal 01:19:32
Más la gravedad que también le está aplicando el RigidBody 01:19:33
Y luego, por otro lado, ¿vale? Y aquí está el juego, aparte del movimiento en sí del GameObject, hay que hacer la apariencia de que este parámetro se está animando, ¿vale? 01:19:37
¿Y cómo lo vamos a conseguir? Tenemos aquí un parámetro, si voy a Robot, ¿vale? Tenemos un parámetro que hemos dicho de tipo Flash que se llama DesplazarH, ¿vale? 01:19:51
Con la D mayúscula, ojo, hay que ponerlo respetando las mayúsculas. 01:20:02
Entonces, lo que voy a decir es que este desplazamiento en H sea en función a lo que tengamos aquí, al valor de desplazamiento X. 01:20:09
Ahora os explico por qué pongo más código. 01:20:19
Pero básicamente es eso. Aquí estamos diciendo, y lo voy a hacer en vivo, 01:20:23
A medida que vamos pulsando la flecha izquierda y derecha, porque es donde está configurado ese axis de desplazamiento horizontal, vais a ir fijándoos que cambia este valor de 1, si paro 0, de 0 a 1. 01:20:26
Y no hay menos 1. ¿Por qué? Porque, como hemos dicho antes, las condiciones pueden ser mayor o menor. Y aquí lo que queremos es que haya algún tipo de desplazamiento. El lado, ahora vemos cómo lo definimos, el lado lo definimos después. 01:20:43
Pero lo que queremos es que haya, que se detecte que ese axis está siendo diferente a cero. Entonces, ¿qué se hace? Que con esta conversión a absoluto del valor, con esta operación de conviérteme este valor que aquí hay dentro a un valor absoluto, lo que hace es que no hay valor en negativo, siempre lo convierte a positivo. 01:20:58
Entonces da igual que estemos dando a un lado del axis o a otro, que aunque para la velocidad, el velocity, perdonad, físico, sí que está influyendo que vaya izquierda a derecha, ¿vale? Para decir que se active la animación de RobotWalk, ¿vale? De que está caminando, ahí solo con saber que está siendo diferente a cero, ¿vale? Pues ya nos valdría. 01:21:18
porque si contáramos con que cuando fuera menos uno 01:21:42
porque le demos a la izquierda también tuviera que hacerse esa condición 01:21:46
tendríamos que poner más condiciones y sería un poco jaleo 01:21:49
porque además una se puede contradecir con otra 01:21:52
y sería un poco complicado 01:21:55
es posible, y esto también me sirve para contaros una cosa 01:21:57
si creamos diferentes transiciones 01:22:02
dentro de una misma 01:22:04
es decir, que en un mismo flujo, en un mismo paso de un estado a otro 01:22:07
puedo ver que una condición sea, cuando desplazamiento H sea mayor de 0,1, o hacer una transición y si volvemos a hacer el mismo recorrido vais a ver que aquí se ponen tres triangulitos diciendo 01:22:11
aquí hay dos condiciones, que son estas, ¿vale? Hay dos posibles y cada una, según clicamos, ¿vale? Transiciones y hay dos y se pueden incluso incorporar más, ¿eh? 01:22:24
Tres. Y voy aquí y hay tres. Y cada uno, ¿vale? Son condiciones independientes. Yo aquí también, si no hiciera eso del valor absoluto, podría añadir otra y decirle desplazamiento h que sea menor a menos 0,1. Más, no, menos. ¿Vale? Y entonces así sí que se podría conseguir. 01:22:35
Porque si se cumple una, no se cumple la otra. Con que se cumpla una ya se daría esta transición. Son independientes. Por poder se podría, pero también servía un poco para contar esto que a veces nos puede interesar que los valores negativos no lo hayan. 01:22:55
El problema que hay, esta animación de Robot Walk, esta de aquí, vamos aquí al robot, es en una dirección solo. 01:23:11
Espera, que estoy aquí abriendo cosas y no tiene sentido. 01:23:23
Cuando empieza a caminar es hacia la derecha, que es hacia donde mira. 01:23:27
Ahora mismo, como os acabo de decir, aquí está, con esto sí estamos consiguiendo que se mueva el objeto izquierdo a derecha. 01:23:33
Y con esto estaríamos consiguiendo que el personaje hiciera el caminado. Pero hasta aquí solo tendríamos que el personaje estaría haciendo el caminado. Aunque vaya a la izquierda, lo haría de espaldas, porque estaría mirando a la derecha. 01:23:42
Por eso hay otro parámetro, que es este, vamos, otro método, que de tanto hablar a veces ya me fundo, que está, este sí, en todo momento, en cuanto se pueda, en cuanto detecte el axis que está cambiando la dirección, 01:23:56
Otro método que es el de girar, ¿vale? Que es independiente al de mover, aunque están unidos, pero bueno 01:24:21
Que es este que si dice, si el desplazamiento X es mayor a 0, es decir, estoy dando la tecla de hacia la derecha 01:24:26
Y no está ya mirando a la derecha, haz un flip 01:24:35
Y si lo contrario, si es menor a izquierda y no, es decir, si el desplazamiento es hacia la izquierda 01:24:38
Y si está mirando hacia la derecha, ¿vale? Estos son booleanas que yo voy cambiando en todo momento, ¿vale? 01:24:45
Hace un flip. ¿Y qué es un flip? Pues otro método que he creado que en cuanto se ejecute, es decir, en cuanto en realidad se esté cambiando de dirección, ¿vale? Que, y estas líneas creo que las tenéis en el enunciado, vamos, creo no, las tenéis en el enunciado, lo que hacemos es cambiar la escala. 01:24:51
Es decir, que el desplazamiento físico va hacia la derecha o hacia la izquierda, independientemente de la escala, son las físicas del mundo, ¿vale? La animación en principio se está haciendo con el personaje hacia la derecha, que es como están diseñados los fotogramas, pero lo que sí podemos hacer es cambiar la dirección hacia la que mira al invertir la escala, ¿vale? 01:25:10
Entonces vais a ver que cuando yo, voy a seleccionar aquí el robot, cuando yo voy a la izquierda va a cambiar, ¿vale? Hasta ahora solo he ido hacia la derecha y el flip no se ha ejecutado, pero cuando voy a la izquierda, fijaos que se ha puesto en menos uno y lo que ha hecho es girar la imagen. 01:25:33
No es girarla, es como agrandarla hacia el otro lado y se invierte. Entonces, con este flip, aunque el personaje, los sprites, siempre están ejecutándose hacia la derecha, como se invierte, está ejecutándose hacia la derecha, pero invertido. 01:25:50
¿Vale? Cuando paro, cuando paro, es decir, cuando dejo de pulsar el desplazamiento en h, cuando es menos de 0,1, ¿vale? Cuando es 0, básicamente, paso otra vez al idle. 01:26:05
¿Qué problema había con lo de hacer las condiciones más de una y que fueran en negativo? Que realmente desplazamiento en h menor a 0,1 sería ir hacia la izquierda si no hubiéramos hecho esto del absoluto. 01:26:17
Por eso lo hemos hecho. Hay otra forma más fácil, que tiene otros problemas, de hacer esta inversión, este flip, en vez de con el método de invertir la escala, que es este que os he dicho antes, que está en el propio SpriteRenderer. 01:26:28
Si yo me metiera en el SpriteRenderer, ¿vale? Que es el SpriteRenderer. Si yo pongo aquí otra variable que se llame SpriteRenderer, ¿vale? Y la capturo como componente, etc. De hecho, mira, lo voy a hacer. SpriteRenderer, lo voy a llamar SR. 01:26:46
y aquí hago 01:27:00
sr igual a 01:27:04
este no me sale automático 01:27:06
pero get component 01:27:08
en vez de boss collider 01:27:09
quiero que sea el sprite 01:27:12
sprite 01:27:14
renderer 01:27:15
debería salir y ahí está 01:27:17
si yo en algún momento 01:27:19
dijera en vez de hacer todo esto 01:27:21
bueno habría que decir 01:27:27
que invirtiera, que cada vez que está viendo uno de los lados, aparte de mirando derecha, pues diría sr.flip en i, porque queremos que se invierta en i, que sea el inverso. 01:27:30
Es decir, hasta aquí no, que lo invierta. Sería lo mismo que hemos hecho aquí. Que el que ya tuviera lo invierta. Y esto, por ejemplo, lo puedo dejar aquí comentado. Y ahora vais a ver que el resultado debería ser el mismo. 01:27:48
¿Qué es? Que ahora conseguimos... Bueno, no sé si he guardado... Sí, sí he guardado. Y cuando yo le dé a play, ahora estamos haciendo esta inversión, ¿vale? Es decir, el personaje se está moviendo de izquierda a derecha con el velocity, independientemente de hacia dónde mire lo que es el sprite. 01:28:05
El sprite pasa al otro estado y empieza a andar, pero con esto, uy, claro, no, se me ha ido la pinza, esto es en X, y creo que ya estaría, sí, no hemos puesto flip, sí, vale, pero nada, vuelvo a recargar, vale, y fijaos que ahora lo que cambia aquí es el flip en X, cuando voy a izquierda se activa esto, cuando voy a derecha, vale, también se podría así. 01:28:22
Es otra forma, pero la otra sí que es verdad que otras operaciones que impliquen que tenga que estar mirando hacia la izquierda, si se conectan con esa inversión del menos uno, que ahora es activado, si os fijáis, también se podría conseguir. 01:28:52
Bueno, esto lo digo para que veáis también para qué sirven los... voy a deshacer esto... ¡Epa! Un segundo... Vale, ahí está. ¿Vale? 01:29:06
Dudas hasta aquí. Bueno, si os fijáis ahora, lo que hay que ir pensando es cómo se van jugando las distintas transiciones. 01:29:19
Pues hay run, cuando run es true, que básicamente yo lo he asociado a pulsar el shift izquierdo mientras yo mantengo pulsado el shift izquierdo, no mientras mantengo pulsado con el script, pero sí que es verdad que cuando pulso la tecla, por eso es el down, run in is true y este run se pone en verdadero y cuando suelto ese shift izquierdo deja de serlo. 01:29:31
Entonces, ¿qué es lo que consigo? Que si ya estoy caminando y le doy al de correr, al botón que yo tengo como de correr, pues de pronto hace la animación de correr, aparte de que le doy más velocidad, ¿vale? Sí, a ver, yo le doy aquí y cuando le doy a shift y fijaos que va a cambiar, cuando le doy, se va a poner el tick, cuando le doy a shift pasa al sprint y aparte va más rápido, por eso da esas zancadas. 01:30:00
Entonces, aparte de darle al sprint, sí que en algún punto, en correr, es raro que no esté aquí, pero aparte de cambiar a que pase al estado, al nodo de run, porque se cumple la condición, isRunning es true. 01:30:23
Y esto en algún momento hará también que se mueva más rápido. 01:30:40
Imagino. 01:30:45
Is running. 01:30:49
Pues, a ver, igual no lo configure para que vaya más... 01:30:50
Sí. 01:30:54
Ah. 01:30:55
Is running, bla, bla, bla. 01:30:58
Vale. 01:31:00
Pues en algún punto lo habré puesto, que ahora mismo no caigo, pero... 01:31:02
Voy a la tecla... 01:31:07
Bueno, esto tendría que buscarlo. 01:31:08
Pero básicamente, si pulsamos las teclas Shift, corremos, 01:31:10
IsRunningTrue, pero claro, tiene que haber más sitios con IsRunning. 01:31:14
Ah, vale, sí. 01:31:20
Aquí lo que cambio es la... 01:31:23
Lo que cambio... 01:31:29
No sé en qué punto lo estaba haciendo, pero se podría hacer básicamente aquí. 01:31:36
Vaya, aunque ahora mismo no encuentre dónde lo puse. 01:31:43
perdón, aunque no lo puse 01:31:45
aquí se puede poner mientras pulso esto 01:31:50
maxSpeed por ejemplo 01:31:51
pues sería el doble 01:31:53
pondría maxSpeed 01:31:55
por 2 01:31:57
y se movería el doble 01:31:59
en cuanto que 01:32:01
esta variable es la que hace que tenga el desplazamiento 01:32:04
ahora mismo no sé dónde lo puse 01:32:06
pero bueno, sería así de rápido 01:32:08
y cuando se deje de pulsar la tecla 01:32:10
shift izquierda 01:32:11
pues Max Speed volvería a ser su valor habitual. 01:32:13
Vale, hasta aquí ¿qué tal? 01:32:18
Es decir, lo que es el sistema de plataformas y llegar hasta el final, 01:32:20
que es lo que no es opcional, tirando de estos hilos se llegaría. 01:32:24
Sé que hay que dar vueltas, luego por supuesto también hay cosas que ya hemos heredado, 01:32:29
como el reload, que es que cuando muera por lo que sea, pues se recarga la escena, 01:32:35
o que cuando un precipicio, que hay un non-trigger que recarga la escena también, cuando el personaje, lo tengo aquí, toca con este GameObjectPrecipicio que prepara aquí, que cubre toda la base inferior, 01:32:41
Pues este Boss Collider 01:33:05
Es un East Trigger 01:33:08
Que cuando le toque otro personaje 01:33:10
Que es, que he hecho que sea 01:33:11
El que tenga el Tag Player, que el robot tiene este Tag 01:33:13
Pues recargue el nivel 01:33:16
¿Por qué hay que poner esta condición, por ejemplo, aquí? 01:33:17
Porque, claro, yo por ejemplo 01:33:21
Aunque no se muevan más cosas 01:33:22
Sí que hay unas balas 01:33:24
¿Vale? 01:33:26
Que esto ya es opcional, por lo más complejo 01:33:28
Pero os animo a que lo intentéis 01:33:30
Que si sigue la trayectoria, llegarían a tocar 01:33:31
Fijaos 01:33:34
Aunque yo las desactivo en cierto momento 01:33:35
Llegaría a tocar ese 01:33:37
Ahí habría desencadenado 01:33:39
Que se reseteara 01:33:41
Se recargara el nivel 01:33:43
Por eso hay que filtrar 01:33:45
Las balas no tienen el layer 01:33:46
El tag de player, pero el robot 01:33:48
Si nos fijamos, sí, porque se lo he puesto yo 01:33:51
¿Vale? Entonces eso sirve para ir 01:33:53
Discriminando 01:33:55
Qué desencadena o qué influencia 01:33:56
En qué 01:33:59
Vale, contadme cosas, dudas 01:34:00
¿Cómo os quedáis? 01:34:05
¿Cómo se aumenta la dimensión de la escena del juego para que sea más grande? 01:34:07
La dimensión de... es decir, si te estoy entendiendo bien, cuando creáis un juego en 2D vais a ver que viene incorporada esta opción de 2D. 01:34:13
En realidad es la misma escena 3D que hemos tenido siempre, pero básicamente cuando jugamos en 2D, aunque podemos colocar cosas en profundidad, 01:34:24
lo que va a reaccionar 01:34:35
o va a interactuar una cosa con otra 01:34:38
en el mismo nivel de profundidad 01:34:40
la dimensión es 01:34:41
por defecto ya viene todo esto 01:34:43
de grande, es decir 01:34:46
lo que es la dimensión en sí no se cambia 01:34:47
entiendo que lo que te refieres 01:34:49
es la apariencia del fondo 01:34:52
porque aquí si no hubiera este fondo 01:34:53
básicamente si yo lo desactivara 01:34:56
y yo voy poniendo aquí plataformas 01:34:57
plataformas 01:34:59
el juego empezaría en donde 01:34:59
básicamente tengamos la cámara y se vea 01:35:03
¿vale? 01:35:06
y bueno, y todo para que tenga sentido de lo que se vea 01:35:07
si queremos 01:35:10
que el fondo pues sea más 01:35:12
grande o lo ponemos más grande 01:35:14
¿vale? o otra cosa importante 01:35:15
que ahora os explico es 01:35:18
si no es tileable hay que ir diseñando 01:35:19
es decir, si es un diseño en el que 01:35:21
digamos que no se van repitiendo edificios 01:35:23
y es un diseño muy grande, hay que hacer una imagen 01:35:25
muy grande y ponerla detrás como hemos hecho aquí 01:35:27
¿sí? no hace falta 01:35:29
tampoco que esté en otra dimensión del eje Z 01:35:31
como aquí, que aquí lo hago 01:35:33
porque a mí me resultaba más fácil 01:35:35
pero en los ejemplos que os dejo 01:35:37
de la Nubis 01:35:40
que en realidad está bajado 01:35:41
de la SetStore, en alguna modificación 01:35:43
pero está ahí 01:35:45
o bueno, pues 01:35:46
es decir, en el tema 01:35:49
pone que se puede jerarquizar la profundidad 01:35:51
con los Sorting Layers 01:35:54
del Sprite Renderer, por ejemplo 01:35:55
aquí 01:35:57
si voy a... 01:35:58
Claro, es que aquí lo he metido como si fuera 01:36:00
un 3D. Es otra forma. Se pueden 01:36:02
combinar objetos 3D con el 2D 01:36:04
realmente. Ahora estamos centrándonos en el 2D 01:36:06
pero se puede. De hecho, también 01:36:08
en el tema se habla de que están los juegos 01:36:10
de apariencia 2D 01:36:12
pero que en realidad son 3Ds. Pero cuando 01:36:14
estamos en un... 01:36:16
solo con assets, con sprite 2D 01:36:18
¿vale? Están estos 01:36:20
sorting layers, ¿vale? Para ir 01:36:21
agrupando en profundidades. 01:36:24
Esto en el Anubis se ve bien si os metéis en ese proyecto. 01:36:26
Entonces, bueno, si hay otra opción, y ya que lo ha sacado, pues os lo comento. 01:36:30
Si os fijáis en las plataformas, vuelvo al modo 2D, para estar en donde nos corresponde ahora. 01:36:35
Que yo tengo plataformas que en su Sprite Renderer vais a ver que son con este modo simple, 01:36:42
que es que la imagen yo la puedo escalar y se hace más o menos grande en base a estos sprites que os he pasado. 01:36:49
pasaba este vale pues aquí básicamente pues he cogido esto y lo he hecho tan 01:36:56
grande tan pequeño como he querido con él con la herramienta del red tool que 01:37:01
es la que más sirve para escalar vale y digo quiero así que sea así de grande 01:37:05
como tampoco tiene es blanco pues deforma y no se nota vale eso por 01:37:08
ejemplo en el techo también que es un blanco pues también puede ser rojo digo 01:37:14
es un color sólido pues se mueve y listo pero otro de los que os he pasado como 01:37:19
estas cajitas tienen un patrón, si os fijáis, fijaos que tienen unos cuadraditos, entonces escalarlo se ve feo, ¿no? De hecho yo en estas últimas sí que lo he escalado y se ve feo, si os fijáis, lo he pasado por alto, pues lo he escalado y ya está, del tamaño que quiera, pero en estas plataformas de aquí, ¿vale? Y eso es porque está en el modo simple, ¿vale? Pues que yo lo hago más grande o más pequeño y se deforma, no tiene más, pero en estas de aquí, si os fijáis, ¿vale? Los cuadradicos, 01:37:25
Sí que no se han deformado en proporción y se van sumando unos a otros. Es un único. Bueno, esto también es este. Aquí es un prefab que he metido dentro el Sprite Renderer. Lo que he hecho, y hay otra opción, por si tenéis un fondo que a lo mejor es tileable, es decir, es como una secuencia de los mismos edificios que cuando acaban empiezan otra vez. 01:37:55
no tenéis que hacerlo, podéis también 01:38:19
como yo he hecho en este ejemplo, hacerlo grande y ya está 01:38:22
pero si queréis que no sea 01:38:24
super grande el fondo y se vaya tileando 01:38:26
se vayan repitiendo una y otra vez 01:38:28
hay un modo de dibujado que es este 01:38:30
de Tile, y con este 01:38:32
hay una opción aquí, si os fijáis me pongo aquí 01:38:34
que si está en simple, se deforma 01:38:36
si lo pongo en Tile 01:38:38
sale esta opción que yo, lo que se va 01:38:40
haciendo es más grande y más pequeño 01:38:42
repitiéndose, veis que es ese mismo 01:38:43
patrón de los cuadrados, una y otra 01:38:46
vez. Esta es una forma de que los 01:38:48
sprites se tileen. 01:38:50
Luego hay otros modos, como este adaptativo 01:38:52
y tal, que se ajustan de otras formas 01:38:54
para que básicamente 01:38:56
se ajusten los bordes 01:38:58
y ya a partir de ahí se vaya tileando. 01:39:00
Pero con esto podéis hacer 01:39:02
que un mismo diseño sea el tileable, 01:39:04
incluido el fondo. 01:39:06
Para que esto vaya bien, si no me equivoco, 01:39:09
aparte de 01:39:13
ponerlo en modo tile, 01:39:13
lo suyo es, para que no de problemas, 01:39:15
que el mesh type pase 01:39:17
de el que viene por defecto de tight a full red 01:39:19
porque si no me equivoco 01:39:21
cuando me meto en el objeto 01:39:23
lo pones tileado, te sale 01:39:27
este error, puede no aparecer 01:39:29
correctamente, porque no, bueno 01:39:31
un conflicto, que aún así lo hace 01:39:33
¿vale? pero sí que es verdad 01:39:35
que para que funcione de manera correcta 01:39:37
esto se pone en full rect 01:39:39
se aplica y ya está 01:39:41
y ya, pues se puede tilear 01:39:43
que ojo, que aunque se ponga en full red, si se pone en simple 01:39:45
también se puede escalar 01:39:47
el full red sobre todo es para 01:39:49
otro modo que hay que se llama slice 01:39:52
que lo que hace 01:39:54
que los botones por ejemplo 01:39:56
cuando se hacen más grandes o más pequeños 01:39:57
no se deforme el interior 01:40:00
en las interfaces 01:40:01
es un poco más allá 01:40:02
de lo que estamos viendo 01:40:06
más cosas que en 10 minutos 01:40:07
vale 01:40:11
para la entrega 01:40:13
con que hagáis una estructura de 01:40:16
plataformas, que se mueva el personaje 01:40:17
que haga las animaciones que se piden 01:40:19
que haya plataformas animadas 01:40:21
que el personaje vaya saltando 01:40:23
lo que son las torretas y tal 01:40:25
pone que es opcional 01:40:26
sí que es verdad que si lo intentáis hacer 01:40:27
de esas partes, en el enunciado 01:40:31
lo que os he dicho 01:40:33
hay un montón de código 01:40:34
para que lo vayáis 01:40:37
a ver, a medida que vais bajando 01:40:38
aquí veis que los códigos ya son bastante más largos 01:40:41
¿vale? 01:40:44
pues bueno, si os atrevéis 01:40:45
si da por ello, porque además voy explicando más cosas 01:40:47
más avanzadas, ¿vale? Pero 01:40:49
si os veis con fuerza 01:40:51
la verdad es que sería genial porque le da 01:40:53
más gracia al nivel. Pero, de momento 01:40:55
con hacer plataformas que el personaje se vaya 01:40:57
moviendo y haya teniendo esas 01:40:59
animaciones, con el 01:41:01
Animator Controller según la acción que hagamos 01:41:03
pues más o menos se cumple 01:41:05
el objetivo del tema. 01:41:07
Pues decidme, venga, a ver 01:41:12
cosas o algo que queráis que veamos en los últimos 01:41:14
minutos. Bueno, no lo he dicho 01:41:16
pero está subido 01:41:18
el simulacro de examen, ¿vale? Sí que es verdad que no quiero repasar mucho cómo es, a no ser que tengáis dudas, 01:41:20
pero bueno, sois de segundo normalmente y lo tenéis aquí, ¿vale? A menos que tengáis alguna duda concreta, 01:41:27
bueno, ya cuando acabe el curso, me refiero, cuando se suban ya todos los temas, pues hablaré un poco más 01:41:33
del examen en sí. Ahora mismo me interesa que estudiéis los temas directamente. Pero bueno, eso, que sepáis, 01:41:38
si no lo habéis visto ya, que el simulacro de examen con la estructura, aunque no están planteadas las preguntas, pero un tipo de estructura y las normas iniciales que van a tener el examen de puntuación, etc., 01:41:45
y de normas de comportamiento también en el examen, pues ya están aquí. Una de las cosas que te faltaría, imagino, que no me contesta, 01:42:01
es que estos parámetros que son float, etcétera, eso, se van actualizando con los valores de un axis, por ejemplo. 01:42:13
Entonces, en todo momento se puede ir reflejando el valor para que haga una transición u otra, ¿vale? 01:42:22
Como hemos visto con la animación izquierda-derecha. 01:42:30
El salto, si os fijáis, y así lo vemos un poco por si acaso, la sugerencia. 01:42:33
A ver, ahora contesto a lo que ha puesto la compañera. Saltar, ¿vale? Pues saltar, por ejemplo, es si le he dado a la barra espaciadora, bueno, lo primero es que en algún momento, ¿vale? Yo he definido en el update que cuando le dé a la barra espaciadora, la variable estoy saltando se vuelva true, ¿vale? 01:42:38
No estoy activando el saltar desde aquí, estoy diciendo que sea true. Y en todo momento, el fix update está activando o desactivando ese saltar. Está todo el rato mirando en saltar, a ver si estoy saltando, se ha activado ya. 01:43:06
Si estoy vivo, si además estoy grounded y no estoy agachado, que es otra de las propiedades de las variables booleanas que se van activando y desactivando, si es así, pues oye, el trigger de jump que se active y le doy esta vez sí con un add force que vaya hacia arriba con modo impulso. 01:43:24
Vale, honestamente creo que la dificultad es bastante desproporcionada con el nivel que tengo, pero aún así lo intento hacer. Sinceramente, también es verdad, ¿eh? Bueno, entiendo completamente que os sintáis así, ¿vale? En ciertos momentos del curso, ¿vale? 01:43:47
Pero todo esto, hasta que no os pongáis a hacerlo, ¿vale? Y sé que son tareas largas, pero es que hasta que no os pongáis a hacerlo y a pensarlo, por mucho temario que veáis, por muchos vídeos que veáis, por todo lo que sea, hasta que no os pongáis a hacerlo, poco a poco no vais a saber hacerlo. 01:44:03
Es decir, vais a tener las herramientas, pero hasta que no os ponéis a pensarlo, no. Porque una vez os ponéis a pensarlo, es ir creando condiciones y variables. Sí que toma tiempo, pero realmente aquí hay mucho más código, porque yo tengo más cosas de las que os pido y aquí hay mucho más scripts. 01:44:24
pero por ejemplo 01:44:42
poner los distintos 01:44:45
estados y transiciones 01:44:47
e ir pensando los distintos 01:44:48
métodos que hay 01:44:50
con las instrucciones que más o menos he seguido dando 01:44:52
creo que 01:44:55
lleva tiempo pero no es tan complicado 01:44:56
lo de las torretas por ejemplo ya tendría 01:44:58
otras migas más distintas 01:45:00
porque además se ponen en juego 01:45:02
muchos más scripts independientes y hay que conectarlos 01:45:03
pero lo que es mover el personaje 01:45:07
y hacer las plataformas, colocarlas en el 01:45:08
espacio con sus colliders 01:45:10
y que el personaje se vaya moviendo entre una y otra con las animaciones, 01:45:12
yo estoy convencido de que si os ponéis, lo sacáis. 01:45:17
Sé que lleva tiempo, pero es el nivel de plataforma más básico que podemos hacer 01:45:20
y en principio hay que aprender a hacer uno. 01:45:26
Y en el tema creo que se explica todo lo necesario. 01:45:30
Pero también os lo digo así, si me dieran esta tarea, 01:45:34
al principio, incluso 01:45:39
diciendo, yo sé hacerla, vamos 01:45:41
sé hacerla, pero 01:45:43
ya simplemente el tener que sentarme 01:45:45
a pensarlo, a desgranarlo, es un ejercicio 01:45:47
que lleva siempre tiempo, siempre 01:45:50
hagas el videojuego que hagas un poco 01:45:51
que ponga en juego varias cosas y es ir 01:45:53
poco a poco, pues ir haciendo los distintos 01:45:55
métodos, ah, necesito una 01:45:57
boleana para activar que está 01:45:59
tocando el suelo 01:46:01
vale, pues ahí empiezas a añadirla 01:46:03
en donde necesitas, entonces 01:46:05
Incluso yo también, aunque me ponga aquí a enseñaros cosas 01:46:07
Aquí veis muchos elementos 01:46:11
Pero la primera vez que hice el saltar 01:46:12
Solo ponía la condición de estoy saltando 01:46:15
Hasta que vi que, bueno, es que también necesito que esté una life 01:46:17
Porque si no, cuando se muere el personaje 01:46:20
Que hay unos segundos, ¿vale? 01:46:22
Entre que se muere el personaje y se lanza la siguiente 01:46:23
Se recarga el nivel, ¿vale? 01:46:25
Con este morir, ¿vale? 01:46:27
Pasan tres segundos, ¿vale? 01:46:28
Y luego se recarga el nivel, ¿vale? 01:46:30
En esos tres segundos, si no pongo esa condición de alive 01:46:33
Claro, el personaje muerto 01:46:36
Después de hacer la animación de muerto 01:46:38
Seguiría saltando, cosa que no tiene sentido 01:46:40
Y ahí es cuando haces el alive 01:46:43
Ah, y aparte si no detecto de alguna forma 01:46:44
Para limitar que está posado en el suelo 01:46:46
Siempre que le dé a la barra espaciadora 01:46:48
Va a saltar y va a hacer dobles, triples 01:46:50
Cuádruples saltos 01:46:53
Entonces hay que hacer algo que vaya activando y desactivando 01:46:54
Una booleana según toca suelos 01:46:56
O deja de tocar suelos 01:46:58
Y aparte si creo luego una animación de agachado 01:47:00
Y se cambia ese boss collider 01:47:02
Para que esté agachado 01:47:04
Sabéis, es complicado porque conlleva pensar 01:47:05
Es decir, te quiero decir que hay otras cosas que es a lo mejor seguir más pasos 01:47:11
Pero cuando se quiere hacer algo que no es seguir un paso a paso 01:47:16
Claro, hay que sentarse e ir viendo a ver qué necesito, a ver qué tal 01:47:19
Y es complicado, sí 01:47:23
Es el problema a estas alturas 01:47:24
Es decir, no lo digo para desanimaros, lo digo para animaros 01:47:28
No sé si lo consigo 01:47:30
Pero lo bueno de la programación es, bueno, en realidad es lo malo, que es que hay que ir dándole muchas vueltas y luego parece que algo funciona y no, pero es sobre todo ir teniendo todo como escrito, en plan, yo quiero conseguir hacer esto y para que se haga esto y traducirlo a código. 01:47:31
Pero yo estoy bastante convencido de que a código 01:47:51
Al menos esta parte sí que la sabéis hacer ya 01:47:53
No sé si os he desanimado 01:47:56
Si os he desanimado 01:47:58
Pero con lo que sabéis podéis hacer 01:47:59
Al menos lo de colocar las plataformas 01:48:02
Y que el personaje se mueva entre ellas 01:48:03
Y llegue hasta un final 01:48:06
Sí que sabéis hacerlo 01:48:07
Otra cosa es que lleva tiempo 01:48:08
Y eso no lo va a quitar nadie 01:48:10
Pues nada, muchas gracias por asistir a la tutoría 01:48:14
y nos vemos en la siguiente. 01:48:18
Mucho ánimo con la tarea. 01:48:22
Materias:
Imagen y Sonido
Niveles educativos:
▼ Mostrar / ocultar niveles
  • Formación Profesional
    • Ciclo formativo de grado superior
      • Segundo Curso
Subido por:
Daniel M.
Licencia:
Todos los derechos reservados
Visualizaciones:
67
Fecha:
25 de marzo de 2025 - 20:56
Visibilidad:
Clave
Centro:
IES CIFP a Distancia Ignacio Ellacuría
Duración:
1h′ 48′ 29″
Relación de aspecto:
1.78:1
Resolución:
1920x1080 píxeles
Tamaño:
832.54 MBytes

Del mismo autor…

Ver más del mismo autor


EducaMadrid, Plataforma Educativa de la Comunidad de Madrid

Plataforma Educativa EducaMadrid