Tutoría #6 - UT5 - DEIM - Curso 25·26 - Contenido educativo
Ajuste de pantallaEl ajuste de pantalla se aprecia al ver el vídeo en pantalla completa. Elige la presentación que más te guste:
Grabación de la tutoría número 6 del módulo DEIM durante el curso 25·26
cuéntame qué dificultades estás viendo que te gustaría que viéramos pues vamos a ver
00:00:01
no te puedo ahora mismo enseñar el proyecto eso es un poco una una limitación pero bueno
00:00:10
básicamente lo que más guerra me ha dado hasta ahora ha sido el tema de las plataformas móviles
00:00:20
a través de animación, no de código, porque digamos que el personaje, no sé, tiene un offset cuando está subido encima de la plataforma
00:00:29
que no se aplica en las plataformas que están hechas por código, o sea, que están animadas por código.
00:00:40
Entonces, digamos que el personaje se sube encima, todo bien, pero cuando se desplaza hacia un lado la plataforma,
00:00:49
el personaje resbala un poquito
00:00:56
hacia ese lado y cuando va para el otro lado
00:00:58
resbala para el otro lado, o sea, está aplicando
00:01:00
todo el rato
00:01:02
un offset y no entiendo por qué
00:01:03
no entiendo por qué porque ya te digo
00:01:06
en la que va por código se sube y se queda
00:01:08
donde cae y le mueve la
00:01:10
plataforma y las animaciones
00:01:12
todo bien, pero
00:01:14
eso es lo que más guerra me ha dado
00:01:16
he intentado mirarlo
00:01:18
con
00:01:20
pues con IA tirándole el código y tal
00:01:21
y es peor, o sea
00:01:24
me hace cosas ahí extrañas
00:01:26
que me aplica una
00:01:29
no sé qué hace
00:01:31
un cúmulo de
00:01:33
inercia más
00:01:34
la velocidad que lleva más no sé qué
00:01:37
y le pega un empujón al personaje
00:01:39
y lo manda a tomar
00:01:41
vientos, entonces
00:01:43
estaba peleándome con eso
00:01:44
no entiendo por qué cuando se sube
00:01:46
y hay pruebas de varias maneras
00:01:49
ahora vemos
00:01:53
Ahora te enseño propuestas
00:01:55
Vale, eso es una
00:01:57
Bueno, ya aprovecho
00:01:59
Ahora me sigues contando
00:02:01
Para ver las partes que más te estén costando
00:02:03
Que tengas dudas
00:02:05
Ya sí que estamos entrando en el terreno
00:02:07
De códigos con mucha información
00:02:09
Muchas lógicas mezcladas
00:02:11
Y aquí sí que ya
00:02:13
Hay múltiples caminos para resolver
00:02:15
Lo mismo, ¿vale?
00:02:17
Entonces, aquí ya sí que es el mundo
00:02:18
De, bueno, pues ver propuestas
00:02:20
Y luego cuando parece
00:02:22
que lo has conseguido, pues lo que me estás comentando
00:02:24
aparece en comportamientos no deseados
00:02:26
etcétera, simplemente
00:02:28
recalcar que eso es absolutamente normal
00:02:30
que el dar vueltas es
00:02:32
parte de lo que toca, vamos, eso
00:02:33
es así, entonces
00:02:36
ahora es verdad que tenemos
00:02:37
una herramienta que aunque pensemos
00:02:40
que a veces empeora el camino, sí que
00:02:42
nos puede orientar o nos puede dar ideas
00:02:44
que se sabía, que está muy bien usarla
00:02:46
pero bueno, como me acabas
00:02:48
de decir, no es mágica y no siempre da la solución
00:02:50
al menos no la primera o
00:02:52
hay que ser consciente de qué se busca
00:02:54
para ir dándole vueltas
00:02:56
entonces por eso es la gracia de
00:02:57
ver la base de la programación y tener una idea
00:02:59
general, al menos aunque sea
00:03:02
de iniciación un poco, de cómo
00:03:03
funciona la programación, ¿vale?
00:03:06
que está esta idea de que la IA hace
00:03:07
cosas increíbles, es verdad, pero bueno
00:03:09
cuando quieres cosas concretas, pues a veces
00:03:11
no lo hace, entonces
00:03:14
simplemente que es normal, ¿eh?
00:03:15
Tienes que conocer el código, o sea, tienes que saber
00:03:17
lo que estás haciendo y
00:03:20
evidentemente hay cosas que sí que te da
00:03:21
soluciones o bueno te puedes simplificar algo que tal pero evidentemente si no si no conoces
00:03:23
el código y sobre todo tu propia nomenclatura y todo nada te puedes perder fácilmente de hecho
00:03:31
en él en el ejercicio anterior que vi tus comentarios gracias no sé por qué no me llegó
00:03:40
el aviso de que había un comentario
00:03:48
sobre la entrega de la tarea
00:03:50
y no me ha pasado solo con esa, me ha pasado
00:03:51
con otros módulos también
00:03:54
pero
00:03:56
que mencionabas el tema de que había
00:03:57
una cosa en el código que era
00:04:00
redundante porque lo podía hacer desde
00:04:02
el editor, desde el inspector y es
00:04:03
cierto, lo que pasa que es justamente
00:04:06
lo que estás diciendo tú, que
00:04:08
llega un momento en el que esto
00:04:09
tiene una cantidad de
00:04:12
información y de cosas vinculadas
00:04:13
que
00:04:16
Que cuando estás buscando una solución, pues justamente la tenía en el inspector, era mucho más fácil. Y yo creo que haciendo cambios y probando es donde, porque le quise pasar casi toda la, o sea, todo lo posible, digamos, de la competencia y el control al game controller.
00:04:17
inicialmente no lo tenía así
00:04:37
y efectivamente con
00:04:39
el controlador de eventos
00:04:41
lo estaba utilizando
00:04:44
desde el editor, pero cuando empecé
00:04:45
a pasar todo lo posible
00:04:47
que correspondía a nivel de juego
00:04:48
al game controller, ahí es donde se me empezó
00:04:51
a hacer un lío importante
00:04:53
y bueno, y al final
00:04:55
lo ordené así y evidentemente quedaron
00:04:56
coletillas sueltas
00:04:59
claro, pero bueno, esto
00:05:01
es, bueno, evidentemente aunque
00:05:03
la IA te diga tal, hay que saber al menos
00:05:05
orientarse en la lectura
00:05:07
del código, aunque a veces no entiendas
00:05:09
todo y le puedes preguntar, es lo bueno
00:05:11
es por lo que
00:05:13
aprendemos a programar, vamos
00:05:15
simplemente
00:05:17
ya que lo has dicho, claro, otro de los
00:05:19
problemas que hay actualmente, pero que ya se está
00:05:21
empezando a solventar es
00:05:23
que la IA, claro, tú le puedes pasar un
00:05:25
escrito, un código, pero le falta
00:05:27
el contexto del editor, le falta
00:05:29
a veces conectarlo con otras cosas
00:05:31
simplemente por si, no ahora
00:05:32
seguramente, pero más adelante quieres
00:05:35
indagar en esto, existe
00:05:37
lo que se llaman los protocolos de control
00:05:39
de modelos, esto de MCP
00:05:41
que hay para software, no sé si te suena
00:05:43
pero que son como
00:05:45
implementaciones de la IA dentro
00:05:47
de los softwares, cuando digo
00:05:49
software puede ser incluso DaVinci por ejemplo
00:05:51
que ya va
00:05:53
entendiendo los propios programas
00:05:55
y es un paso
00:05:57
más porque ya permite leer tanto los
00:05:59
scripts como saber
00:06:01
qué es lo que hay en el editor, ver el
00:06:03
inspector etcétera vale simplemente pues ya que cuando eso también vaya mejorando ya no habrá
00:06:05
redundancias entre lo del editor que en cierto modo a no ser que se lo cuente muy específico
00:06:10
es algún punto ciego que tendrá el laía porque no lo está viendo lo podrás adivinar no podrá
00:06:15
vislumbrar lo pero no está viendo el claro pero bueno que sepa que esto es un poco el camino que
00:06:23
se está viendo con los software para automatizar ya el uso de los software sencillo y hay muchos
00:06:28
para Unity hay varios, bueno, simplemente
00:06:34
que te suenen, ya que hablamos de
00:06:36
IaaS y de esto
00:06:38
Genial, gracias
00:06:40
¿Qué más? Es verdad que todavía
00:06:41
no funcionan muy finos, pero ya
00:06:44
empiezan a funcionar, eso significa
00:06:46
que a medida que lo mejoren, pues ya
00:06:48
funcionarán, no me cabe duda, lo único
00:06:50
es el tiempo que tardará
00:06:53
Sobre las
00:06:54
plataformas, bueno, algo más
00:06:56
aparte
00:06:58
y otra cosa, es verdad, cuando os damos los
00:07:00
feedback de las tareas, cuando os corregimos las tareas,
00:07:02
si no me equivoco, os llega
00:07:05
la corrección,
00:07:07
el momento de la corrección sí que marcamos una casillita
00:07:09
para que os avise, ¿vale? Normalmente si os llega
00:07:11
la nota, mirad si tiene un feedback,
00:07:13
¿vale? Porque lo que es el feedback
00:07:15
sí nos va a llegar al mail.
00:07:17
Pero bueno, si os metéis en la tarea
00:07:19
con la corrección, ahí sí que lo veis, ¿no? Si no me equivoco.
00:07:20
Sí, sí, ahí sí.
00:07:24
Lo que pasa es que habitualmente siempre me
00:07:25
ha llegado eso, un aviso que
00:07:26
dice, hay un comentario sobre tu entrega.
00:07:29
Bueno, pues ya está.
00:07:31
¿Y esta? ¿En esta ocasión no te llegó?
00:07:31
No, y me pasó también
00:07:35
con las de
00:07:36
digitalización y sostenibilidad
00:07:38
no sé, no sé, bueno, en fin
00:07:40
Sí, pues a veces
00:07:42
la plataforma también, bueno, pues no
00:07:44
avisará, en teoría te debería haber llegado
00:07:46
y más si te ha llegado otras veces, porque si no diría, bueno, pues
00:07:48
nunca está funcionando, pero sí que
00:07:50
en teoría marcamos una cosa que
00:07:51
os llega ese aviso, es verdad que
00:07:54
por ejemplo, por ejemplo este fin
00:07:56
de, entiendo que en otra, esto fue
00:07:58
antes pero este fin de semana ha habido una interrupción que de pronto no han llegado los
00:08:00
novedades de foro hasta tres días después bueno que a veces pasan estas cosas vale algo más si
00:08:04
no vamos con lo de las plataformas no arranca porque la otra parte ya de los proyectiles y
00:08:14
y tal, me la dejo para después
00:08:24
vale, aún así si quieres
00:08:26
vemos enfoques
00:08:27
¿vale? para que cojáis ideas, aunque yo en el
00:08:30
anuncio de la tarea os pongo algunas cosas, pero lo
00:08:31
vemos también aquí, ¿vale?
00:08:33
vale
00:08:36
voy a ir por pasos de lo que es la tarea
00:08:36
aunque entiendo que los primeros me los voy a pasar
00:08:40
rápido, porque es verdad que es lo que tenéis más explicado
00:08:41
y con vídeos ya en
00:08:44
el propio tema, pero bueno
00:08:45
lo que es generar
00:08:48
los sprites y
00:08:50
a ver
00:08:51
sprites, es decir, esta hoja de sprites
00:08:52
dividirlo en los distintos fragmentos
00:08:56
para meterlo como
00:08:58
clips de animación, eso entiendo que no hay problema
00:09:00
¿no? hasta ahí bien
00:09:02
no, no hay problema, lo único que
00:09:03
he notado, pues son dos cosas, una que
00:09:06
o sea, el idle
00:09:08
da un salto
00:09:09
no sé si es que le falta algún sprite
00:09:11
algún dibujo o algo
00:09:14
el idle, ¿vale? ahora lo vemos pero no debería
00:09:15
en el loop, al final
00:09:18
del loop hace como un saltito y eso es
00:09:20
típico de que o le sobra o le falta algún frame
00:09:22
pero
00:09:24
ya te digo, no me he metido a
00:09:25
comprobarlo
00:09:28
vale, sí, a veces puede pasar
00:09:29
digo que
00:09:31
en este caso
00:09:32
a ver, espera
00:09:35
si quito y me
00:09:35
acerco la cámara
00:09:38
es decir
00:09:39
en principio a veces si veis que
00:09:43
hace ese saltito, pues es ver el último fotograma
00:09:44
de la animación
00:09:47
porque estará duplicado
00:09:47
o algo así
00:09:50
en teoría el idle, aquí yo como lo veo
00:09:52
no sé si tú lo ves bien
00:09:54
debería ir bien
00:09:55
vamos, no se nota ningún salto
00:09:58
no, en ese se ve bien
00:10:00
en el mío hace un pequeño salto
00:10:02
al final
00:10:04
y bueno, pues nada
00:10:05
puede ser, o porque
00:10:07
al hacer la animación, al seleccionar
00:10:10
todo y arrastrar, por ejemplo
00:10:12
te dejaras alguno y el salto sea precisamente
00:10:13
porque falte, o que el primero y el último
00:10:16
sea el mismo, que eso se soluciona
00:10:18
básicamente vendiéndote
00:10:20
en la animación, pues en el aire en este caso
00:10:22
sería este, y ver
00:10:24
ese fotograma, ¿vale?
00:10:26
para que, a ver
00:10:27
si lo despliegas, para ver
00:10:29
cuál está duplicado, si el salto es como que hay un fotograma
00:10:31
que es, que se queda como
00:10:34
parado y luego arranca, seguramente lo que haya que hacer
00:10:35
es coger y borrar, ¿vale?
00:10:38
si no comprueba
00:10:40
que de verdad han metido toda la cadena
00:10:41
de fotogramas, ¿vale?
00:10:43
vale, eso por otro lado
00:10:45
con, aunque entiendo
00:10:47
que estará en progreso con el
00:10:49
animator controller de las acciones que aquí ya empiezan a tener tela más o menos
00:10:52
lo vas que además esto es algo de este tema más o menos lo va a ser eso al
00:10:56
principio si me había dado un poco de lío o sea ya lo conocía en real
00:11:04
estaba un poco familiarizado con esto vale y aunque es diferente digamos que
00:11:11
bien, hasta
00:11:16
a ver qué momento fue
00:11:18
así un poco, porque veo que
00:11:20
ahí tú tienes conectadas bastantes cosas
00:11:22
Claro, aquí
00:11:24
es lo mismo, se puede hacer de
00:11:26
varias formas, pero sí, espera que te amplío
00:11:28
para que veas un poco
00:11:30
mejor
00:11:31
Sí, vamos, básicamente
00:11:33
la lógica que hay
00:11:36
que no tiene que ser exactamente la
00:11:38
que se cumpla
00:11:40
eso está ahí, nos aplica
00:11:41
según entramos está en el idle, ¿vale?
00:11:44
Si nos movemos, evidentemente pasa de andar de izquierda a derecha, básicamente, con la cruceta. Podemos ir viendo en detalle si quieres alguna cosa, pero no da tiempo a ver todo, entonces vayas viendo.
00:11:46
Luego, si das a la barra espaciadora, se aplica una fuerza y también la animación de salto. Y cuando detecta suelo, hay aquí un parámetro llamado Is Grounded, volverá al idle.
00:12:00
Que nos movemos rápidamente, pues como hemos quitado en esta transición el Has Exit Time, no se tiene que desarrollar toda la animación. Por tanto, pasaría directamente al Robot Walk o a lo que fuera.
00:12:12
Eso del has exit time, entiendo que he comprendido. Lo mismo, se puede agachar tanto desde que anda como desde que está en idle. Y la única diferencia, ahora lo vemos, es que cuando pasa desde el idle al crouch, al agachado, va a estar quieto.
00:12:24
Si pasa andando, lo normal es que esté en movimiento, ¿vale? Eso sí que mediante código, pues si no está habiendo desplazamiento horizontal, se queda quieto y de hecho se detiene también la velocidad del robot crouch, ¿vale? Se queda como quieto hasta que se reemprende la marcha.
00:12:44
ya y luego bueno hay una acción de correr vale pues que la transición normalmente es con el
00:13:02
añadido del de después del shift en mi caso más rápido y luego si está corriendo y se da al de
00:13:09
agachado en vez de agacharse lo que hace es el rol este la animación de que rueda vale y sólo
00:13:19
se va a ella si estás corriendo si no no no se puede rodar andando por ejemplo vale y bueno es
00:13:24
muy importante, ¿vale? Que la muerte,
00:13:29
el morir, da igual en cuál
00:13:32
estés, que puede suceder en cualquier caso, en momento,
00:13:33
¿vale? En cuanto haya una condición
00:13:36
que se cumpla, que es esta booleana de que
00:13:37
está muerto, que ese antiguo está muerto,
00:13:39
pues se lanza la animación
00:13:41
de la muerte.
00:13:44
De la muerte. ¿Vale? La diferencia
00:13:45
entre el entry y el in-state, que es
00:13:47
importante, que es eso. Entry siempre tiene esta
00:13:49
lógica y va siguiendo
00:13:51
las líneas de las transiciones según
00:13:52
se vayan estableciendo, pero tú
00:13:55
siempre puedes decir, vale, en este momento, aunque yo esté
00:13:57
haciendo tal oye si me da un enemigo yo muero da igual que esté rodando en lo que esté vale
00:13:59
luego ya es obviamente ir viendo las condiciones y esto tiene aquí ya así que es echarle vueltas
00:14:05
vale si hay una duda que me ha surgido varias veces que al final por el hecho mis configuraciones y
00:14:12
me funciona bien pero a la derecha donde tienes las dos animaciones con la transición en cual
00:14:19
¿Dónde está el Has Exist Time?
00:14:28
Ahí está, te refieres
00:14:30
Sí, ahí
00:14:32
como no estoy familiarizado
00:14:33
el hecho de que
00:14:36
entiendo que si vas a hacer
00:14:38
una transición de una animación a otra
00:14:40
tienen que estar superpuestas
00:14:42
con un tiempo, que es como lo tienes
00:14:44
ahora mismo
00:14:46
y luego
00:14:46
ahí se te está repitiendo
00:14:50
el crouch
00:14:51
y esto
00:14:53
a mí me pasaba
00:14:54
cuando el tiempo
00:14:58
de transición es
00:15:00
un poco mayor que el final del
00:15:02
primer, o sea, básicamente está repitiendo el
00:15:04
crouch, eso es lo que está
00:15:06
entiendo que es lo que está haciendo
00:15:07
si está
00:15:09
en el crouch y va a
00:15:11
pasar al idle, pero
00:15:14
pasa más tiempo de lo
00:15:15
que dura la animación crouch
00:15:18
la animación crouch se repite
00:15:19
que es lo que está ocurriendo ahí
00:15:22
por eso te aparece en gris a la derecha otra vez
00:15:23
la animación eso es lo que me rayaba un poco y como justamente el otro y claro es el de la
00:15:26
derecha si lo desliza antes de que termine la animación entiendo que el robot crowds debería
00:15:34
aparecer el gris desaparecer eso es claro tú lo que tiene si para que igual estamos y entonces
00:15:39
ahí justamente eso que estabas haciendo en qué momento que entiendo que es lo que ocurre en qué
00:15:44
momento de la animación crowds que en este caso es una animación que es un frame pero podría ser
00:15:50
que pues la mitad de una animación aparece la otra eso es lo que me parecía como un poco aleatorio
00:15:55
no es decir se está ejecutando la animación de caminar por ejemplo o del aire el perdón si de
00:16:03
caminar a correr que son dos animaciones diferentes no es sólo bueno el aire también no es sólo una
00:16:09
posición sino que no es sólo un frame sino que son varios frames y entonces la transición perdón la
00:16:14
transición, no, la animación a la que va a pasar
00:16:22
si yo la coloco
00:16:24
más a la izquierda o más a la derecha
00:16:26
entiendo que interrumpe
00:16:28
en el momento en que yo le estoy diciendo
00:16:30
la animación en la que está en ese momento
00:16:32
¿me explico?
00:16:33
sí, a ver si me entiendo
00:16:35
si no me dices, básicamente
00:16:37
el crouch, yo mientras estoy agachado
00:16:39
y esto se ve, si nos metemos en el animator
00:16:41
si tenemos seleccionado
00:16:43
esto es importante, entiendo que se ve
00:16:45
pero si estás seleccionando el objeto se va viendo
00:16:47
la ejecución, ¿no?
00:16:49
Yo básicamente, aquí, bueno, como no me estoy moviendo, no está parada, ¿vale?
00:16:50
Mientras me mueva se reproduce
00:16:54
Cuando yo suelte, bueno, aparte de que está el robot walk, no está establecido del todo bien, parece ser
00:16:56
Ah, bueno, sí, claro, como me estoy moviendo coge un segundo ahí de...
00:17:01
Sí, cuando dices que es un poco aleatorio, realmente, claro, hay que entender que entre...
00:17:05
Cuando son sprites, que no va a ser lo mismo que suceda cuando hay interpolaciones en el 3D, ¿vale?
00:17:13
Que eso sí que es en base a los rigs y a clips de animación que va interpolando un avatar y huesos, ¿vale?
00:17:17
Eso va después. Aquí, básicamente, las acciones se detienen unas a otras.
00:17:24
Es decir, cuando haces un giro de izquierda a derecha, no hay...
00:17:29
Y si no, ahora vemos cómo sería, ¿no?
00:17:32
Pero no hay todo el proceso del giro. Son cortantes, digamos, los pasos de una a otra.
00:17:35
Tú, eso no quita que siempre pongas entre una animación y otra, animaciones en medio.
00:17:40
Es decir, una animación que claramente sea como el momento entre que está agachado y se levanta y se hace ese recorrido. Si tú haces un clip de animación, aunque sea cortísimo, de cómo se levanta, tú lo puedes poner aquí en medio y que sin condiciones se ejecute y ya pase al otro.
00:17:45
No sé si me estoy explicando. Pero claro, tú tienes que contar que nunca va a estar 100% cerrado, a menos que hagas esos pasos súper concretos, que entonces vas a ir haciendo muchos fragmentitos de animación, ¿vale? Nunca vas a ver en qué momento de que estoy caminando y me levanto va a ser exactamente, ¿vale? Si no tienes el Hashtag Exit Time, porque si tienes el Hashtag Exit Time sí que fuerzas a que se desarrolle todo.
00:18:06
Pero aquí, claro, se tiene que jugar con que la interacción lo que tiene es eso, que va asociada a cada acción y se pasa de una a otra de una forma un poco importante, porque al final no hay interpolación como tal, lo que hay es un tiempo entre que se vea un sprite o se vea otro, según la animación que se esté ejecutando, ¿vale?
00:18:29
Si tú quieres que entre un paso y otro haya animaciones concretas, puedes meter más. Es decir, no siempre tienes que meter condiciones para que pasen todas las transiciones. Y de hecho te diré más, cuando los juegos se hacen los saltos, es muy frecuente, aquí solo hay un salto y se queda ahí y cuando se pasa ya pasa el otro.
00:18:48
Pero es muy frecuente que cuando das al salto hay una animación de cómo coge impulso mientras está en el aire, el tiempo que está en el aire, hay un bucle del personaje moviendo los brazos, que es otro clip de animación, y cuando aterriza y detecta el suelo hay uno de amortiguación contra el suelo.
00:19:07
Y son tres animaciones distintas que, digamos, la lógica siempre va a ir uno detrás de la otra, esas tres, ¿vale? Pero se van desencadenando según se ponga. Entonces, ahí sí que entiendo que es lo que me quieres decir, ¿eh? Ahí sí que te estás asegurando que cuando des el salto siempre de un impulso, luego hagas el braceo y según cuánto tarde, porque puede tardar más tiempo o menos en volver a posarse en el suelo, esa animación se queda desarrollándose en bucle y de pronto cuando se posa da la otra.
00:19:27
Entonces, es ir fragmentando un poco la animación según los eventos que vayan sucediendo, vaya.
00:19:57
Sí. A ver, sí, porque además que yo lo he hecho también con, por ejemplo, si tiene velocidad negativa en Y, evidentemente pues está cayendo y la animación es otra o lo que sea.
00:20:02
En este caso es más bien en el inspector que tienes las dos animaciones, el crouch y el idle. Digamos que la animación de idle está puesta al final y justo se solapa el tiempo necesario con crouch para hacer la transición, pero tú puedes mover en el inspector esa animación robot idle hacia la izquierda y ahí es a lo que voy.
00:20:16
No sé si esa, digamos, es lo que importa o simplemente, porque ahí, claro, le estás, o sea, entiendo que eso es la longitud de la animación.
00:20:46
Mira, vamos a hacer una prueba muy rápida
00:20:58
¿Vale? Si yo lo dejo como estaba
00:21:00
Y digo, en cuanto salga de Robot Crouch
00:21:02
Crouch, no sé muy bien
00:21:04
Cómo se dice, y pase a Robot Idle
00:21:06
¿Vale? Lo que quiero es que arranque la siguiente
00:21:08
Desde el principio de ese click de animación
00:21:11
De Idle, ¿vale? Y por tanto, fíjate
00:21:12
¿Vale? Yo me agacho, estoy aquí
00:21:15
Y en cuanto suelto y paso a la siguiente
00:21:16
Empieza desde el principio
00:21:18
Si yo hago esto
00:21:19
Y esto te puede interesar, por ejemplo
00:21:21
Porque tengas una animación
00:21:24
En la que sea precisamente el posado
00:21:26
al caer de un salto el posado del personaje
00:21:28
y que se levanta un poquito
00:21:30
y ya se queda en el idle
00:21:32
si tú tienes esa animación, a lo mejor lo que te interesa es
00:21:33
tenerlo en un clip de animación
00:21:36
y según de la que venga
00:21:38
esa animación pues empiece desde aquí
00:21:39
que es cuando, pues yo que sé, no te interesa
00:21:42
que en ese momento se vea eso de que se está levantando
00:21:44
tú si lo pones aquí
00:21:46
lo esfuerzo, lo pongo como a la mitad
00:21:48
tú fíjate que cuando yo
00:21:50
estoy en el crouch
00:21:52
sea cuando sea, yo al pasar a la siguiente
00:21:54
vas a ver que ahora no empieza a reproducirse
00:21:56
desde el principio, sino
00:21:58
desde aquí, ¿vale? Es decir, omite
00:22:00
toda esa clip de animación en esa parte
00:22:02
fíjate, a ver
00:22:04
espera que se ha quedado pillado, ahí, ¿ves?
00:22:06
me lo ha hecho y...
00:22:08
bueno, ahora no lo ha hecho pero
00:22:10
era como muy aleatorio
00:22:12
pero efectivamente, si tienes
00:22:14
una animación más larga y te interesa
00:22:16
que entre a partir
00:22:19
de un punto o que corte la animación
00:22:20
anterior hasta un
00:22:22
límite, pues esa forma es mucho más
00:22:24
práctica, no tienes que andar con un montón de
00:22:26
animaciones distintas
00:22:28
está muy bien
00:22:29
y hay otra cosa con la que
00:22:32
tuve que jugar bastante, es
00:22:34
justamente el tiempo de transición
00:22:36
porque lo que ocurría era
00:22:38
que se desplazaba el personaje
00:22:40
evidentemente con el input
00:22:42
se empezaba a desplazar antes de que
00:22:44
empezase la animación, entonces la
00:22:46
transición tenía que ser muy corta
00:22:48
para que fuese lo
00:22:50
más sincronizado, por lo menos visualmente
00:22:52
posible, es decir, si yo lo doy
00:22:54
hacia la derecha, que no se desvice
00:22:56
el personaje sin que esté corriendo la animación
00:22:58
Claro, eso, una cosa importante
00:23:00
que habría que ver cómo lo estás haciendo
00:23:03
lo que es la animación del personaje
00:23:06
el que se mueve a izquierda o a derecha
00:23:08
lo estás haciendo por físicas, entiendo
00:23:10
que era lo que se pedía
00:23:12
es que se puede hacer ya de
00:23:14
tener en cuenta, lo digo
00:23:17
para que es una de las cosas importantes
00:23:18
que si estás haciendo
00:23:20
un cambio de posición con Fixed Update
00:23:22
y en los cambios de animaciones
00:23:24
en ocasiones se hace
00:23:27
con update, claro, puede haber un pequeño
00:23:29
desfase entre una cosa y la otra
00:23:31
recordemos que esto va
00:23:32
a toda velocidad porque en cuanto hay un fotograma
00:23:34
lo detecta, pero esto va a saltos fijos
00:23:37
entonces hay que ir un poco
00:23:39
previendo eso
00:23:41
pero sí, claro, si hay una animación
00:23:42
que la animación digamos de caminado
00:23:46
empieza con el personaje parado
00:23:49
y luego se empieza a mover, pues tendrás que
00:23:50
recortar, pero ojo, que tú siempre
00:23:53
es decir, muchas veces te vienen hojas
00:23:55
de script con un ciclo de caminado
00:23:57
bueno, no, un ciclo de caminado no es el ejemplo
00:23:58
que me interesa, con un arranque
00:24:01
de ponerse a caminar y tú
00:24:03
puedes ir y decir, oye, aunque vaya
00:24:04
el diseñador o yo mismo en su momento
00:24:06
pusiera que empieza a caminar
00:24:08
y luego tarda, tú puedes
00:24:11
hacer aquí lo que hemos dicho antes
00:24:13
coger esos fotogramas y
00:24:15
ventilártelos, ¿vale?
00:24:16
que nada te obliga, incluso puedes
00:24:19
hacer otra animación, ¿vale? puedes decir
00:24:21
bueno, espera, puedes decir
00:24:22
crear otro nuevo clip
00:24:24
y poner, haces otro
00:24:27
clip de animación y ahí arrastras, en vez de
00:24:29
robot world con todo, ya andando
00:24:31
y esa animación
00:24:33
cuando la metas, ya cuando te interese la uses
00:24:34
es decir, que no hay que ceñirse
00:24:37
ni mucho menos a toda
00:24:38
una hoja de spray, incluso puede estar mal
00:24:41
sabes, entonces
00:24:43
esto es según lo que te interese, tú lo que tienes que
00:24:44
lo que hay que entender es que aquí son
00:24:46
fragmentos de animación y tú la vas
00:24:48
desencadenando según te interese
00:24:51
vale y aunque entre de hecho si tiene más vínculo pero aquí es son sólo dibujos animados uno tras
00:24:52
otro es decir no va a haber ni menos que haya dibujado ese desplazamiento y lo estés viendo
00:25:00
el movimiento es en este caso completamente independiente de que se muevan si el game
00:25:05
object vale entonces es saber coordinar eso y tú pues lo dicho tú te puede meter aquí en el
00:25:10
clip de animación vale y también aparte de darle el loop luego otra opción si ves que da un salto
00:25:16
prueba también ha estado el look post que básicamente que fusiona el último y el primer
00:25:22
fotograma de esa animación por si fuera el mismo vale pero bueno directamente también lo puede
00:25:26
borrar y el cycle offset que es que empiece más o menos tarde respecto a lo que hay dentro de
00:25:31
animación un poco como lo que hemos hecho antes arrastrando pero si tú desde luego en una animación
00:25:36
no te interesa que los primeros 10 fotogramas estén hace un clic de animación sin esos 10
00:25:41
fotogramas sabes y puedes tener varias animaciones ya la que vayas activando es la que te interesa
00:25:46
entonces claro si a veces hay animaciones que te viene con morraya o que no te interesa pues
00:25:52
es limpiarlo es limpiarlo a tu a tu necesidad sí y ahora que habías dicho lo del update versus
00:25:57
el fixed update una cosa que me pasaba era que iba a saltos justamente por eso cuando estaba
00:26:05
subido la plataforma por ejemplo la animación no va perfectamente sincronizado porque pues
00:26:15
tiene un digamos justamente una actualización fija y pero eso al final lo resolví poniendo
00:26:25
interpolación en tanto en la plataforma como en el te refieres a esto
00:26:34
sí a ver mira claro hay que pensar que en el tema los temas se intenta que esté como muy dividido no
00:26:41
pero hay que pensar que hay como dos mundos con los que mover los personajes no la kinemática
00:26:54
que es desplazarlos mediante su transformado mediante coordenadas y mediante el motor de
00:26:58
físicas y es verdad que aunque se suelen combinar en un mismo juego sí que son un poco incompatibles
00:27:04
vale no no son incompatibles pero generan problemas que ocurre que si tú tienes un
00:27:13
animator vale con básicamente es mover en base a clip de animaciones por lo tanto suele ser
00:27:20
kinemático no también se puede meter otros tipos de parámetros pero bueno suelen ser movimientos
00:27:27
cinemáticos de posición etcétera tú aquí en el modo de digamos que se va refrescando se va
00:27:32
calculando esos fotogramas tú puedes decir que se mueva en base al motor físico es decir que
00:27:39
pase un poco de lo que es el ciclo de update y usen el fix update vale para esa opción tienes
00:27:45
que poner que sea animate physics pero ahí es importante saber si el personaje se mueve por
00:27:51
físicas o no, porque si se mueve por físicas
00:27:55
esto es la plataforma, ¿vale?
00:27:57
es una de las que se mueven aquí
00:27:59
si se mueve por físicas, te interesa que
00:28:00
esté coordinado, porque a ti al final la plataforma
00:28:03
mientras se mueva de derecha a izquierda
00:28:05
te da igual que se calcule cada 0,01
00:28:07
segundos o 0,22
00:28:10
se va
00:28:11
a ir bien, se va a ver bien
00:28:13
pero claro, la coordinación
00:28:15
lo que me estás comentando entre el personaje
00:28:16
y la
00:28:19
plataforma, cuando entran
00:28:21
en contacto ahí sí puede haber discrepancias entonces esto es importante y luego hay otra
00:28:23
cosa también que es un método que hay de hecho a ver creo que lo tenían de los scripts vale hay
00:28:29
un método en plataforma aquí vale que es si estás moviendo al personaje con con rigid body vale con
00:28:36
el velocity o le estás aplicando fuerzas e incluso dentro del rigid body vale de lo que es el motor
00:28:45
de físicas, ¿no? Rigidbody y motor de físicas
00:28:51
hay métodos
00:28:53
que hacen lo mismo que un movimiento
00:28:55
kinemático, pero usando el
00:28:57
motor de físicas, ¿vale? Por ejemplo
00:28:59
este Move Position, entonces
00:29:01
no siempre hay que hacer un Transform
00:29:03
un Translate o cosas así
00:29:04
para mover al personaje, si tú quieres moverlo
00:29:06
en base a la lógica de
00:29:09
Move Position, la lógica
00:29:11
de, bueno, pues de un movimiento kinemático
00:29:16
pero como el personaje va a tener su
00:29:18
gravedad, va a tener sus reacciones de
00:29:20
colisionadores y básicamente va a estar en el mundo físico ahí es donde hay que recurrir a
00:29:22
este tipo de métodos vale que al final es es lo mismo que el translate pero lo está ahí por eso
00:29:27
estaba dentro de fixate y además pero pero está usando la lógica del motor vale para que todo
00:29:35
hable digamos el mismo idioma mal yo yo lo que te decía que también en él era la interpolación pero
00:29:42
de lo que es
00:29:53
el
00:29:55
en el Rigid Body
00:29:55
para que actualizase
00:29:59
para que fuese más
00:30:02
refrescado, porque si no
00:30:04
esto también me había pasado
00:30:05
en otros proyectos
00:30:07
vale, en principio no debería
00:30:09
tocarse
00:30:12
pero sí que es verdad que tú puedes
00:30:14
digamos, adelantarte
00:30:16
te puedes adelantar, digamos, a la física
00:30:18
digamos brevemente
00:30:22
entonces sí, es otra solución
00:30:24
en principio si van con el mismo lenguaje
00:30:26
no debería haber ese problema, lo que te estaba diciendo
00:30:28
pero bueno, estas opciones también están
00:30:30
para eso, ¿vale? Básicamente lo que hace
00:30:32
es adelantar o retrasar un poco
00:30:34
la interpolación física
00:30:36
Sí, a ver, tampoco
00:30:38
era una cosa demasiado
00:30:40
grave, si es
00:30:42
grave, evidentemente
00:30:45
hay que buscar otra solución
00:30:46
era simplemente que no era tan fluido
00:30:48
y sobre todo que se notaba la diferencia
00:30:51
de cuando estaba
00:30:53
en el suelo
00:30:55
y se subía a una plataforma móvil
00:30:58
ahí es donde se notaba la diferencia
00:30:59
que perdía fluidez
00:31:01
bueno
00:31:03
claro, eso no sé cómo lo has resuelto
00:31:04
yo por ejemplo
00:31:07
te puedo enseñar un poco como he hecho yo
00:31:08
hay dos tipos de plataformas aquí
00:31:11
un poco para probar ambas
00:31:13
una, estas primeras que son las que se mueven por kinemática
00:31:14
que son clip de animación
00:31:17
ahora lo vemos
00:31:20
y estas de aquí que se mueven por código si quieres lo revisamos sí sobre todo la que va
00:31:20
por animación porque la que va por código a mí me está buscando bien y luego tengo otro problema
00:31:29
que es muy tonto y no lo estoy entendiendo por qué pero creo el prefab todo con ya con todo lo
00:31:34
que necesita lo guardo como prefab y luego lo voy tirando en la imagen en la imagen en la escena
00:31:42
perdón
00:31:48
y no importa la posición
00:31:48
que le ponga, si lo duplico
00:31:52
o lo que sea, que siempre al darle
00:31:54
play me los pone todos en el
00:31:56
punto de origen que tiene el prefab
00:31:58
y eso no me había ocurrido antes
00:32:00
eso piensa que es muy normal
00:32:02
porque al final tú estás haciendo
00:32:04
un prefab
00:32:06
¿vale? y cuando tú tienes
00:32:08
mira, vamos a ver este clip de animación
00:32:10
que era, movimiento
00:32:12
horizontal, plataforma, ¿vale?
00:32:16
¿y este cuál es? otro que hay, ¿vale?
00:32:18
Si vamos a esta plataforma y la activo, si le doy al play, tenemos esta plataforma y esta plataforma básicamente es un prefab, a ver si me explico de una forma rápida y clara.
00:32:19
Yo, igual que creo que has hecho tú, lo que quería era un prefab de una plataforma que pudiera duplicarla en muchos puntos y que hiciera el mismo movimiento relativo de izquierda a derecha.
00:32:40
exacto, vale, aquí tengo el prefab
00:32:49
voy primero a enseñarte el prefab y así vamos
00:32:52
aparte, vale, este es el prefab
00:32:54
si me meto aquí, yo ya lo he
00:32:55
estructurado de una forma que
00:32:58
siempre hay que contar que
00:32:59
es muy conveniente normalmente
00:33:02
tener entis objects como padres
00:33:04
por lo que voy a hablar ahora
00:33:06
y una de las razones, la vimos ya en la UT1
00:33:08
que era el desplazamiento relativo que tiene
00:33:10
un prefab con respecto a cuando se instancia
00:33:12
vale, eso del
00:33:14
movimiento relativo es lo que vamos a
00:33:16
usar aquí a nuestro favor. Entonces,
00:33:18
yo tengo aquí un nulo, no hay
00:33:20
nada, ¿vale? Es un nulo, que lo llamo así,
00:33:22
¿vale? Pero lo importante, todo lo que está
00:33:24
en la clip de animación y todo, está
00:33:26
dentro de este
00:33:28
hijo, ¿vale? De este GameObject hijo.
00:33:29
Aquí hay un
00:33:32
animator, que básicamente lo que
00:33:34
tiene es, pues, esa clip de animación
00:33:36
que se va a ir desarrollando
00:33:38
perpetuamente, ¿vale? Que es este de aquí
00:33:40
y que lo abro, ¿vale? Esto
00:33:42
simplemente es, entiendo que
00:33:43
es lo mismo que tú has hecho, un position, que en
00:33:46
X va desde un punto
00:33:48
y lo selecciono,
00:33:49
le doy al play y hace un loop
00:33:52
de izquierda a derecha.
00:33:54
¿No? ¿Vale? Tiene tres
00:33:56
fotogramas, no más. ¿Qué ocurre?
00:33:58
Que tú aquí estás dando unas coordenadas absolutas.
00:34:00
Sí. Es decir,
00:34:03
tú aquí estás diciendo, este objeto tiene que
00:34:04
estar en el 0, 0, 0.
00:34:06
Por tanto, por mucho que nos
00:34:08
empeñemos, aunque
00:34:10
nosotros, este
00:34:11
GameObject, lo voy a copiar,
00:34:13
me voy a mi jerarquía, yo lo pego ahí
00:34:16
se ha copiado en el 0 0 0 vale si yo lo muevo lo voy a mover y lo pongo aquí vale y está en el 46
00:34:17
y en el 10 que ocurre que ese game object cuando se arranca el juego dice yo es que mi animación
00:34:26
va del 0 a 10 vale pues él va a ir al 0 que es lo que le está diciendo vale aunque lo haya movido
00:34:33
ahí fíjate vale que es lo que hay que hacer jugar a nuestro favor y aquí dentro del hijo tiene ese
00:34:39
movimiento izquierda-derecha, ¿vale? Desde un punto.
00:34:47
Pero eso no quita que luego
00:34:50
el padre, que no tiene la animación, sino
00:34:51
que está moviendo al hijo que hay
00:34:53
dentro, tú lo puedas mover y colocarlo
00:34:55
donde te apetezca. Es decir,
00:34:57
el movimiento relativo
00:34:59
es el que da el padre, y fíjate que es el que cambia.
00:35:01
61-9, 37,
00:35:04
¿vale? El de dentro,
00:35:05
es que aunque lo cambiemos, lo que acabo de decir, va a
00:35:07
empezar en el 0-0-0 y va a ir
00:35:09
a lo que haya puesto aquí.
00:35:11
Bueno, no sé qué he puesto. Bueno, empieza del 20
00:35:13
al 10, al 0. Bueno, son
00:35:15
coordenadas absolutas, ahí
00:35:17
da igual lo que le digas, él dice yo tengo que ir al
00:35:19
0, 0, 0 y voy al 0, 0
00:35:21
es con este con el que le das el desfase de movimiento
00:35:23
y luego arrastras donde quieras
00:35:25
¿vale? entonces el prefab dale un padre
00:35:27
y de hecho yo te diría, normalmente
00:35:29
es bueno que los prefabs tengan un padre
00:35:31
precisamente por esto, ¿vale? porque
00:35:33
toda la lógica del prefab está
00:35:35
dentro de esa estructura
00:35:37
y siempre hay algo de orden superior que
00:35:39
solo sirve para recolocarlo
00:35:41
sí, sí, sí, tal cual
00:35:42
pues nada
00:35:45
gracias porque
00:35:47
porque no lo estaba pillando
00:35:48
no, es una cosa muy tonta
00:35:50
pero es que es la clave, además que
00:35:53
esa práctica
00:35:55
sí que la tenía bien clara
00:35:56
en todos los ejercicios he estado
00:35:58
procurando siempre eso
00:36:00
pero seguramente ese es el problema
00:36:02
que estoy teniendo también con el
00:36:05
con el tema del
00:36:07
personaje que se desliza sobre la plataforma
00:36:09
no, ahí seguramente
00:36:11
es decir, creo que es otra cosa
00:36:13
bueno, esto que es normal
00:36:14
claro, tú dices, yo estoy moviendo la plataforma
00:36:16
se mueve de izquierda a derecha, pues si la muevo
00:36:19
aquí, pues por qué no, claro, tú ten en cuenta eso
00:36:21
que son coordenadas absolutas, lo que está leyendo
00:36:23
¿vale?
00:36:25
esto es normal, digo que es parte del proceso
00:36:26
lo que le pasará al personaje, es verdad que
00:36:28
sin verlo, no sé qué método
00:36:31
estás usando, si el
00:36:33
que se sugiere, digamos
00:36:34
en el
00:36:37
en el enunciado, que es que
00:36:37
cuando toca
00:36:41
que cuando toca
00:36:41
vale cuando entra en colisión el personaje vale con otra plataforma móvil vale que tenga esta
00:36:45
etiqueta se hace se hace hijo hijo vale claro que ocurre que sí es hijo y lo que se está usando
00:36:52
fíjate que es el transformó vuelvo a las cinemáticas vale si se está moviendo mediante físicas pues ya
00:37:02
ahí hay problemas, ¿vale?
00:37:09
Es decir, lo que está cogiendo en todo
00:37:11
rato son las coordenadas. ¿Qué
00:37:13
puede ser la clave para que luego trastees?
00:37:15
Pues precisamente lo que te he dicho antes, que
00:37:17
la animación que está arrastrando
00:37:19
esa plataforma, aunque sea
00:37:21
un clip de animación, joder, aquí, ¿vale?
00:37:23
La animación
00:37:26
sea en
00:37:27
base al update y no mediante
00:37:29
las físicas. Entonces, claro,
00:37:31
aunque estén moviendo una cosa,
00:37:33
se está moviendo a una velocidad que no es la misma del personaje.
00:37:35
Igual eso puede ser, ¿vale?
00:37:37
puede ser una de las razones luego hay cosas que son más avanzadas y esto ya es darle vueltas y
00:37:39
ahí la idea os ayudaría más porque si no es muy enrevesado que es por ejemplo ahora me dice que
00:37:45
creo que quiere decir algo pero que cuando bueno justo deja esta plataforma pero que cuando pones
00:37:50
el efector este de la superficie para pasar de una otra claro hay un punto que hasta que no bueno que
00:37:56
hasta que no se posa
00:38:03
puede estar arrastrando al
00:38:05
personaje, porque en cuanto entra en colisión
00:38:07
y ahí está entrando en colisión
00:38:09
pues ya lo arrastra, ¿vale?
00:38:11
Entonces, ahí ya es donde
00:38:13
hay que ir discriminando cosas como, bueno,
00:38:15
igual que se hace para los dobles saltos, que se hace un
00:38:17
pues eso, un raycast
00:38:19
o un ground checker o algo así
00:38:21
aquí, pues por ejemplo, esta
00:38:22
línea que es
00:38:25
aparte, digo, para que se haga padre
00:38:27
y coja el movimiento del padre
00:38:29
¿vale?
00:38:31
está con este método
00:38:31
que dice
00:38:34
lo que quiere decir es
00:38:34
que esté debajo del personaje
00:38:37
la plataforma
00:38:39
¿por qué? porque si no empieza a arrastrar al personaje
00:38:40
y lo que queremos es que hasta que no se puse por arriba
00:38:44
no arrastre nada, simplemente está pasando
00:38:46
que es un movimiento un poco antinatural
00:38:47
que por un lado sí pueda pasar
00:38:49
y por otro no, que es lo que tiene ese efecto
00:38:51
entonces
00:38:53
mediante normales
00:38:55
las normales básicamente para que detecte
00:38:57
que algo está por encima
00:38:59
tiene que estar acercándose
00:39:00
a la unidad, ¿vale? Pues con eso
00:39:03
puedes discriminar que esté
00:39:04
recibiendo esa colisión desde un ángulo superior
00:39:05
¿vale? Entonces es lo que
00:39:08
discrimina que esa condición pues
00:39:10
de verdad lo haga padre, si no
00:39:12
le hace padre en cuanto empieza a atravesar la
00:39:14
plataforma. Sí. Claro,
00:39:16
ahí ya hay muchas cosas y muchos detalles que hay
00:39:18
que ir puliendo, ¿vale? Que eso es normal
00:39:20
digo, no se puede ver todo
00:39:22
pero bueno, que es ir buscando un poco la lógica
00:39:24
de por qué ocurre y en tu caso yo creo
00:39:26
que es eso, que son dos tiempos de ejecución que no
00:39:28
están funcionando del todo parejos sí porque al principio lo resolví con el collider de los pies
00:39:30
digamos diciendo que es que sólo cuando estuviese haciendo colisión con la plataforma el collider de
00:39:40
los pies vale sí también y y bien pero bueno yo no sé si tú el robot lo tienes también metido
00:39:49
dentro de un
00:39:58
de un anti-object
00:40:00
Sí, ahora te explico
00:40:02
Dices la detección del suelo, ¿no?
00:40:04
Bueno, o sea, en general
00:40:07
es que, como te digo
00:40:09
lo que me raya muchísimo es que
00:40:10
es solo
00:40:13
la plataforma que tiene una animación
00:40:15
la que hace
00:40:16
que se desplace
00:40:19
en las otras que van
00:40:21
por código, el personaje cae encima
00:40:23
efectivamente el collider de los pies
00:40:25
detecta la plataforma y se queda ahí clavado y si yo me muevo reproduce la animación se desplaza
00:40:27
etcétera pero en el otro es que es en el momento que entra en contacto se queda ahí y cuando se va
00:40:33
para la derecha del personaje resbala hacia la derecha y cuando se queda como en el sitio
00:40:38
no no se cae en el sitio y al moverse hacia la derecha el personaje se desliza sobre la
00:40:45
plataforma y se le suma se mueve más rápido de lo que debería y estando quieto y hay veces que
00:40:50
incluso he probado que sea no tenga velocidad horizontal sino que caiga desde arriba con
00:40:58
velocidad cero nada igual es como que no sé exactamente ahí claro siempre el código todo
00:41:06
es pensar, pero puede ser
00:41:16
que en algún momento
00:41:19
estés sumando, es decir
00:41:20
no solo lo estés haciendo hijo
00:41:22
sino que le estés sumando
00:41:24
una velocidad
00:41:26
un transfer, otra coordenada
00:41:28
o algo así
00:41:31
tiene que ser, luego hay otro
00:41:31
problema
00:41:34
del RECAS
00:41:35
es decir, de la detección de
00:41:38
colisiones, que es asegúrate
00:41:40
de que de verdad esa colisión la está detectando bien
00:41:42
y no va a saltos o algo así, aunque si lo que está
00:41:44
haciendo es añadir más movimiento
00:41:46
no va a ser por ahí, lo digo porque
00:41:47
si por ejemplo
00:41:50
¿cómo estás detectando tú el suelo? ¿cuál de los métodos
00:41:52
estás usando? ¿cuál de las fórmulas?
00:41:54
¿de lo que tienes ahí?
00:41:57
no, es decir, tú
00:41:59
en el tema hay varias
00:42:00
formas para que se pueda detectar
00:42:02
que el personaje se ha posado en un suelo
00:42:04
sí, no, yo igual que ahí
00:42:06
o sea, con
00:42:08
un tag
00:42:09
comparando un tag
00:42:11
Sí. Que bueno, en mi caso se llama como la plataforma, bueno, se llama diferente, pero pues eso, así como lo tienes tú.
00:42:13
Vale, ten cuidado
00:42:26
porque quizá tenga que ver
00:42:28
claro, aquí ahora mismo
00:42:31
tú estás viendo esto, pero en realidad
00:42:33
también hay otro factor
00:42:35
que es que para yo poder moverme
00:42:37
a ver, en mover
00:42:38
se tiene que cumplir
00:42:40
se tienen que cumplir condiciones
00:42:43
de que esté posado en un suelo
00:42:44
es decir, aparte de que esté detectando que hay una colisión
00:42:46
también
00:42:49
hay otra condición por ahí
00:42:51
que es la de
00:42:53
is grounded
00:42:54
¿vale? que esta es la que impide
00:42:57
los dobles saltos, que entiendo que algo habrás
00:42:59
hecho en ese sentido ¿verdad?
00:43:01
Sí, sí, sí, y de hecho
00:43:02
el suelo y las plataformas tienen
00:43:04
un layer
00:43:07
ground que también lo utilizo
00:43:09
vale
00:43:11
o sea, ya te digo
00:43:12
es que el suelo de las plataformas estáticas
00:43:15
y la plataforma que se mueve por código
00:43:17
funciona perfectamente
00:43:19
es en esta otra
00:43:21
Me da la sensación como que el offset que recibe con respecto al transform local de la plataforma, es lo que, o sea, por decirte, si cayese en el cero exacto, a lo mejor el muñeco no se movía. ¿Me explico?
00:43:22
Sí, prueba a mirar otra cosa, ¿vale? Que puede ser que también, digamos, la plataforma la hayas hecho más grande o más pequeña después. ¿Y qué ocurre? Que como es más grande o más pequeña, realmente el movimiento también se, digamos, se distorsiona un poco, porque está haciendo un cambio de escala y de movimiento.
00:43:41
a ver si va a ir por ahí y está cogiendo un transform
00:44:03
de algo que es más pequeño y por eso da
00:44:05
como esas variaciones
00:44:07
no lo sé
00:44:09
y si no mira en el código que no estés
00:44:10
añadiendo, es decir, que no
00:44:13
sea solo que le conviertes hijo
00:44:15
¿vale?
00:44:16
mira esa plataforma en la que te pase eso, a ver si hay
00:44:19
algo cambiado raro de la escala
00:44:21
que puede ir por ahí, pero
00:44:23
eso
00:44:25
en el código comprueba
00:44:27
que no haya algún momento en el que
00:44:28
No solo no se... Es decir, se puede hacer
00:44:31
de más formas. Es decir, aquí se hace
00:44:33
haciendo que coja de padre
00:44:35
y es como la jerarquía
00:44:37
de hacer lo hijo, ¿vale?
00:44:39
Como esto, ¿no?
00:44:40
Pero también hay otra forma... Es así, ¿no?
00:44:42
Como lo estás haciendo. Digo que también se puede hacer
00:44:45
coge exactamente el transform y
00:44:47
que lo añada. No, pues si es así
00:44:49
no debería dar ese problema.
00:44:51
Pues revisa eso, que el movimiento
00:44:53
cambia los modos
00:44:54
de update, ¿vale? Para
00:44:57
ver si...
00:44:59
prueba lo de la escala a ver si es que al cambiar la escala claro el movimiento relativo no es el
00:45:00
mismo que el aparente porque está cambiando a lo mejor el punto de eso puede ser porque además hice
00:45:08
la plataforma con un cuadrado o sea utilizando no utilizando el spray rosa sino o sea lo empecé
00:45:15
varias veces y...
00:45:28
Pero sí recuerdo que lo escalé.
00:45:30
A ver, voy a probarlo, ¿vale? Lo he hecho
00:45:32
más grande. Joder, en pasaje
00:45:34
me mato, pero voy a quitar todas las torres porque
00:45:36
si no esto se convierte en un tostón.
00:45:38
Estas torretas
00:45:43
eran... Estas, si no me equivoco.
00:45:44
A ver.
00:45:49
No, estas no eran... Vale, es esta.
00:45:51
Fuera. Vale.
00:45:54
Si...
00:45:57
Yo voy a esta
00:45:58
plataforma que le cambia la escala, si te fijas,
00:45:59
En teoría debería hacerlo bien
00:46:01
En teoría lo hace
00:46:04
Espera que no sé si está viendo algo
00:46:09
¿Ves que da como saltitos ahora?
00:46:10
Da, sí
00:46:15
Y en el pequeño no da esos saltitos igual
00:46:16
Bueno, lo está dando un poco por la
00:46:18
Porque nos estamos fijando
00:46:21
A ver, lo que sí que sería
00:46:22
Más evidente es
00:46:25
Si en X
00:46:26
Pero no es lo mismo que te pasa a ti
00:46:27
No sé, lo que te digo, si en X es mayor la escala
00:46:29
De la plataforma, a ver si
00:46:32
Te desliza el personaje sobre la plataforma
00:46:34
Es una cosa muy extraña
00:46:36
Pero bueno
00:46:40
Seguro que hay alguna chorradiña por ahí
00:46:40
Que es lo que está haciéndolo
00:46:43
Pero bueno
00:46:45
En principio pueden ser
00:46:46
Las posibilidades
00:46:48
¿Vale?
00:46:51
No sé si
00:46:53
Tienes alguna duda más
00:46:54
Porque si no quiero que veamos un par de cosas
00:46:57
¿Vale?
00:46:59
Vale
00:46:59
Pues arranca
00:47:00
Y si me sale algo te lo digo
00:47:02
después pero en principio no una chorrada bueno esta plataforma se queda ahí que no me interesa
00:47:05
aquí creo
00:47:12
está fuera está la que ha añadido a no con dónde está la que ha añadido ahora
00:47:16
no me gusta bueno es que está en la plataforma que empieza en un sitio y se va al otro lo que
00:47:24
hemos dicho, vale, esta es, vale
00:47:28
vale, simplemente
00:47:29
creo que en el tema lo pongo, que es
00:47:34
cuando el personaje a veces
00:47:36
digo, porque es un comportamiento
00:47:38
indeseado y es muy normal, cuando estamos caminando
00:47:40
y nos vamos a una plataforma y caminamos
00:47:42
hacia ese lado, si no hacemos una operación
00:47:43
se queda ahí como anclado
00:47:46
vale, lo voy a hacer con esto
00:47:47
a lo que me refiero es
00:47:49
me cargo esto, que es la solución, vale, puede pasar
00:47:51
que estemos en un juego
00:47:54
y estamos aquí, digo, vale, me voy a caer
00:47:55
pero yo sigo avanzando
00:47:58
hacia la plataforma, ¿vale?
00:48:00
estoy dando hacia la derecha, se queda ahí
00:48:02
atascado, ¿vale? esto no es
00:48:04
no es bueno y sobre todo además
00:48:06
si no se discrimina
00:48:08
el salto según que parte, también incluso se podría
00:48:09
saltar, lo cual si no es la mecánica que
00:48:12
queremos, pues no
00:48:14
facilitaría mucho pasarse el juego, ¿no?
00:48:15
entonces simplemente aquí
00:48:18
es donde tenemos que poner en juego
00:48:19
los material physics en la
00:48:21
plataforma y añadir una vale que sea de fricción 0 vale para resolver eso vale 0 y 0 eso es una
00:48:24
solución entonces como no hay nada de fricción digamos nada lo que agarrarse aunque avancemos
00:48:32
hacia ahí pues se cae para allá vale eso es importante otra otra cosita bueno lo de las
00:48:37
torretas que lo pongo como opcional porque verdad que tiene más chicha hay una cosa que me parece
00:48:45
interesante que veamos que es el método sendmessage que no sé si en tu caso lo has usado más avanzado
00:48:50
pero es conveniente conocerlo entonces voy a hacer un hay más dudas por tu parte voy a hacer
00:48:58
un pequeño repaso de qué hace ese método vale para que lo conozcamos no sé si lo has usado
00:49:02
te suena sendmessage enviar mensajes es como como una suscripción a eventos si en cierto modo es eso
00:49:09
es pues entre todos los métodos que haya envía un envía un mensaje que vaya repasando y el que
00:49:19
se llama igual me lo lanzas si es algo parecido entonces claro para estas torres del principio
00:49:26
si nos fijamos aquí no disparan hasta que yo llego a un punto y me empiezan a disparar todas
00:49:32
vale ya eso básicamente es porque en él en un cierto punto he añadido un collider vale un
00:49:38
trigger vale que marca un área para que cuando yo entre pues las torretas empiecen a disparar
00:49:46
vale bueno ya he hecho este collider estrellas y me meto aquí esto es lo que me interesa vale
00:49:52
si con el personaje vamos andando si entramos en ese trigger vale si cuando si es decir esto
00:49:58
lo tiene la trampa vale si lo que entra se llama robot vale como en nuestro caso activamos la
00:50:06
torreta vale y activar la torreta es algo que tenemos aquí que pasa que cuando salgo hago
00:50:12
exactamente lo mismo también activar la torreta y stop fire vale es el mismo método y le he pasado
00:50:20
un parámetro que es un nombre de un método esto está bien porque de esta forma cambiando aquí
00:50:25
digamos el string que tengamos luego podemos enviar este mensaje con el nombre del método
00:50:32
que sea, es decir, si nos metemos
00:50:38
en la torreta, ¿vale? Va a tener un
00:50:40
método preparado que se llama stopfire y otro starfire
00:50:42
y lo que discrimina que se lance uno
00:50:44
u otro es precisamente
00:50:46
el nombre. Entonces
00:50:48
con un message se puede fácilmente
00:50:50
activar
00:50:53
en remoto, digamos, en otro
00:50:55
script, métodos, ¿vale? Sin tener
00:50:56
que ir uno a uno discriminando mucho.
00:50:58
¿Qué se hace aquí
00:51:01
también? Hacer un
00:51:02
array, ¿vale? Esto, el problema que puede tener
00:51:04
es que trate todos los objetos,
00:51:06
todas las torretas que tenemos aquí como una sola
00:51:08
¿vale? tenemos todas estas torretas
00:51:10
aquí preparadas, si no
00:51:12
tendríamos que hacer
00:51:14
distintos, bueno pues
00:51:15
luego al lanzarlo distintos
00:51:18
delays o para que disparen
00:51:20
en distintos momentos, pero
00:51:22
el GameObject del FindObjects
00:51:23
with Tag, ¿vale? que nunca hemos
00:51:26
hablado de él, es un método muy conveniente para
00:51:28
meter y guardar en un array
00:51:30
¿vale? que tenemos aquí preparado en este caso
00:51:32
todos los objetos, que
00:51:34
podrían ser las plataformas, podrían ser las torretas
00:51:36
en este caso, que tengan el tag
00:51:38
torreta
00:51:40
torreta 1
00:51:41
¿vale? entonces
00:51:44
dentro de esa torreta 1 es donde está ese
00:51:46
script de disparar
00:51:48
o no disparar, ¿vale? que lo que
00:51:50
hace es lanzar la animación
00:51:52
de, pues que sale el fuego
00:51:54
¿vale? que ahí os dejé un
00:51:56
os dejé un
00:51:58
una hoja de sprites
00:52:00
del, bueno
00:52:02
la tienes vista por ahí, ¿vale? pero bueno
00:52:03
básicamente es la que hay ahí
00:52:05
Esta de torreta 1
00:52:08
Enseño simplemente por si alguien ve esto
00:52:09
Y tal, creo que es una torreta que
00:52:12
Si nos fijamos aquí está como
00:52:14
Está como disparando
00:52:15
¿Vale?
00:52:18
Sí, una animación de un destello
00:52:19
Eso es, e importante es
00:52:21
Que, ¿vale?
00:52:24
Porque esto a veces dice, oye, ¿cómo hago para que se lance
00:52:26
La bala en cierto momento?
00:52:28
Pues recordemos
00:52:31
Que en los propios clips de animación se pueden añadir
00:52:32
Eventos, ¿vale? Para que en cierto momento
00:52:34
Se dé una operación
00:52:36
Esto por código sería complicado, es decir, en tal fotograma que se lance. Por poder se puede todo, pero sería complicado. Entonces, recordemos que aquí, yo por ejemplo, en ese Starfire, he creado un método que lo que hace es instanciar un prefab de bala, que luego asocio aquí al evento, es este de Ballet, para que se lance, igual que se lanzaban las columnas en la UT2, con ya un movimiento, etc.
00:52:37
Si te fijas en tu caso, tenemos este método esperando aquí y hasta que no se lanza la orden de que empiece a ejecutarse la animación de Fire en el Animator Controller, no olvidemos que dentro del Animator Controller lo que hace es meterse distintos clientes de animación como este, asociamos por un lado que se empiece a ejecutar una animación,
00:53:03
Pero también, de manera vinculada, estamos haciendo que en cada repetición, a ver, lo coloco aquí, se lance un proyectil con este instantiate, ¿vale? Entonces, que es una lógica un poco enrevesada, pero es muy conveniente usar los eventos de las animaciones para, bueno, como os ponía en el tema, pues que cuando bote una bola, pues cuando en el fotograma justo en el que se posa, pues puede haber un método, ya veremos cómo se hace con los sonidos en el tema 7,
00:53:27
que lance el sonido de boing
00:53:56
del bote cuando toca ahí
00:53:59
claro, para que coincida justo con ese fotograma
00:54:00
no olvidemos que están los eventos
00:54:03
de animación
00:54:05
que vienen explicados en el tema
00:54:05
pero importante porque es una forma fina
00:54:08
de en un movimiento
00:54:11
en una animación pues indicar
00:54:13
que ocurra algo
00:54:14
a través de script
00:54:16
vale, entonces
00:54:18
también aquí se pone en juego
00:54:20
que esto es importante
00:54:23
y a primeras suele ser complicado
00:54:24
igual que hemos creado un array
00:54:27
que hemos dicho, todo lo que tenga
00:54:28
el tag torreta1
00:54:30
que se guarde en ese array, para usarlo
00:54:33
¿vale? bajo el nombre de torretas
00:54:35
claro, si en cierto momento
00:54:36
yo quiero que cada torreta de manera independiente
00:54:39
lance su
00:54:41
bala, ¿vale?
00:54:42
pues para ir yendo una a una
00:54:45
¿vale? hacemos un bucle por todas las torretas
00:54:47
que hemos metido en el array, existe el forEach
00:54:49
¿vale? que dice
00:54:51
dentro de torretas
00:54:52
en cada, y aquí creamos
00:54:54
una nueva variable
00:54:56
llamada torreta, como se puede llamar
00:54:58
canon
00:55:01
esto recordemos que es
00:55:02
cuando declaramos una variable
00:55:04
pues estamos diciendo
00:55:06
que
00:55:07
le estamos dando el nombre para que en este ámbito
00:55:08
se ejecute, pues eso
00:55:12
en ese cañón, dentro de cada uno de
00:55:13
esas torretas que se han metido
00:55:16
coge el script llamado
00:55:18
turret, y esto es lo de siempre
00:55:20
aquí ponemos un get component turret
00:55:22
y básicamente lo que estamos haciendo es ver
00:55:24
dentro de los componentes cuál se llama turret
00:55:26
y resulta que es un script, podría ser
00:55:28
animator, sprite renderer, ¿no?
00:55:30
y dentro de ese turret
00:55:31
que lo hemos guardado aquí, ¿vale? de ese script
00:55:33
mándame un mensaje
00:55:36
¿vale? con este nombre
00:55:37
stop fire o start fire
00:55:39
que es lo que hace básicamente, se mete ahí y en cada
00:55:41
torreta, cada game object independiente
00:55:44
pues empezará a lanzar el fuego
00:55:46
o lo parará, y cuando
00:55:48
se lanza ese fuego, además
00:55:50
en esa propia en ese propio clip de animación se instancia una bala en cierto momento se están
00:55:51
como encadenando distintos pasos pero de esto creo que es importante porque es la gracia de
00:55:58
ir usando un poco todo lo que vamos conociendo y a mí esto me cuesta un montón digo entiendo que
00:56:04
a todos nos cuesta en plan hilando y tal pero bueno es sobre todo ir hasta yéndose e ir viendo
00:56:12
los pasos y decir vale yo quiero que en cierto momento vale pero por ejemplo esto que igual
00:56:19
alguien intenta ir por otro camino de juego pues yo creo que la bala sea según se lanza el según
00:56:24
se empieza el fuego no digamos a los tres segundos con un inbox pues no se puede hacer directamente
00:56:31
con el clip de animación con un evento vale sino para una cosa tan tan específica esto es la mejor
00:56:37
opción claro por eso sobre la animación que si no me equivoco hace dos o tres tutorías me hablaste
00:56:45
creo que fuiste tú me preguntaste de cómo animar algo y te dije no no es que esto lo verás cuando
00:56:55
vayamos a los clip de animación que es donde igual que hacemos en premiere en after effects donde de
00:57:01
verdad podemos ser muy finos porque lo hacemos nosotros a nivel de fotograma puedes meter código
00:57:06
Eso es, poder meter momentos
00:57:14
Dentro de la línea temporal
00:57:17
De que se lance un código
00:57:19
¿Vale? Y luego otra cosa
00:57:21
Que bueno, es que esto sí que viene
00:57:23
Creo que he explicado en el enunciado
00:57:25
Claro, la torreta para que se vaya orientando
00:57:27
Hacia el personaje, todas están
00:57:29
Por defecto, enchufando hacia arriba
00:57:31
Pero si nos fijamos
00:57:33
Voy a cerrar esto
00:57:34
¿Vale? Se va moviendo buscando al personaje
00:57:37
¿Vale? Esta rotación
00:57:39
Hay una forma de hacerlo
00:57:41
que es con esto de decirle vale esto cada torreta tiene esto vale el transforma es decir la parte
00:57:43
hacia la que apunta hacia arriba vale que realmente apunta hacia donde yo le estoy diciendo en esto
00:57:50
anterior vale y bueno es una práctica normal que si tú coges un punto y le restas al que tiene que
00:57:55
mirar vale lo que hace ya esa orientación vale aquí bueno aquí he puesto un pequeño offset para
00:58:03
que vaya a la cabeza del jugador pero vamos se podría poner el jugador y si a esa posición se
00:58:10
le resta a la que quieren decir a la que quieren mirar se le resta la del propio objeto vale lo
00:58:15
que hace es mirar hacia allí y con esto combinaciones con lo que se hace vale por
00:58:22
la parte de arriba de la torreta del sprite va a estar mirando hacia donde yo le digo aquí que es
00:58:26
el que es el punto donde está el personaje vaya si bueno si está claro pues no sé si tienes así
00:58:31
algo más alguna duda quieres que veamos algo no ya me toca pelearme con esto para cerrarlo
00:58:40
básicamente y bueno esto esto no lo quita nadie y las tareas de hecho están planteadas para que
00:58:49
os peleéis un poco, porque
00:59:00
cuando haces un juego
00:59:01
es que no es fácil nunca, no es
00:59:03
directo nunca, bueno
00:59:05
pues el darle vueltas
00:59:07
y el de pronto que una condición que funcionaba
00:59:10
en cuanto añades otra acción del personaje
00:59:12
de pronto tienes que revisar
00:59:13
¿vale? pues es importante
00:59:15
de hecho, llegan puntos
00:59:17
por ejemplo aquí que para el salto
00:59:19
en mi caso, que bueno
00:59:21
puede hacerse, seguramente se puede hacer incluso
00:59:23
más eficiente, pero para que el salto se desencadene
00:59:25
y se, bueno, y se añada la fuerza
00:59:28
y se desencadena la animación
00:59:29
de salto, pues ya hay cuatro
00:59:32
cuatro booleanas
00:59:33
y son booleanas que se van activando
00:59:35
y desactivando, pues en cuanto
00:59:38
metes otro factor, normalmente
00:59:39
no es raro que te toque meter otra
00:59:41
booleana que se activa o se desactiva
00:59:44
bueno, pues ahí es donde
00:59:45
toca darle vueltas
00:59:47
al tema
00:59:50
yo eso lo he estado haciendo desde
00:59:50
desde la animación
00:59:53
el
00:59:55
¿El salto, por ejemplo?
00:59:57
Sí, casi todas las condiciones. Evidentemente en código hay algo también, ¿verdad? Pero quiero decir...
00:59:59
Ah, bueno. ¿Que lanzas eventos que activan y desactivan las booleanas?
01:00:07
No, que a nivel de las animaciones me refiero.
01:00:13
Ah, que lo usas para las animaciones. Sí, sí, claro.
01:00:18
No de la función como tal, sino en las animaciones, justamente ir combinando si está en el suelo, si tiene velocidad o no tiene velocidad y estas cuestiones. Pero bueno, que sí, que se va haciendo cada vez más complejo, sobre todo cuanto más fino lo quieres hacer, que al final es para conseguir que no se note nada de lo que estás haciendo.
01:00:20
si para que todo sea invisible bueno ahora es lo de siempre lo bueno es que en cuanto tenga la
01:00:50
lógica de este juego tú ya lo puedes hacer todo lo grande que quieras que es ir duplicando lo
01:00:56
ampliando lo complicado es hacer el código que funcione me explico igual que en el de la bola
01:01:00
pues ya teniendo dos niveles con distintas mecánicas pues puedes ir haciendo más niveles
01:01:05
y ponerle las barras en distintos puntos tal que al final es establecer bien la mecánica y
01:01:10
Y luego si es un juego de niveles, un arcade y tal
01:01:16
Pues así, casi más en lo visual
01:01:18
Ir metiendo más elementos
01:01:20
Sí, cambiando
01:01:22
Algunas configuraciones y tal
01:01:24
Yo por ejemplo lo de la dificultad
01:01:25
Lo dejé en un punto
01:01:28
Porque dije, esto es eterno
01:01:30
- Materias:
- Imagen y Sonido
- Niveles educativos:
- ▼ Mostrar / ocultar niveles
- Formación Profesional
- Ciclo formativo de grado superior
- Primer Curso
- Segundo Curso
- Subido por:
- Daniel M.
- Licencia:
- Todos los derechos reservados
- Visualizaciones:
- 1
- Fecha:
- 11 de marzo de 2026 - 20:30
- Visibilidad:
- Clave
- Centro:
- IES CIFP a Distancia Ignacio Ellacuría
- Duración:
- 1h′ 01′ 38″
- Relación de aspecto:
- 1.78:1
- Resolución:
- 1920x1080 píxeles
- Tamaño:
- 599.35 MBytes