Tutoría 10 - DEIM - UT6 y 7 - Curso 24·25 - 29 Abril - 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 tutoría de DEIM
Bienvenidos a esta tutoría número 10.
00:00:01
Vamos a ir viendo cuestiones relacionadas con la tarea principalmente de la unidad 6.
00:00:04
Ya tenéis abierta la unidad 7. Antes de Semana Santa ya se abrió la última unidad.
00:00:12
En la que, por cierto, y ya aprovecho, en esa unidad 7...
00:00:17
Ah, bueno, una cosa muy importante es que os comparta la pantalla,
00:00:21
porque si no, no veis de lo que os hablo en ocasiones.
00:00:24
Vale, confirmadme que estáis viendo ahora un Visual Studio, porfa. Sí, vale, genial. Pues voy a poner aquí de todos modos el aula. Vale, aquí.
00:00:27
Si tenéis el tema 7 y como ponen el mensaje que os puse, hay partes. A ver si no me explico mal. Digamos que todo el tema es materia de examen, pero sí que es verdad que cuando llega un punto, cuando llegamos ya a diseñar para dispositivos móviles, sobre todo a partir de aquí, que se habla de gafas de realidad virtual, realidad aumentada, gestión de GPS,
00:00:41
son cosas en algunos casos que bueno lo del móvil todo el mundo tiene un móvil es verdad que como
00:01:10
no se exige como al contrario que el ordenador como un dispositivo que usar vale en lo que me
00:01:15
meto sobre todo son en cuestiones más teóricas que en otra cosa pero aún así por ejemplo aquí
00:01:24
se habla de una aplicación de para controlar desde el móvil para hacer un compilado una exportación
00:01:29
desde el móvil y testear directamente nuestro proyecto
00:01:36
con los inputs del móvil
00:01:38
porque está aquí la pantalla, a diferencia del ordenador
00:01:39
pues hay funcionalidades que no se pueden
00:01:41
realizar en un ordenador
00:01:43
realidad virtual igual, por mucho que se hable aquí
00:01:45
pues no tenéis unas gafas, no tenéis por qué
00:01:48
tenerla, realidad aumentada
00:01:50
comunicación con dispositivos externos
00:01:51
se habla de Arduino un poco
00:01:54
lo que quiero que quede claro es
00:01:55
aunque yo creo que es todo interesante y en la medida de lo que podáis
00:01:57
intentéis ponerlo en juego
00:02:00
estas partes
00:02:02
Entonces, si entran en el examen, que algo entrará, aunque no es a lo que más peso voy a dar, pero algo entrará, a nivel teórico sí que deberíais saber el temario. Por ejemplo, llegáis a esta parte de realidad virtual. Es verdad que lo de las gafas, no voy a preguntar cómo programar directamente para las gafas, pero por ejemplo aquí hay una introducción de que realidad virtual, aumentada, mixta, extendida, todo esto puede entrar.
00:02:05
Luego ya empieza a hablar de modelos, que los modelos también se podrían preguntar. La MetaQuest 3, dado que lo pone aquí, ¿para qué categorías se dirigen principalmente? Ese tipo de cuestiones sí que pueden ser materia de examen.
00:02:31
Lo que no va a ser materia de examen es que os diga cómo se configuran las metacuests, en qué menú meterse, cuestiones concretas de los dispositivos. No va a haber. Desde luego aquí os dejo quien las tenga que pueda iniciarse y como os comenté en su momento hay un curso de especialización al que podéis acceder cuando tengáis el título de este, que es ese curso de realidad virtual y desarrollo de videojuegos.
00:02:45
creo que se llama así, si no era muy parecido
00:03:11
y ahí se habla en concreto
00:03:13
de esto y es más asentado
00:03:15
a esto, aquí es verdad que eso
00:03:17
hacemos una introducción porque tenéis que conocerlo
00:03:18
pero no es
00:03:21
en el examen no va a ser parte del contenido
00:03:22
sé que esto que os estoy
00:03:25
diciendo de si entra pero no entra
00:03:27
genera confusión, pero ya os digo
00:03:29
sobre todo lo teórico, ya cuando
00:03:32
se meta en cuestiones muy prácticas
00:03:33
no
00:03:36
miradlo
00:03:37
si os interesa, pero no es
00:03:39
parte del examen, pero por ejemplo
00:03:41
al llegar a realidad aumentada
00:03:43
habla aquí de paquetes
00:03:44
¿vale? como paquetes básicos para
00:03:47
que son como kit de desarrollo
00:03:48
que
00:03:51
se pueden usar desde Unity
00:03:52
se pueden conectar con Unity
00:03:54
bueno, sí que estaría bien que os sonaran
00:03:56
¿vale? en plan pues
00:03:58
hay uno que es para Apple, otro que es para
00:04:00
Android ¿vale?
00:04:02
hay alguna biblioteca
00:04:05
que os suene, no creo que me meta mucho a preguntar
00:04:06
eso, pero podría ser ¿vale?
00:04:09
Luego, gestión de sistemas de vídeo. Esto sí que lo podéis probar si tenéis una webcam, por ejemplo, y deberíais, dado que para los proyectos finales se os pedirán. Pero bueno, si se os pregunta algo, pues también será más parte teórica. Aquí, por ejemplo, se hablan de QRs y cómo detectar patrones. Vale, pues lo teórico. Aquí habla luego de librerías, etc.
00:04:11
Pero sobre todo, la pregunta de qué es un QR puede ser perfectamente, describir para qué, más o menos cómo funciona, puede ser materia de examen sin problema. De hecho, no me extrañaría que hubiera alguna pregunta de eso.
00:04:33
del GPS
00:04:45
como se necesita un móvil
00:04:47
pues el concepto de que es un GPS
00:04:49
y algo así podría caer
00:04:51
pero no creo
00:04:54
leeroslo y un poco
00:04:54
entended como sería pero sin meternos en el código
00:04:57
¿vale? y comunicación
00:05:00
con dispositivos externos un poco lo mismo
00:05:02
que es Arduino
00:05:04
un poco
00:05:05
el software o como se podría conectar
00:05:07
con Unity pero
00:05:10
ya he llegado a un punto que
00:05:11
tampoco voy a preguntar cómo programar
00:05:13
para Arduino directamente, ¿vale?
00:05:15
Entonces, bueno,
00:05:17
es parte del temario, lo damos, pero
00:05:19
bueno, que entendáis que eso, que si entran cosas va a ser
00:05:21
más lo que os estoy repasando ahora, que es
00:05:23
pues el concepto y
00:05:25
aspectos teóricos, más que
00:05:27
cómo luego desarrollarlo. Y ahora digo
00:05:29
que esto de los conceptos de realidad virtual,
00:05:31
mixta, aumentada, extendida, esto
00:05:33
sí que es fácilmente materia de examen,
00:05:35
¿vale? Que es la parte conceptual antes de
00:05:37
alguno de los apartados
00:05:40
posteriores. Quería aclarar esto ya que estábamos hablando del tema 7, pero ahora mismo, a menos que me digáis lo contrario,
00:05:41
nos vamos a poner con el tema 6. Los que lo hayáis leído alguna duda, porque estaba antes consultando y nadie parecía estar con la tarea
00:05:51
muy avanzada
00:06:04
dudas que os surjan de lo que es
00:06:05
el tema en sí, el contenido
00:06:08
que eso creo que sí que lo he
00:06:10
que algunos si estáis ya lo habéis
00:06:12
acabado o lo habéis revisado
00:06:14
vale, vamos entonces a
00:06:16
vale
00:06:26
voy entonces a repasar ciertas cuestiones
00:06:27
¿vale? de
00:06:30
esta tarea que tenemos aquí
00:06:31
que os de, bueno, es un resultado
00:06:33
sugerido, en esta por ejemplo
00:06:36
se habla de algunos movimientos que tenga este personaje
00:06:37
como el salto, si no me equivoco lo ponía como opcional, porque tiene sus complicaciones, etc.
00:06:40
Hay unos zombies con cierta inteligencia artificial a través de Nazmesh que cuando te localizan
00:06:45
veis que empieza a seguirme y me intenta cazar, y cuando se acerca, si os fijáis, me empieza aquí a dar unos golpes
00:06:51
que no está configurado pero nos podría quitar vida.
00:06:57
Vamos a empezar, igual que empieza por el tema, por hablar de los terrenos,
00:07:00
De generar entornos 3D que no se basan en las primitivas típicas que hemos estado usando durante el curso, desde un plano para hacer el suelo, paredes que son cubos en realidad, sino un entorno más completo, por ejemplo, de un videojuego de mundo abierto.
00:07:07
Para ello voy a ir un poco rápido, por eso, porque se explica en el tema, pero en la versión que nosotros usamos, que es una de las cosas que queríamos que viéramos, que era que existen paquetes que aunque no estén aprobados, tienen esta indicación de que son paquetes de preview, que todavía no están aprobados, pero están desarrollándose y ya se pueden testear, ¿vale?
00:07:25
Que en este caso, aunque se puedan crear terrenos simplemente con un 3D Object y un Terrain, se crea lo que es un terreno, sí que es verdad que ya a partir de la versión 2022 en adelante se usa la otra opción, la que se os pide en la tarea y de la que se habla en el tema, que es la de instalar las Terrain Tools, este Terrain Toolbox.
00:07:44
En esta versión todavía había que ir a los project settings, si no me equivoco, e ir al package manager y activar estos preview packages. Por defecto no vienen activos y esto es lo que permite que luego, aparte de poner esta indicación que os diré seguro, aquí lo pone, está en etapas de desarrollo temprano, no se deberían usar para producción.
00:08:08
Es verdad que ya os digo, en cuanto tuvierais otra versión más avanzada, incluso este paquete funciona bien, entonces lo podríais usar. Pero hay otros paquetes, cuando os metéis en el Package Manager, veis que pone esta indicación de Terrain Tools, yo ya lo he instalado, en el tema se pone cómo se buscan, pero por ejemplo, cuando activáis esto del Preview Packages, os pueden aparecer otros, como estos que tenemos aquí.
00:08:36
Si en algún momento queréis desarrollar usando estas herramientas, tenéis que activar ese Preview Packages
00:09:00
Por efecto, en la 2022 ya os aparecerá aquí este menú del Terrain Toolbox
00:09:08
Esto que tenemos aquí, que es otra herramienta, un plugin, que sirve para crear terrenos de una forma más simple
00:09:13
Y que los terrenos también se puedan generar varios de manera conectada
00:09:19
Porque cuando se crea un terreno, por defecto lo que se genera es, por lo que se ve aquí, cuando yo he hecho esto de 3D Object y crear un terreno, si os fijáis en la zona verde, como ya tenía uno ahí.
00:09:25
Epa, espera que lo he puesto en... la he maximizado la ventana, debe ser. A ver, perdonad que aquí algo he tocado, he hecho aquí un... Ah, vale, sí. Voy a resetear el layout. Si alguna vez no lo habéis hecho, ¿vale? En Windows Layouts se puede resetear a las... a los... bueno, la interfaz, pues la ordenación que tiene. Esto creo que en el tema 1 hablábamos de ello.
00:09:40
entonces, como acabo de decir
00:10:09
aquí tenemos este terreno que acabo de crear
00:10:11
que es este naranja
00:10:13
con las herramientas de Terrain
00:10:14
que también tendréis en los terrenos que se crean con las Terrain Tools
00:10:17
de las cuales ahora podemos hablar
00:10:19
aunque creo que en el vídeo de Álvaro Holguera
00:10:21
se habla bien y en extensión
00:10:23
con esto, ¿qué ocurre?
00:10:26
que cuando queremos generar más terrenos
00:10:27
y que sea más grande, fijaos que el que yo he generado
00:10:29
finalmente para la tarea es más grande
00:10:31
que el que genera
00:10:33
por defecto
00:10:35
el objeto de Terrain.
00:10:36
Con el Terrain Toolbox lo que se puede hacer es generar terrenos más grandes
00:10:42
que cuando se van aumentando al final se pueden ir agrupando distintas áreas.
00:10:47
Hay multitud de opciones, realmente las principales es decir,
00:10:52
cuánto tiene que medir ese territorio y en qué altura.
00:10:59
Bueno, la altura es relativa, se puede poner en cero y luego ya se puede pintar sobre ella, pero la altura de la que habla, y veis que ya cuando voy alterando algunos parámetros, se van viendo reflejados.
00:11:03
En realidad, a ver, borro esta, vale, lo tengo ahí. Cuando creáis estos terrenos, la altura no se refiere a si ya aparece una altura de, en este caso, 693 metros, es...
00:11:15
A ver, un segundito, cuando lo creo, porque creo que si no voy a decir una cosa que no es. Cuando se crea un nuevo Terrain Tool, vale, vale, pues nada, ok, grouping, un segundo, ahora os explico lo que hago.
00:11:31
Cuando se genera otro, a lo que se refiere este TerrainHeight es hasta dónde puede llegar luego la altura del terreno. Cuando vayamos a ir modelando estas montañas o los relieves del terreno, van a subir los relieves hasta una altura que está especificada aquí.
00:11:42
entonces no es lo mismo la start position que sí que podría cambiar donde está ubicada vale por
00:12:06
defecto del 00 y esto es importante porque puede parecer que si lo ponemos en cero es que aparece
00:12:13
en cero luego intentamos pintar con las herramientas de que bueno pues de que se
00:12:18
eleve el terreno y no sucede nada entonces es importante también tener de primera es un poco
00:12:22
pensado que se puede cambiar posteriormente vale cuál es el cuál es la altura que va a tener ese
00:12:26
Yo voy a poner 800 y voy a decir que tenga también 1000 por 1000, ¿vale? La tarea se pedía que fuera de 500 por 500, pero bueno. También es cierto que aquí hay otras opciones que se pueden activar, viene el mapa con los hate maps para que ya aparezca con ciertos relieves, ¿no?
00:12:34
Los relieves que se van generando se pueden representar con mapas de escala de grises, en donde las elevaciones se van representando en función de si es más blanco o más negro y los valores intermedios serán más grises.
00:12:50
Pero por defecto, cuando se genera un nuevo territorio, lo que vais a ver que se ha generado, y voy a ocultar este que es el que tenía, serán cuestiones, esto era un cubo que tengo para representar el agua, es el lago que se indicaba.
00:13:03
Pero cuando tenéis un terreno, al final es esto, una malla preparada con, en este caso, y dado que se ha creado con el Terrain Toolbox, con este padre que hace grupos de terrenos, y aquí podríamos ir generando nuevos terrenos.
00:13:19
entonces cuando en cierto momento
00:13:37
vayamos teniendo estos terrenos
00:13:42
cuya configuración se puede ir cambiando
00:13:43
en estas herramientas que aparecen aquí
00:13:45
en donde se pueden cambiar
00:13:47
por ejemplo
00:13:49
la anchura
00:13:51
o las medidas
00:13:54
de este terreno
00:13:55
en cierto momento si se van generando
00:13:58
distintos terrenos y se meten dentro del grupo
00:13:59
esto también habla el tema
00:14:02
cuando se vayan creando los relieves
00:14:03
Digamos que no va a haber una costura entre ellos. Esto se puede usar a veces no solo por facilitarnos segmentar el terreno, sino porque recordad, se vio en el tema 4, que se pueden ir añadiendo escenas de manera dinámica.
00:14:05
Entonces se pueden ir, a lo mejor el personaje cuando se va acercando a este cuadradito, ¿vale? Y está dirigiendo hacia esta izquierda, ¿vale? Ahora aunque se vea así, en realidad esto es mucho más grande. ¿Vale? Puede estar andando el personaje y va andando, va andando y cuando llega a este punto queremos que cargue el horizonte. Entonces en ese momento podremos cargar otro terreno, ¿vale? Es una de las razones por las que se puede inventar porque si cargamos todo un nivel de golpe en ciertas ocasiones lo que vamos a hacer es saturar el sistema.
00:14:19
Vale, las herramientas. Voy a ir muy rápido, pero básicamente cuando se selecciona, no un grupo de terreno que como pone en el temario, si van a estar dentro de esta, digamos, si van a ser consecuentes o si se van a continuar un terreno con otro, uno de estos mallas de terreno con otro, deberían estar en el mismo grupo.
00:14:47
Dado que están en el mismo grupo, lo que de hecho aquí habrá que hacer que los hijos también estén en ese grupo, ¿vale? Si vamos a esta torquita que es la configuración, los settings del terreno, ¿vale? Pues deberán estar en el mismo grupo. Con esto directamente se podría refrescar, ¿vale?
00:15:08
Pero es para que cuando vayamos modelando este terreno, de verdad que se considere como un único terreno.
00:15:27
Luego, cuando nos metemos en las capas de terrenos en sí, ¿vale?
00:15:34
Vais a ver que os aparecen dos componentes por defecto.
00:15:37
Uno, un collider.
00:15:40
Se me entrecorta el audio, ¿me oís mal?
00:15:43
Pero nada, ¿eh? Que acabo de leer.
00:15:46
¿Me oís bien o...?
00:15:49
Es decir, ¿es problema mío si...?
00:15:51
O algunos me oís bien y otros no.
00:15:54
me escucháis bien, vale, pues
00:15:56
el compañero que ha dicho lo de se entrecorta el audio
00:16:03
claro, será tu conexión, sí
00:16:05
vale
00:16:07
vale, de hecho
00:16:08
yo te estoy escuchando ahora mismo y también
00:16:12
se me corta, así que sí, algo hay
00:16:13
en tu conexión, yo creo, lo siento
00:16:15
vale, vale
00:16:18
luego subiré la grabación
00:16:19
por si, pero bueno, si me puedes
00:16:22
seguir más o menos, pues genial
00:16:24
vale, continúo
00:16:26
eso, lo dicho
00:16:28
Van a venir con dos componentes. Uno, un collider especial de tipo Terrain Collider, que básicamente lo que intenta es adaptarse, es un collider que se adapta a los relieves que tenga el terreno.
00:16:30
Ya hablamos en su momento del Mesh Collider, que es eso lo que intenta, como ajustarse a las formas de una geometría, pero bueno, tenía sus limitaciones, en ese pinball que hicimos sucedía.
00:16:44
Aquí hay un collider que lo que hace es que el suelo y las montañas y todo tenga un collider y lo capte bien. Es como que lo han conseguido simplificar para que funcione bien.
00:16:59
También tiene, para cuando añadáis árboles, un collider que lo que hace es, si metéis los árboles a través de este menú de añadir, aquí está, de pintar árboles, que los árboles también supongan un collider.
00:17:10
Y también, pues, si te chocas con un árbol, pues que se lo detecte, ¿no?
00:17:22
Si el personaje tiene también su collider, etcétera, y está bien configurado.
00:17:28
Vale, no quiero repasar todas las opciones.
00:17:31
Ya os digo, en el vídeo de Álvaro se habla bastante de esto.
00:17:36
Pero bueno, sobre todo es que se pueden ir creando, en vez de con el Terrain Toolbox,
00:17:39
una vez se ha generado el primero, otros terrenos vecinos, ¿vale?
00:17:43
Vais a ver que cuidado cuando...
00:17:46
Y por eso es una de las cosas que hay que tener en cuenta.
00:17:48
Veis que cuando yo intento continuar aquí el terreno y lo pinto, que es clicar en estos cuadraditos, aquí hay un cuadradito que está justo en el borde y otros que se meten.
00:17:51
Si recordáis, ha habido un momento que yo en los settings he dicho, vale, en vez de ser de 1000, que sea de 1200.
00:18:00
Todos estos cambios, en principio, deberían hacerse de primera cuando se crea el terreno con este Terrain Toolbox, debería estar bien configurado.
00:18:10
Si luego queremos ampliar el territorio, pues deberíamos ir, más que nada para que no ocurran estas incoherencias, veis que ahora ya he vuelto a ponerlo en el tamaño original y como se ha creado con ese tamaño, pues está considerándolo para continuar los terrenos.
00:18:19
Yo podría seguir pintando y pintando y aumentando el terreno que veis que se están generando aquí, estos terrenos que si nos metemos en el grouping ID, pues tienen el mismo número.
00:18:33
¿Vale? Entonces yo cuando empiece a, y vamos a hacer ahora mismo la muestra, a pintar aquí con un pincel una elevación, ¿vale? Que sería en este menú de pintar terreno y dentro de todas las herramientas, también importantes para el examen, conocerlas o que os suenen las que se hablan del tema, veis que cuando yo pinto, a ver, voy a bajarle un poco la fuerza y voy a coger uno.
00:18:44
Pero fijaos como si yo cojo un pincel, igual que os he hablado antes de los Gmaps, que son blancos y negros intermedios, todo va a ser o elevación o no elevación. Ya dependerá de la fuerza con la que vayamos pintando.
00:19:09
Si, embargo, si tiene un degradado y tonos intermedios, que vayamos pintando, pues sí que tendrá, ahora le he dado demasiada fuerza, sí que pintará y veis que no se entrecorta para nada el relieve, veis que lo está cogiendo como si fuera de un mismo terreno.
00:19:22
¿Vale? Eso, si hay gamas intermedias es donde se van haciendo esos degradados en las alturas, ¿vale? Es decir, que la altura no sea, bueno, pues que tenga una pendiente en función de ese gris, ¿no? De ese suavizado.
00:19:47
Entonces con estos pinceles se puede ir pintando. Cuando tenéis instalada esta Rain Toolbox, ya os digo, en siguientes versiones ya viene instalado por defecto, hay varios atajos como la tecla A, si fijáis, yo ahora mismo no estoy cambiando aquí el valor, con la tecla A y arrastrando hacia los lados ajustamos la fuerza, es decir, cuánto se eleva cuando vamos clicando.
00:20:02
Si bajamos la fuerza, pues hay que ir pulsando más veces para que se vaya generando ese aumento de relieve, porque tenemos esto de raise or lower terrain, ¿vale? Dependiendo de qué herramienta, esto hará unas cosas u otras, ¿vale? De hecho, iréis viendo que si hago esto, vais a decir, joder, qué picos tan feos, ¿vale? Eso es porque luego hay otras herramientas de suavizado, por ejemplo, como el smooth height, ¿no?
00:20:24
Si yo ahora empiezo así a suavizar, pues voy quitándole esta apariencia picuda a lo mejor que se podría ir obteniendo.
00:20:50
Vale, lo dicho, con la A se aumenta la fuerza, con la S, de size, es lo más fácil, se varía el tamaño, se mantiene esa tecla y se arrastra el ratón izquierda a derecha.
00:21:00
Con la D se rota y los principales son esos. Puede que haya alguno más, pero los principales son esos.
00:21:10
Y luego otra muy importante, que es que normalmente en casi todas las herramientas, voy a volver a Razor Lower Terrain, que son las esenciales, con Control lo que se hace es la operación inversa. Es decir, si de primeras hace elevar el terreno con Control, cuando ahora pinto, si mantengo pulsado el Control, lo que hago es, en este caso, hundirlo, ¿vale?
00:21:15
Fijaos lo que os decía antes, que yo por mucho que pinte, me voy a alejar, por mucho que pinte aquí, empiezo a pintar, empiezo a pintar, ¿vale?
00:21:36
Sigo pintando y llega a un punto que ya no sube más. Esto es lo que hemos dicho antes de la altura, ¿vale?
00:21:44
Cuando hemos creado el terreno, le habíamos dicho esta altura, ¿vale? No va a subir más de los 800 metros de altura, ¿vale?
00:21:49
a ver porque
00:22:00
a ver si
00:22:03
se pueden guardar settings también
00:22:04
de como se exportan
00:22:07
etcétera pero bueno principalmente
00:22:09
esas son las opciones principales
00:22:11
vale hasta aquí que tal me vais siguiendo
00:22:16
con esto ya es con calma
00:22:19
pues luego hay otras herramientas de erosión
00:22:21
efectos para hacer
00:22:23
agujeros vale porque
00:22:25
lo que hemos visto es
00:22:27
Que claro, estoy elevando, pero aunque os diga que pinte con control y se va hundiendo, no va a bajar de ese punto cero. Igual que la altura tiene un tope, el nivel inferior también tiene un tope.
00:22:29
Para eso lo que se puede hacer es o pintar agujeros con esta herramienta de Paint Holes, que hará que el Collider también se atraviese.
00:22:43
Por ejemplo, si queremos que debajo de esto haya agua y se meta un personaje y pueda ir por debajo, pues habrá que hacer un agujero.
00:22:52
O la mejor opción probablemente que es subir el terreno, todo el terreno en conjunto.
00:23:00
bueno y esto es terrain tool, lo vamos a meter aquí
00:23:05
¿vale? podéis coger este grupo
00:23:08
y decirle ¿vale? pues que la posición
00:23:10
sea esta
00:23:12
¿vale? y que es lo que podéis hacer
00:23:14
bueno
00:23:16
más que esto sería elevar todo el terreno
00:23:18
con las herramientas, más que nada para que luego se pueda
00:23:20
bajar con la herramienta de
00:23:22
set height
00:23:24
¿vale? que es otra de las que se explica
00:23:27
que lo que se puede decir es ¿vale? yo quiero que
00:23:29
digamos el nivel base esté en el 300
00:23:32
Y le damos aquí y se le dice, bueno, a todas que suban hasta el 300, ¿vale? Con esto digamos que todo se achata, ¿vale? Pero lo bueno es que ahora como hemos elevado esto 300 metros, sí que hay margen de coger esta herramienta y hundir el terreno, ¿veis?
00:23:34
Que ahora lo estoy, a ver, estoy haciendo ahora el socavón. Estoy subiendo por un lado, subirá 500 máximo porque teníamos 800 de rango, ¿vale? Y de socavón pues podrá tener 300 hacia abajo, ¿vale? Pues ahí ya podemos hacer que el nivel continúe hacia abajo, ¿vale?
00:23:52
El resto de herramientas se explican en el tema. Álvaro también. No me voy a centrar tanto, a menos que me digáis que tenéis dudas. Con los árboles en el tema os dejo algunos assets que se pueden bajar, que sirven para añadirlos como árboles, ¿vale? Hay que añadirlos. Bueno, habría que buscar alguno y se pueden pintar también, ¿vale? Y con los detalles que pueden ser las rocas o las hierbas, etcétera, un poco lo mismo.
00:24:08
Lo que sí me interesa, ¿vale? Así de últimas, es cómo pintar este territorio, ¿no? Para que no se quede con este color beige. Pues hay una de las opciones de este menú de pintar terreno, ¿vale? Que en este desplegable es pintar texturas, ¿vale?
00:24:33
Igual, aquí podemos crear nuevos pinceles, podemos usar estos. Los pinceles, también nos lo pone la colación de los hate maps, se pueden crear imágenes cuadradas, eso sí, y con proporciones de múltiplo de 2 para que sea el pincel. Esto si habéis usado Photoshop es el mismo concepto que con los pinceles de Photoshop, que existen y tienen información alfa y luego también en base a la transparencia.
00:24:52
Esa escala de grises en realidad, porque aquí no es tanto alfa, aunque lo coge como tal, veis que aquí se vuelve como transparente. Es más, información de una escala de grises, con eso es con lo que vamos diciendo la forma que tiene el pincel y los detalles que va a añadir.
00:25:20
cuando queremos pintar texturas
00:25:36
es decir, cuando queremos pintar
00:25:40
el terreno
00:25:42
también en los ejemplos
00:25:43
bueno, se os indica en el tema y también
00:25:46
en la tarea, que hay un paquete
00:25:48
con muchos ejemplos de cosas para
00:25:50
practicar, ¿vale? y en ellos
00:25:52
si no me equivoco, lo tengo aquí
00:25:54
el sample
00:25:56
un segundito
00:25:58
pues si no es en este, en terreno
00:25:59
vale, aquí tenía
00:26:03
distintas
00:26:04
opciones de lo que se llaman Layers Textures, que son
00:26:06
texturas simples, que digamos
00:26:11
que aunque se repitan no se notan los extremos, simples, el concepto
00:26:15
de simples entiendo que en color para el texturizado lo visteis, y os vienen
00:26:19
ejemplos de mapas, texturas
00:26:22
que se pueden usar para este pintado. Y dentro de ello hay otro concepto,
00:26:27
estos son las capas en sí, que se diseñan en Photoshop o en algún software
00:26:30
para tenerlo importado en Unity
00:26:34
pero el concepto que sirve para estos pintados
00:26:37
es lo que se llaman las Terrain Layers
00:26:40
de hecho, para que veáis, si hacéis clic derecho
00:26:43
y creáis, dais aquí a crear elementos
00:26:46
vais a ver que hay uno, por ejemplo, que es crear un Terrain Layer
00:26:49
una capa de terreno
00:26:52
cuando yo le doy y creo uno nuevo, para que os hagáis una idea de qué es lo que pasa
00:26:53
aparte de poder darle un nombre, pues suelo Dani, yo qué sé
00:26:58
o suelo gravilla, suelo con césped
00:27:00
suelo verde el suelo como bueno pues con barro que veis que aquí por ejemplo lo que estamos viendo
00:27:04
este nuevo suelo lo que va a pedir son tres texturas vale y la digamos la principal es la
00:27:11
primera que es meter el licioso que es pues el color en sí esa textura 2d vale tiene que ser
00:27:17
una textura 2d como esta que tenemos aquí vale tiene que estar configurada como como 2d vale
00:27:23
Como, bueno, con default lo coge, parece ser, porque lo está detectando con textura 2D, ¿vale? Y eso habrá que incorporarlo en esta textura de Fuse. Aquí se puede buscar y buscar, pues, por ejemplo, esta, ¿no? Que es la que he encontrado, pero bueno, es la que hubierais arrastrado, ¿vale?
00:27:29
Con esto ya tenemos el principal elemento que es con lo que vamos a poder pintar el color, vamos a decir así.
00:27:46
Para que tenga ciertos relieves, sabemos lo que son las normales, también entiendo de otros módulos de primero,
00:27:52
las normales que son esos relieves que se simulan pero que no son relieves como tal, no son desplazamientos como tal,
00:27:58
sino simulaciones que a través de cómo refleja nuestro software las luces al incidir sobre esa textura,
00:28:04
pues da apariencia de que tiene unos relieves que realmente no están y es una forma muy económica, muy barata de simular relieves, normalmente relieves simples, sin sobrecargar la máquina porque no tiene que estar desplazando la geometría como haría con un mapa de desplazamiento, que no es lo mismo.
00:28:11
Bueno, pues en el tema también os pongo cómo coger un diffuse, unos colores y que simule o que genere unos mapas de normales o un bump, también podría ser, para añadirlo aquí.
00:28:28
Eso, en las que os proporcionaba viene un mapa de normales, que suelen ser de estos colores, estos azules, verdes, rojos, y luego una máscara que es un poco para darle opciones más avanzadas de reflexiones, etc., de dónde tiene que iluminar o para enmascarar, etc.
00:28:41
Vale, bueno, sobre todo son el normal y el diffuse. En estos que tenemos aquí, que ya venían por defecto, pues veis que están ya incorporados los tres. Evidentemente, vosotros podéis descargar más de internet, más terrain layer, buscarlos, generarlo vosotros, generar un terrain layer y incorporarlos aquí, ¿vale? Que luego tiene otras opciones referidas a la metalicidad. De esto se habla un poquito más también en el tema 7, el suavizado, etcétera, ¿vale?
00:29:04
Pero bueno, básicamente es que sepáis que cuando vayáis a pintar, bueno, tenéis que contar con una Terrain Layer creada ya, porque una vez estamos en este Paint Texture, ¿vale? Lo que vamos a tener que ir es a esta sección que se llama Layers y generar una nueva, añadir una nueva capa, ¿vale?
00:29:31
Podemos, por defecto, en vez de ir aquí a Create y dar a Terrain Layer, que estaba por aquí abajo, en vez de hacer eso, se puede hacer directamente desde este menú.
00:29:52
Vais abajo y dices crear nueva layer.
00:30:03
Y digo, en vez de suelo Dani, va a ser suelo Daniel, yo qué sé.
00:30:05
Y si lo creáis aquí, lo que os va a decir, vale, y en qué diffuse vas a querer usar.
00:30:09
Voy a ponerle el siguiente que vea de los que se han importado, que me saldrá rápido, imagino.
00:30:15
aquí están todos los
00:30:19
sprites
00:30:22
que se están usando
00:30:25
en la tarea, pues por ejemplo este
00:30:26
de rocas, le doy aquí y se ha generado
00:30:28
¿vale?
00:30:30
solo se está pintando este
00:30:32
terrain porque es el que te hemos
00:30:34
seleccionado, tened en cuenta que como hemos hablado
00:30:36
al final estos terrains son
00:30:38
distintos cuadrados y aquí hay varios
00:30:40
¿vale? habría que ir incorporándolo
00:30:42
en todos
00:30:44
pero lo que hemos hecho al crear
00:30:46
una nueva layer es lo mismo que si yo la borro y arrastro una de las que tenemos aquí. Bueno,
00:30:48
si le damos a add layer y la buscamos, que son las mismas que ya tenemos creadas, le decimos esto,
00:30:54
¿vale? Veis que ya ha pintado esto. Si lo veis muy de lejos puede ser o puede pareceros que no
00:30:59
tiene detalle y es que efectivamente, ¿vale? Hasta que no vayamos, hasta que no, a ver,
00:31:05
Porque está en concreto. Sí, bueno, cuando nos ponemos a nivel suelo sí que tiene un cierto detalle de barro, ¿vale? Desde muy lejos parece que es un verde, ¿vale? Pero fijaos que tiene estos detallitos de tierra manchada.
00:31:12
La gracia es, claro, como son sinles o como no tienen texturas estas, esta textura con la que estamos pintando, ¿vale? Pues a veces se hacen un poquito repetitivas porque al final no deja de ser un patrón que si lo ves en cierta dirección dices, ojo, ¿vale?
00:31:28
La gracia está en que luego podemos ir añadiendo más de estas capas, ¿vale? Añadimos otra layer y decimos que sea la de roca, ¿vale? Y el orden es muy importante. Veis que cuando vamos clicando el pincel se irá poniendo de un color u otro, ¿vale? Porque es de esa capa de lo que vamos a pintar, pero es importante tener en cuenta que la que está sobre la otra es la que en el fondo se está viendo, ¿vale? Lo mismo.
00:31:45
Ahora, a ver, voy a quitar el pincel, un segundo
00:32:11
¿Vale? Fijaos que ahora se ve con la roca ya cubierta por completo la otra
00:32:15
¿Vale? Porque la hemos puesto encima, igual que pasaría en Photoshop, por ejemplo
00:32:18
¿Qué se puede hacer?
00:32:21
Coger esta capa, ¿vale?
00:32:23
Seleccionarla, coger el pincel que nos parezca
00:32:26
Y con esa capa seleccionada
00:32:28
¿Vale? Le voy a hacer esto un poquito más pequeño
00:32:30
Y le voy a dar más fuerza
00:32:32
Ya es como se puede ir pintando
00:32:34
¿Vale? Entonces, con la combinación de varias capas
00:32:36
Ahora lo estoy haciendo todo un poco vasto
00:32:39
porque me estoy concentrando en unas dimensiones muy grandes, pero si hacemos pequeño el pincel y empezamos a pintar, ¿vale? Es donde vamos, además con pinceles irregulares, por ejemplo, es con lo que vamos añadiendo, incluso luego puedo decir, vale, y aparte de esto voy a añadir otra capa más, ¿vale?
00:32:41
Que es la de esta, que es más barro aún, o esta, que es más, yo qué sé, arena del desierto, pone hierba seca, ¿vale?
00:33:00
Pues digo, lo añado, se añade aquí, recordad que si la pusierais encima, de pronto tapa todo lo que no esté pintado, ¿vale?
00:33:09
Y, bueno, pues seleccionamos esta y ahora vamos pintando con esta también, ¿vale?
00:33:16
Y vamos dando zonas, así, con calma, con mesura.
00:33:21
También tened en cuenta que los pinceles, como hemos dicho, se pueden ir rotando, ¿vale?
00:33:25
Entonces con eso, aunque la textura sí que no va a rotar, a ver, si os fijáis, ¿vale? Hacemos el ejemplo. Si yo pinto con esa textura, ¿por qué se salía? Venga, vamos aquí, pintar textura. Si yo pinto aquí y luego lo giro, como la textura es la misma, veis que lo que hace es cambiar el pincel lo que está mostrando, pero la textura en sí no cambia.
00:33:30
Si quisiéramos tener distintos tipos de texturas e ir jugando más, lo suyo es coger estos mapas, crear otra terrain layer y, por ejemplo, en Photoshop o en otro sitio, voltearlas, hacer otras combinaciones y así también se van teniendo distintas direcciones.
00:33:53
Entonces con esto básicamente es con lo que se puede ir pintando un terreno, por ejemplo el que yo tengo pintado aquí, fijaos que es, voy a borrar este que teníamos, creo que no voy a hablar nada más de terrenos, pues por ejemplo fijaos que tengo este, los árboles es igual, es coger los modelos por ejemplo que vienen en ese paquete y pintando se van añadiendo.
00:34:09
En el caso del vídeo de Álvaro también se habla de esto. Es ir pintando el terreno, ir añadiendo detalles. Aquí también veréis en el tema 7 que es donde aparecen ciertas limitaciones que quizás nos pueden resultar llamativas.
00:34:29
que es parece un juego como muy antiguo muy básico vale esto es porque estamos usando también el motor
00:34:50
de render básico de unity en el tema 7 veréis que hay otros que permiten más detalle que permite una
00:34:55
iluminación más avanzada permiten otro tipo de bueno de capacidades que bueno el tema 7 veréis
00:35:02
y que va a hacer que todo se pueda ver mejor aparte de también lo que se explica en el tema
00:35:08
lo relacionado con los
00:35:12
settings
00:35:14
de los ajustes de las
00:35:16
calidades, etcétera, que se puede ir aumentando
00:35:19
¿vale?
00:35:21
que así es como irán mejorando también
00:35:22
vuestro aspecto visual
00:35:25
¿vale? cuando vayáis trabajando
00:35:27
estamos nosotros viendo el built-in
00:35:28
se llama
00:35:31
el render pipeline
00:35:31
el motor de render
00:35:35
de Unity, básico
00:35:37
porque para aprender a programar, pues tampoco queremos
00:35:38
sobrecargar, pero ahora que ya estamos viendo aspectos
00:35:40
más visuales, hay que tener en cuenta
00:35:42
eso, que cuando creamos
00:35:44
un nuevo proyecto
00:35:46
en el Unity Hub
00:35:48
va a haber
00:35:50
aparte de este Build-in Render
00:35:52
Pipeline, otros como el Universal
00:35:54
el High Definition
00:35:56
aparte de otros presets
00:35:57
y el que se suele usar
00:36:00
no es el que
00:36:03
venimos usando nosotros
00:36:04
pues se suele usar o el Universal
00:36:06
o el High Definition que ya es para consolas
00:36:08
de más última generación
00:36:10
yo que sé, si se quiere hacer un juego para Playstation 5
00:36:12
que se intente ser realista
00:36:15
pues tendríamos que optar por este
00:36:16
motor de render
00:36:18
¿vale? que a nivel de programación, etcétera
00:36:20
se parece mucho, no es que cambie
00:36:22
más allá, pero tiene otras opciones
00:36:24
pues de posprocesamiento
00:36:26
de iluminación
00:36:28
¿vale? pero bueno, eso es tema 7
00:36:30
¿vale? hasta aquí
00:36:32
¿qué tal? ¿me vais siguiendo? yo os digo, creo que es
00:36:34
un poco lo que hablaba Álvaro, pero centrándome
00:36:36
en partes que cuando se toca por primera vez
00:36:38
como que suele costar más
00:36:40
si no paso a hablar del
00:36:42
Character Controller, por ejemplo
00:36:45
pero decidme
00:36:48
bien, vale, me seguís, ¿no? más o menos
00:36:49
esto como todo
00:36:52
es, pues por ejemplo
00:36:54
hacer un terreno, sentarse, ir detallando
00:36:56
partes, ir pintando, esto
00:36:58
sí que es echarle un ratillo
00:37:00
en el tema
00:37:02
os dejo presets, os dejo paquetes
00:37:04
Os dejo paquetes incluso para Universal Pipeline, para High Definition, ¿vale? Dependiendo de eso, pues también podéis ir probando con unos o con otros. Vale, dame un segundo y abro el tema para ir con él.
00:37:07
Un segundito, que creo que lo tenía abierto por ahí, pero igual lo he cerrado. Aquí está. Vale, la parte de terreno, lo he dicho, aquí hay dos apartados de terreno, pues revisarlo y en medida de lo posible intentad ponerlo en juego para ver cómo funciona.
00:37:22
Vale, importar y animar personajes 3D
00:37:42
Os dejaba un vídeo en el apartado de Mixamo
00:37:46
Hablando de un poco también de lo que habla esta sección entera
00:37:50
No me voy a detener mucho, pero Mixamo es una forma muy útil
00:37:54
De poder tener un modelo 3D de un personaje bípedo, eso sí
00:37:58
Y que lo rigue de forma muy rápida
00:38:02
Y que ya incluso rigueado podamos extraer distintas opciones
00:38:05
No sé incluso si ya lo conocíais, por ejemplo, del módulo de animación. Porque claro, evidentemente tú puedes ir a un software de modelado 3D, de trabajo 3D en general, a un Maya, a un Blender, etc. y coger al personaje y crear clips de animación dentro de esos softwares y exportarlos y meterlos en Unity igual que se explica.
00:38:08
Pero con Mixamo aparte de... es que es súper asequible porque puedes coger cualquier modelo de una persona, meterla aquí, te lo riguea y ya le puedes dar opciones. Hablo de ello en el vídeo. Cuando lo veáis entiendo que las dudas están ahí resueltas. Por eso no me voy a detener mucho a menos que me digáis. También habla de las opciones de importación de los modelos FBX, etc.
00:38:28
¿Alguna duda de esto? Porque si no voy a pasar al carácter controller
00:38:52
Vale, carácter controller, esto sucede muchas veces y si alguno, lo vamos a usar de repaso esto también por si alguno todavía no
00:38:58
Hay cosas como que no le cuadran, pero recordad que de momento hemos visto que hay dos formas principalmente de mover los elementos
00:39:09
de nuestro escenario de nuestro juego a los personajes también vale que uno es a través
00:39:21
de las cinemáticas voy a hacer aquí un cubo cualquiera para hablar de esto así con algo
00:39:27
concreto a ver cubo dónde estás que estaba estaba escribiendo el nombre para lo voy a resetear
00:39:32
aquí está bueno como él el terreno está un poco elevado precisamente por lo que he dicho de las
00:39:42
elevaciones pues está aquí dame un segundo que lo voy a
00:39:48
mover
00:39:53
no aquí está el cubo vale una de las formas de moverlo es precisamente y
00:39:58
porque no se ven los ritmos de de manejo
00:40:05
a ver ff y tú tú tú aquí está vale
00:40:13
Era básicamente un poco tal porque no había seleccionado ninguna herramienta. Entonces, kinemática. Bueno, pues con el método transform, el método rotate o nosotros a mano moviendo las coordenadas, quería decir el método translate, pero que todos son de la clase transform.
00:40:19
Podemos ir moviendo el elemento de una forma, digamos, poco realista, en el sentido de que tú estás diciendo, vale, que cada segundo se vaya moviendo un metro a la derecha o una unidad hacia la derecha o tal, vale, y se va moviendo el personaje o esta caja, en este caso, siguiendo estas indicaciones, vale.
00:40:39
esa es la forma que se llama
00:40:58
kinemática, ¿vale?
00:41:00
que la kinemática también, si ya lo unimos
00:41:02
con lo que veíamos en el tema 5, es la forma
00:41:05
en la que se puede animar con el panel
00:41:07
de animation y decimos, vale
00:41:08
que este cubo tenga animaciones
00:41:10
vale, mover cubo, yo que sé
00:41:12
mover cubo
00:41:15
estoy aquí dejándolo en cualquier carpeta
00:41:16
habría que buscarla en la que estamos creando las animaciones
00:41:18
pero bueno, muy rápido, y aquí decir
00:41:21
vale, animación
00:41:23
de, pues como hacéis en
00:41:24
da vinci o en maya vale pues vamos animando los parámetros de posición para
00:41:26
que de aquí aquí se mueva añado el auto keyframe y que se mueva aquí que aquí
00:41:33
suba y aquí vaya para acá vale yo reproduzco ahora esto
00:41:39
dejó el auto keyframe y veis que hace ese movimiento en bucle vale acaba y se
00:41:45
reproduce pero al final lo que estamos haciendo es en vez de controlar por
00:41:52
código o arrastrando nosotros, estamos guardando
00:41:56
unas posiciones en keyframes y se van generando
00:41:58
estas interpolaciones. Esto es
00:42:00
nada más y nada menos que cambiar
00:42:02
el valor que tienen
00:42:04
estos parámetros de transform.
00:42:07
Nuevamente es kinemática
00:42:10
porque estamos usando
00:42:12
movimientos basados en
00:42:13
coger las coordenadas del objeto
00:42:16
en el software y
00:42:18
moverlo o hacerlo más
00:42:19
grande o rotarlo. También podríamos
00:42:22
Evidentemente, añadir animaciones de propiedad de la rotación de la escala
00:42:24
Aparte de otras muchas cosas
00:42:28
Pero no deja de ser poner valores en los componentes
00:42:30
Para que se vaya ajustando durante el tiempo a ese mismo valor
00:42:34
Luego, la otra forma de mover los objetos
00:42:38
Era a través de simulaciones físicas
00:42:41
Para lo cual existía este componente llamado RigidBody
00:42:44
que por defecto, cuando lo poníamos, ya tiene un comportamiento que no es mover por kinemáticas.
00:42:50
A ver, uy, claro. Espera, lo voy a dejar aquí para que se vea.
00:42:56
¿Vale? La cámara del juego no está aquí, por eso no se va a ver, ¿vale?
00:43:01
Pero como no estoy explicando, vais a ver que por defecto, lo primero que está pasando
00:43:04
es que tenemos un animator con una animación ya hecha, ¿vale?
00:43:08
Cuando movemos un objeto con animator o con kinemáticas, como estamos en todo momento diciéndole, tienes que estar en esta coordenada, está anulando el Rigipodi, ¿vale? Entonces, para esto lo que habría que hacer es quitar ese Rigipodi, ¿vale?
00:43:13
Hay otra forma de actualizar que es en base a los tiempos físicos, que aunque lo pongamos, vamos a ver que está haciendo la misma animación, pero si algún objeto se posara, por ejemplo, en este y se moviera por físicas, se estaría coordinando con las físicas de este movimiento, ¿vale?
00:43:34
Es decir, se estaría calculando el tiempo de físicas, ¿vale? Recordad esto del Fixed Update, los tiempos de refresco que pueda haber según queramos que sea lo más rápido posible, como cuando captamos los inputs, que para ello usaremos el Update, o el Fixed Update para las simulaciones físicas, que son tiempos con una escala temporal fija, ¿vale?
00:43:51
Lo dicho, si estamos diciéndole las coordenadas, básicamente, aunque intente ejercer esa gravedad, se está moviendo con coordenadas.
00:44:13
Entonces, en estos momentos son un poco incompatibles, ¿vale?
00:44:21
Sí que se puede hacer, digamos, el truco, ¿vale?
00:44:25
Que es quitar el Rigid Body que hemos metido aquí, nos volvemos a quedar como estábamos antes.
00:44:30
Es decir, vale, esto tiene una animación de movimiento, imaginaos que es una mosca, ¿no?
00:44:37
Que está ahí posándose, pero claro, yo creo que también le afecta la gravedad.
00:44:39
En ese caso hay que ir derivando las simulaciones o los movimientos en distintos GameObjects.
00:44:42
Este va a ser el de gravedad mosca, yo qué sé, ¿vale?
00:44:49
Porque queremos que le afecte la gravedad.
00:44:53
Si esto lo hacemos hijo, esto tendrá su animación siempre sobre sí mismo, ¿vale?
00:44:55
Con su transform, pero aparte vamos a poder añadirle un RigidBody, ¿vale?
00:45:00
Pero tiene que ser que el padre haga que herede a la hija, al hijo, a FF en este caso,
00:45:06
No sé por qué se llama así
00:45:11
Esa animación, entonces vais a ir viendo
00:45:12
Que va haciendo ese movimiento
00:45:15
A la medida que también se va cayendo
00:45:16
¿Vale? La gravedad está
00:45:19
Es decir, se ha hundido y sigue bajando
00:45:21
¿Vale? Está haciendo esa oscilación
00:45:23
De su position
00:45:25
Pero a la vez también está cayendo porque tiene un rigibody
00:45:27
Vale, lo dicho, el rigibody
00:45:29
Nos sirve para movernos
00:45:31
En
00:45:33
En base a fuerzas físicas
00:45:34
No solo esta gravedad
00:45:38
Sino también esos adforce, esos adtorques
00:45:39
que lo que hacen es simular movimientos pues de empujar de que tiene un arranque comportamientos
00:45:41
físicos que normalmente son mucho más fidedignos con la realidad es decir se mueven tienen un
00:45:47
acelerón este frenazo no es simplemente pues que se mueva y ya está por mucho que luego en
00:45:55
kinemáticas con ese es muy tan que veíamos es muy tan el lerp que son que sirven para hacer
00:45:59
interpolaciones, bueno, pues con suavizados, etcétera, entre valores, ¿vale?
00:46:05
Por eso nos permite que estos movimientos kinemáticos, pues se vayan suavizando
00:46:09
en el tiempo, etcétera, pero no deja de ser como cálculos, hechos sobre cálculos,
00:46:14
no es un motor de simulación física como la que permite tener este Rigipodi, ¿vale?
00:46:19
Y luego hay un tercer método, ¿vale? Que se llama Character Controller, ¿vale?
00:46:24
mueve kinematics carácter controller carácter control de las secas como queráis esto de
00:46:30
kinematics a mí ahora mismo me lía más que otra cosa carácter controller realmente son
00:46:35
kinematics porque lo que vamos a ver es que no sé lo pone aquí si no me equivoco no se ve afectado
00:46:41
por fuerzas físicas externas se moverá con los métodos específicos porque si ya tenemos una
00:46:48
simulación de
00:46:53
de fuerzas físicas y otra con la que podemos mover
00:46:55
a través de parámetros, ¿por qué este
00:46:59
carácter controller? ¿vale? lo pone
00:47:01
aquí, pero sirve sobre todo
00:47:03
porque si nos ciñéramos
00:47:06
a comportamientos físicos
00:47:07
igual que existe un terrain layer
00:47:09
¿vale? que sirve
00:47:11
un terrain collider, disculpad
00:47:13
para detectar estas
00:47:15
estas
00:47:17
a ver, que me pongo, voy a borrar ya esto
00:47:18
para detectar
00:47:21
A ver, aquí, ¿vale? Para detectar los relieves, etcétera, algo que con los colliders que conocíamos hasta ahora pues era bastante imposible. Existen inconvenientes cuando mueves un personaje como que, claro, yo estoy aquí en el escenario cuando estoy en un terreno y por eso aparece este componente en este punto y llega un momento que si yo me moviera por coordenadas, claro, todos estos relieves que tenemos, si vamos en línea recta, si lo moviéramos con kinemática como hemos visto, en cuanto hubiera un relieve,
00:47:23
se chocaría y no avanzaría, y lo que queremos
00:47:53
es que haga esto, que se vaya moviendo y vaya subiendo
00:47:55
bajando, y si lo movemos por
00:47:57
físicas también puede ocurrir que yo suelte esto
00:47:59
y el personaje se cae, o que yo
00:48:01
quiera seguir subiendo y si le aplico mucha fuerza
00:48:03
sigue subiendo, y básicamente
00:48:05
lo que queremos es que sea realista con
00:48:07
el entorno y que si hay una cuesta muy
00:48:09
empinada no la pueda subir, vale
00:48:11
si os fijáis, este character controller
00:48:12
añade, o
00:48:15
mira, o por ejemplo, unos escalones
00:48:17
si tuviéramos unos escalones, si vamos
00:48:19
con fuerza física se tropezaría todo el rato
00:48:21
pero nada está diciendo que puede subir, se está chocando
00:48:24
con el escalón, intenta y no puede
00:48:25
y con Transform
00:48:27
aún más, esto nos
00:48:30
permite, y por eso lo de carácter, para mover
00:48:32
personajes, poner límites
00:48:33
de rampas
00:48:35
etcétera, estos son los grados
00:48:38
en rampas, de hecho fijaos
00:48:40
que si yo me voy moviendo por aquí
00:48:41
y le digo que no puedo subir
00:48:43
una rampa de más de 10 grados
00:48:45
de inclinación, vais a ver que el chico
00:48:47
Enseguida se va a quedar pillado
00:48:50
Porque va a decir
00:48:52
Ahí ya está empezando a tener problemas
00:48:53
Si por encambio le digo
00:48:57
Que puede subir hasta rampas de yo que sé
00:48:59
De 50, ahora de pronto
00:49:01
Puede subir mucho más, tiene más capacidades
00:49:03
A lo mejor un animal puede subir
00:49:05
Rampas muy empinadas, pues yo que sé
00:49:07
Una cabra, ¿no? Pues sube
00:49:09
Porque tiene una disposición que lo permite
00:49:11
¿Vale? Pero veis que con un parámetro
00:49:13
Muy simple, que de otra forma sería
00:49:15
Muy complejo de obtener, podemos hacerlo
00:49:17
Los step offset, también son la distancia
00:49:19
de un escalón que se encuentra que pueda subir de forma natural, ¿vale?
00:49:21
Pues lo mismo, si, bueno, se ha quedado pillado aquí porque se ha quedado, a ver,
00:49:26
claro, como le estoy cambiando los valores se vuelve loco, voy a reiniciar, ¿vale?
00:49:31
Pues si tenemos aquí un escalón pequeñito, por ejemplo este, veis que lo sube, ¿vale?
00:49:35
Si esto se moviera por física se estaría tropezando o directamente por kinemática
00:49:42
dice un collider y no puedo, ¿vale? Esto no lo sube, ¿por qué?
00:49:47
Porque el escalón es pequeño. Si yo le digo el escalón puede ser, aunque no sea realista, de 18. A ver. Incluso más. Igual esto como es una roca ahora no lo... Lo mismo, lo voy a cambiar antes de ponerlo en juego. Voy a darle mucho más.
00:49:50
En principio, este elemento lo va a poder subir de una forma poco real. A ver, porque se me está volviendo un poco loquer. Esto es porque es demasiado valor. Vamos a ponerle uno más normal.
00:50:06
A ver, ¿vale? Vais a ver que ahora ha subido ahí, que antes no podía subir, ¿vale? Le hemos subido el valor del escalón y ahora este personaje puede subir escaleras más amplias, ¿vale? Entonces, bueno, son opciones que de otra forma nos costaría mucho poder obtener, ¿vale?
00:50:21
¿qué ocurre? que como no se mueve
00:50:43
ni por físicas, ni por
00:50:46
kinemáticas
00:50:48
como tal
00:50:50
claro, para moverlo tiene sus propios métodos
00:50:51
y es lo que os pone aquí explicando el tema
00:50:54
el simple move y el move
00:50:56
aparte de tener su propio sistema
00:50:58
de colisiones
00:51:00
y su propio
00:51:01
detector de suelo
00:51:04
¿vale? recordad cuando
00:51:05
hacíamos en la unidad 5
00:51:07
que para detectar que podía saltar el personaje
00:51:08
en la plataforma en el juego 2D
00:51:11
Había que poner un parámetro
00:51:13
Que cuando tocara el suelo con un
00:51:16
Collider o con un
00:51:18
Raycast hacia abajo, etc
00:51:19
Que hubiera un parámetro llamado IsGrounded
00:51:21
Que se activara para decir, vale, como está
00:51:23
Posado, al dar a saltar
00:51:25
Pues salta, porque si está en el aire no queremos que haga
00:51:27
Doble salto
00:51:29
El Character Controller por defecto
00:51:30
Ya tiene
00:51:33
Una función, vale, que es
00:51:34
IsGrounded, que sirve para controlar
00:51:37
Si el personaje es grounded
00:51:39
pues podéis hacer el salto, por ejemplo.
00:51:41
Luego, los métodos.
00:51:45
Ahora vemos, por ejemplo, en la tarea que tengo yo resuelta
00:51:47
cómo se usa, pero hay uno muy simple, muy fácil,
00:51:51
que es el Simple Move, que sirve para desplazarse
00:51:55
por ese terreno, por ejemplo.
00:51:57
El Character Controller se puede usar con terrenos
00:51:59
o con superficie lisa si ponemos, como hemos hecho hasta ahora,
00:52:01
un plane.
00:52:05
Pero bueno, también hay que valorar por qué se hace una cosa
00:52:07
y otra. Si no tiene inclinación, ni hay escalones, pues igual es más fácil hacerlo como hasta ahora.
00:52:11
Pero sí que el Simple Move tiene la capacidad de que en todo momento se le está aplicando la gravedad.
00:52:16
Recordad, como no va en base a un Rigid Body, fijaos que este personaje lo estoy moviendo.
00:52:23
Y no estoy, lo digo ya, no estoy moviendo con kinemáticas directamente, sino que estoy usando un Simple Move.
00:52:29
Veis que aquí no hay un Rigid Body que esté afectando la gravedad.
00:52:36
Y sin embargo, el personaje, voy a saltar, salta y vuelve a caer hasta que se posa.
00:52:38
Y cuando se posa, de hecho, pone Is Grounded, ¿no?
00:52:45
El parámetro Is Grounded se está activando.
00:52:47
Aunque no lo veamos, si lo comprobamos por código, lo está haciendo, ¿vale?
00:52:49
Este Simple Move aplica gravedad, ¿vale?
00:52:54
Y está todo el rato aplicando gravedad hasta que se encuentra con algo y, pues, no sigue cayendo, claro.
00:52:57
Pero tiene esta gravedad.
00:53:01
Entonces es fácil recurrir a él
00:53:02
Porque es simplemente decirle también una dirección
00:53:06
Como veníamos haciendo con el Translate
00:53:08
Y se mueve hacia ahí
00:53:10
Ahora vemos la aplicación de esto
00:53:12
Pero el problema es que como está aplicando todo el rato
00:53:13
Gravedad
00:53:16
Y también imagino
00:53:17
Que porque lo quieren hacer simple
00:53:20
Si no vas a hacer esto
00:53:22
Si quieres añadir algún parámetro
00:53:23
De que el personaje salte
00:53:25
Este Simple Move inactiva eso
00:53:26
De hecho, si miráis aquí
00:53:29
la velocity, que es sinónimo
00:53:31
de parámetro de velocidad, se refiere
00:53:34
a la fuerza física
00:53:36
que está teniendo un objeto, en este caso
00:53:38
aunque no estemos aplicando físicas
00:53:40
habla de ello como si fueran físicas
00:53:42
pero dice, la fuerza
00:53:44
que apliquemos en el eje y
00:53:46
es ignorada, es decir, aunque le
00:53:48
estemos dando en un vector 3
00:53:50
que le pasemos a este simple move
00:53:52
aunque le estemos pasando valores
00:53:54
si lo estamos haciendo
00:53:56
a través de un simple move, no lo va a aplicar
00:53:58
¿Vale? Si ya queremos aplicar esta, bueno, usando el método move para mover al personaje, no se aplica la gravedad de forma automática, ¿vale? Entonces vamos a poder saltar porque le vamos a poder añadir estas, entre comillas, fuerzas en el eje Y hacia arriba, pero también hay que añadirle la gravedad por código, porque como dice aquí, no se aplica gravedad de forma automática.
00:54:01
Y bueno, lo pongo yo aquí, pero también lo pone aquí. Aquí en algún momento... Bueno, creo que ni siquiera lo dice porque se da por supuesto que no es señal de gravedad, porque no tiene un rigid body.
00:54:22
Pero esto sí que permite, y de hecho si venís ya la documentación nos habla de cómo añadir este salto. Y os pone esta fórmula y esta... que os pongo yo también el tema de cómo se calcula a nivel físico la gravedad.
00:54:35
Entonces hay que añadírselo un poco a mano. En el tema lo pongo y en la tarea también os hablo de ello.
00:54:51
Entonces el SimpleMove sirve sobre todo si el personaje va a ir andando por una superficie, ya está.
00:54:57
Sin embargo, si queremos que salte o que haya cambios en altura, que no vaya desplazándose por ese terreno pegado, habrá que usar el método Move.
00:55:03
Aquí os hablo un poco de todo esto, de las características que tiene el CharacterController, que es lo que hay que tener en cuenta.
00:55:13
Luego, que esas detecciones, aunque no tiene un collider tampoco, fijaos, que está detectando el suelo, aquí no hay ningún collider.
00:55:19
El terreno sí tiene ese terrain collider, pero el propio Character Controller ya aporta esta cápsula, ¿vale?
00:55:26
Que se ajusta con estos últimos parámetros, ¿vale? Pues el radio, tal, bueno, el radio más grande, más pequeño, que habrá que ajustar a nuestro personaje.
00:55:32
Que es, pues como un Capsule Collider, pero que viene con este Character Controller, ¿vale?
00:55:40
Siempre, porque se entiende que como va a ir
00:55:45
Por un terreno, pues tiene que tener alguna
00:55:47
Detección de ese
00:55:49
Terreno, ¿vale?
00:55:50
Importante
00:55:54
Y lo pone aquí
00:55:54
En vez de usar
00:55:57
El onTriggerEnter, el onCollisionEnter
00:55:59
Etcétera
00:56:02
Para las colisiones que se detecten
00:56:02
A través de un CharacterController
00:56:05
Habrá que hacerlo con otro de sus
00:56:06
Métodos propios, CharacterController.
00:56:09
Este, onControllerColliderHit
00:56:11
Un nombre un poco peleagudo
00:56:13
Pero es como un collision enter
00:56:15
Solo que se especifica de otro modo
00:56:18
Es un poco similar el comportamiento
00:56:20
Que sepáis que no es nada recomendable
00:56:24
Añadir colliders
00:56:26
A un objeto que tenga un
00:56:28
Que tenga un carácter controller
00:56:31
Porque va a haber conflictos
00:56:35
Si que se puede añadir en cierto punto
00:56:36
En algún objeto para usar por otro lado
00:56:39
Si a lo mejor el brazo se choca con una pared
00:56:42
y queremos añadirlo, yo que sé
00:56:44
y le dibujamos aquí en otro hijo
00:56:46
¿vale? de Survivor en este caso
00:56:48
pues otro collider
00:56:49
y por código se pone en colisión enter
00:56:51
por ejemplo, pues bueno, se puede hacer pero
00:56:54
no es lo recomendable ¿vale?
00:56:56
para eso viene con esta
00:56:57
cápsula de detección, además tiene
00:56:58
como forma de personaje
00:57:01
bueno, no
00:57:03
puede ser bípedo o no, porque claro, aquí también podemos
00:57:06
cambiar los
00:57:08
la altura y lo podemos achatar
00:57:08
y hacerle más gordo así, que sea más
00:57:11
un animal, pero bueno, es una cápsula
00:57:13
mirando para arriba, así que
00:57:15
está pensado para personas
00:57:17
¿vale?
00:57:19
¿hasta aquí qué tal?
00:57:22
decidme algo, porque
00:57:29
si no
00:57:30
igual nadie me está escuchando, vale, bien
00:57:30
más o menos, digo
00:57:34
sí, espera, voy con micro
00:57:36
vale, entiendo
00:57:38
esto del control que se choca en propiedades
00:57:41
entiendo que cuando probemos un poco lo veremos
00:57:44
más claro, no me he perdido por aquí
00:57:46
no, vale
00:57:48
repito un poco esto
00:57:49
el
00:57:52
el character controller
00:57:53
tú según lo activas
00:57:56
voy a borrarlo
00:57:57
remove component, veis que la cápsula
00:58:00
va asociada a este
00:58:03
character controller, igual que en
00:58:04
otras prácticas
00:58:06
y si no, revisar la tarea
00:58:07
del tema 3 o el 5
00:58:09
o el contenido, hablábamos de los colliders
00:58:12
para que se detecte la colisión, porque
00:58:14
hay que saber que este personaje
00:58:16
Cuando toca el suelo tiene que haber algo que le diga hasta dónde llega el personaje. Ya hablamos que esto no va a nivel visual. Es decir, si yo le digo que esta cápsula esté más arriba, por mucho que veamos que el personaje tiene los pies aquí, donde va a detectar la colisión del suelo va a ser en esta cadera.
00:58:18
Por eso yo cuando activo y se da la gravedad, se queda ahí, porque lo que está detectando es esa cápsula, ¿vale? Y yo ahora me muevo, pero claro, en todo momento, ahora estamos en arenas movidizas, porque para el juego ahora mismo esa cápsula es el collider, entonces es lo que está ajustando como el collider.
00:58:36
Es exactamente lo mismo, solo que con otro método de ajustar lo que ya hablábamos cuando los colliders tradicionales que hemos hablado para las físicas. Si tenéis duda de eso, revisad el tema 3. Y es una adaptación de eso.
00:59:00
solo que, vale
00:59:19
vale, pues
00:59:20
más cosas que me digáis, claro
00:59:22
o si no os queda claro esto, lo digo que no
00:59:24
quiero meterme mucho en esto porque ya hablamos de ello
00:59:27
entonces, aunque no sea
00:59:29
exactamente igual, es lo mismo
00:59:31
alguna
00:59:32
alguna cosa más, decidme
00:59:34
si hay dudas y si no, continúo
00:59:36
que lo siguiente
00:59:39
va a ser, pues un poco ver como
00:59:41
movemos a este personaje con el carácter controller
00:59:42
y aparte de moverlo
00:59:45
igual que dijimos
00:59:46
no hay que asociar los movimientos del personaje
00:59:48
en el espacio, que son este simple move
00:59:50
etcétera, que se desplace el objeto
00:59:52
con, que luego el personaje
00:59:54
cuando se mueva para adelante
00:59:56
haga el movimiento de moverse
00:59:58
es decir, la animación de que mueve las piernas
01:00:00
¿vale? recordad que son
01:00:02
dos cosas separadas, una cosa es mover
01:00:04
el game object en sí y otra es ya
01:00:06
la apariencia de esas animaciones
01:00:08
en la UT5, en 2D
01:00:10
lo veíamos muy claro porque esos sprites
01:00:12
evidentemente eran dibujos que se movían
01:00:14
y parecía que andaba, pero lo que
01:00:17
lo desplazaba no era que el personaje pareciera
01:00:18
que corriera, es
01:00:20
que estábamos cambiándole la posición
01:00:22
aquí sucede un poco lo mismo
01:00:24
¿vale?
01:00:26
¿sí? ¿sigo?
01:00:31
venga
01:00:34
si no me decís nada más, sigo
01:00:34
vale, lo dicho
01:00:36
aunque tengamos
01:00:39
animaciones, etcétera
01:00:42
esto tiene un pero, porque
01:00:45
se dice en el tema, hay una
01:00:46
También se dice en el tema y en el vídeo que subí yo
01:00:48
Existe esto del root motion
01:00:51
Porque bueno, por ejemplo, en Mixamo
01:00:53
Creamos una animación
01:00:55
Están las animaciones que en sí
01:00:56
La propia animación ya tiene un avance
01:00:58
O se eleva en el espacio
01:01:00
Y eso normalmente no nos va a interesar
01:01:02
Podría interesarnos en ciertos momentos
01:01:04
No nos va a interesar que el personaje
01:01:06
En su animación vaya andando hacia adelante
01:01:08
Lo que nos interesa es que haga
01:01:10
Como el
01:01:12
Mira, de hecho, dame un segundo
01:01:13
Y lo vemos
01:01:16
en el propio vídeo que os
01:01:17
dejaba, digo que no sé
01:01:19
si, a ver, espera
01:01:23
un segundico, que me tome claves
01:01:25
vale, voy a
01:01:27
buscarlo rápido, pero hay algún punto
01:01:34
en el que se ve que el personaje
01:01:36
en estas animaciones
01:01:38
vamos a buscar en este andado
01:01:39
a ver
01:01:44
vale, veis, por ejemplo
01:01:45
este salto, esto
01:01:54
es una animación de salto que ya tiene un movimiento
01:01:56
en sí, vale, con Unity
01:01:58
Y en las opciones de Model, cuando importamos un FBX, se puede manipular y decir,
01:02:00
aunque haga como que salta este gesto de las manos y como que se eleva,
01:02:06
realmente el que suba o baje va a ser con las fuerzas que nosotros le demos mediante código.
01:02:11
Se ve aún más claro si vamos a uno de caminado.
01:02:16
Aquí, por ejemplo, veis que según cojo esta animación y la he puesto en la selección de Mixamo,
01:02:19
el personaje, mirad la cuadrícula, está avanzando.
01:02:27
¿Qué ocurre? Que si nosotros le estamos añadiendo una fuerza para que ese GameObject,
01:02:30
pensad en el GameObject como un cubo, ¿vale?
01:02:34
Si ese GameObject se va desplazando porque le estamos dando fuerza para adelante
01:02:36
y aparte la animación también anda para adelante, va a ser un doble movimiento.
01:02:39
Por eso en el vídeo se dice que hay algunas de estas animaciones que pone InPlace,
01:02:43
que cuando se pulsa, ¿vale? Lo que va a hacer, lo diré en breve,
01:02:47
va a hacer como ese caminado, que luego nosotros diremos ve para adelante y te vas moviendo,
01:02:53
pero en realidad la animación en sí no se está moviendo.
01:02:57
Hacer la animación que se mueve, pero el desplazamiento ya se lo daremos nosotros luego. Eso es importante porque nos sirve para entender que se puede disociar o que se debe disociar esos dos conceptos, que el movimiento que nosotros proporcionamos y la apariencia de movimiento.
01:03:00
si queremos esta
01:03:14
plus run motion, que estas animaciones
01:03:17
aunque lo hubiéramos
01:03:19
exportado
01:03:20
esta animación, este clip de animación
01:03:23
con ese desplazamiento se puede ir ajustando
01:03:24
con este run motion
01:03:28
y otras opciones, se habla de ello en el vídeo
01:03:29
que vamos teniendo aquí
01:03:31
a ver, cuando nos vamos metiendo
01:03:35
en las diferentes animaciones
01:03:37
voy a abrir
01:03:39
el animator controller
01:03:41
animator controller
01:03:43
y cojo al personaje
01:03:46
y le digo por ejemplo el caminar
01:03:48
vale, bueno justo ese
01:03:50
no, pero
01:03:53
y voy aquí
01:03:53
y le digo, claro me tengo que meter
01:03:55
la animación, espera, que la tengo que buscar
01:04:03
vale, aquí son distintas animaciones
01:04:05
que había del personaje
01:04:07
vale
01:04:09
el idle, vamos a ver el de caminado
01:04:10
que creo que es este, y veis que aquí
01:04:13
de hecho tiene el desplazamiento, aquí
01:04:15
lo saqué con el
01:04:17
desplazamiento, ¿vale?
01:04:18
¿Qué ocurre? Que luego aquí hay otras opciones
01:04:21
que sirven, por ejemplo
01:04:23
esto que pone, que vais a ver
01:04:25
no el match, no el loop
01:04:26
no se matchea, porque vais a ver que cuando llega al final
01:04:29
bueno, aquí está justo
01:04:31
que parece que sí, pero en realidad está dando un salto
01:04:33
lo que pasa es que coincide para que
01:04:35
parezca que no lo hay
01:04:37
pero hay otros que puede ir avanzando y de pronto parece
01:04:39
como que vuelve. Con esto lo que se puede
01:04:41
ir haciendo es
01:04:43
detener esos avances
01:04:44
para que precisamente pasen esas cosas
01:04:46
con estos ajustes se pueden ir
01:04:48
adoptando estas
01:04:50
modificaciones para
01:04:52
controlar eso, ya os digo
01:04:53
se explica en ese vídeo
01:04:56
entonces, ¿qué es lo que hay que hacer?
01:04:57
bajar esas animaciones
01:05:00
e irlas incorporando en un animator controller
01:05:01
del mismo modo que sucedió
01:05:04
en el tema 5, con sus condiciones
01:05:06
de por qué
01:05:08
es decir, sus transiciones
01:05:10
con condiciones para pasar de una a otra, etc.
01:05:12
¿Qué ocurre y qué es lo complicado aquí?
01:05:15
Que lo que se añade en este caso es el concepto del blend tree,
01:05:18
que lo que permite es unir varias animaciones,
01:05:23
para que dependiendo de qué valor tiene uno de los parámetros
01:05:28
que tenemos aquí preparados, haga una animación u otra.
01:05:36
E ir también, fijaos, os lo voy a poner así para que lo veáis, lo voy a poner, esperad, voy a ponerlo mejor con el de caminado. Si yo me meto en un blend tree, esto también os dejo de aumentación, lo reproduzco, por defecto está parado, pero si yo le doy al walk, ¿vale? Veis que poco a poco va subiendo.
01:05:39
Y este walk no deja de ser que se está conectando con el parámetro walk, ¿vale? Y se ha definido así para conectarlo. Entonces, si el parámetro walk es 0, ¿vale? Va a representar la animación de idle, que es el de estar quieto.
01:05:59
si le vamos dando hacia adelante
01:06:12
hará este caminado
01:06:15
¿qué conseguimos con un blend tree?
01:06:16
que haya también valores intermedios
01:06:18
¿vale? fijaos
01:06:20
que yo cuanto más
01:06:21
voy
01:06:24
dando valor a este walk
01:06:25
¿vale?
01:06:29
va un poquito más rápido, un poquito más lento
01:06:30
si tuviéramos un joystick, si lo ponemos a media
01:06:32
hacia adelante, que es donde
01:06:34
por ejemplo estamos poniendo el walk
01:06:36
estamos dando un poquito hacia adelante
01:06:38
irá así despacillo, ¿vale?
01:06:40
Que también se podrá asociar con la fuerza del desplazamiento que tenga el personaje.
01:06:41
Si lo pongo al máximo, irá al máximo.
01:06:46
Si yo, por ejemplo, este de correr, no, este de ir hacia los lados, ¿vale?
01:06:49
Un movimiento que se llama estrafe, si lo activo, aquí lo que hemos hecho es hacer un movimiento de dos ejes.
01:06:56
Hemos conectado el parámetro estrafe para que pueda ir conectado a un axis del menos uno al uno.
01:07:03
Ahora lo vemos todo por código.
01:07:09
Lo ha cogido y lo ha asociado. ¿Qué hemos hecho aquí? Pues que podéis ir del menos uno al uno, siendo el valor cero el neutro.
01:07:11
Entonces, si tuviéramos un joystick o las teclas A y D, que son Q y E, que son las que vamos a usar, si pulso la Q, este valor de estrafe pasará a ser menos uno.
01:07:19
Activo. Y por tanto, lo que hará es moverse hacia este lateral. Si yo voy corrigiendo y soltando el joystick del lateral y lo paso hacia el otro lado,
01:07:31
fijaos en el personaje como poco a poco
01:07:39
se va moviendo hacia el otro lado
01:07:41
entonces con esto lo que hacemos es
01:07:43
combinar en este caso
01:07:45
tres diferentes animaciones
01:07:47
¿vale? y según en qué
01:07:49
punto de un axis
01:07:51
estemos, pues se irá
01:07:53
desplazando, cuando desplazando
01:07:55
ojo, me refiero a la apariencia
01:07:57
el movimiento que hace
01:08:00
el personaje, hacia un lado
01:08:01
¿vale? y hará el estrafe, una animación que tengo
01:08:03
que se llama estrafe left
01:08:05
que es esta
01:08:07
que es una, que es independiente de
01:08:08
strafe right, que es la contraria, entonces con esto
01:08:12
lo que podremos hacer es ir precisamente
01:08:15
poniendo valores intermedios
01:08:18
entonces se van añadiendo animaciones
01:08:21
incluso podría poner una intermedia con otra animación
01:08:25
aquí, imaginaos, añadir y decir que la animación
01:08:27
de saltar, aunque no tuviera mucho sentido, es cuando esto esté
01:08:31
ese valor valga menos 0.5
01:08:34
Y ahora, es verdad que no va a encontrar nada porque no tiene ninguna animación, pero si aquí pusiera que es la de caminar hacia adelante. Fijaos, he añadido que cuando esté en cero, si os fijáis ahora lo que ha hecho es ponerme 1 o 2, si le dais a esta opción, lo que hacemos es que podemos ir ajustando dónde están las animaciones.
01:08:37
Le voy a decir que esto sea caminado, sea del menos 0,5, que esté quieto en el 0.
01:09:03
Estamos ajustando el valor que va a tener que coger de estrafe, del parámetro estrafe, para que lo coja.
01:09:11
Como es un axis que va de menos 1 a 1, pues son valores todos que están en ese rango.
01:09:16
Si está quieto al principio, y ahora no me está...
01:09:24
Ah, es que está aquí.
01:09:27
Esta línea roja es para simular, ¿vale?
01:09:28
Si está en el 0, pues está en idle
01:09:30
Si voy hacia la derecha, irá hacia el right
01:09:34
Luego, aunque no tenga sentido, si voy a 0, menos 0,5 y muevo el joystick un poco hacia la izquierda
01:09:37
En realidad lo que hace es caminar para adelante
01:09:45
Y si ya voy al menos 1, irá hacia la izquierda
01:09:47
Y vais a ver que, igual que se ve aquí representado, hará ese movimiento de lateral y un poco hacia adelante
01:09:51
¿Veis que está andando ahora, que va hacia adelante y aparte también de lado?
01:09:56
Vale, pues es lo que podemos conseguir con los blend trees, combinar distintas animaciones.
01:10:03
Borro este porque no me interesa y vuelvo a estar como antes.
01:10:09
Y hay un blend tree de 1D, pero hay otros de tipo 2D.
01:10:12
¿Y esto qué significa?
01:10:19
Que podemos coger, y hay distintos tipos, pero podemos coger dos parámetros distintos.
01:10:20
Por ejemplo, el de caminar para adelante y el de estrafe, y combinarlos.
01:10:25
Entonces, ahora lo que estamos haciendo es jugar con dos ejes.
01:10:32
¿Qué valor tiene en el eje X? Pues que sería walk, ¿no? Por eso está en esta columna.
01:10:35
Bueno, sería más la Y, el walk, que es ir hacia adelante o hacia atrás, ¿no? Con el mando me refiero, el eje del mando.
01:10:41
¿Vale? Y yo digo que cuando vaya a la izquierda, que sea cuando el eje X esté en menos uno.
01:10:48
Y cuando esté en uno, que vaya a la derecha.
01:10:54
Y ahora, y que camine, y voy a añadir otro, que sea caminar, que es este que teníamos aquí, normal walk, que este sea cuando, aunque esté en cero aquí, cuando esté en uno, es decir, cuando esté hacia adelante.
01:10:56
Y vais a ir viendo que se van representando los puntos de donde es cada uno de los, a ver, 0. Cada una de las posiciones de dos ejes, en vez de estar solo en un eje horizontal, los ejes hacia los que se pueden mover.
01:11:14
aterrizándolo, si yo ahora le doy al play
01:11:30
cuando ninguno de los dos ejes
01:11:32
imaginaos que estos son
01:11:35
el eje X e Y de un joystick
01:11:36
si yo lo subo hacia arriba
01:11:38
vais a ver que lo que va a hacer es ir andando
01:11:41
hacia adelante, que es lo que estoy haciendo
01:11:43
¿por qué?
01:11:45
porque está yendo
01:11:48
hacia el 1 de la Y
01:11:48
si yo voy yendo hacia la izquierda
01:11:50
en el X, y vais viendo que va aumentando
01:11:53
la área de influencia de cada animación
01:11:55
que son estos puntos azules
01:11:57
se irá reproduciendo uno a un otro.
01:11:58
Ahora, por ejemplo, debería estar, aunque no lo está haciendo,
01:12:02
no sé por qué no lo está haciendo, pero veis que ahora mueve en lateral.
01:12:09
Si voy al centro se para y si voy hacia la derecha empieza a moverse hacia la derecha.
01:12:13
Y entonces con eso podemos ir también interpolando.
01:12:19
Aquí en este punto intermedio está aplicándose tanto a la vez el de avanzar como el de ir hacia la derecha.
01:12:21
Y con esto podemos ir añadiendo muchas animaciones para que, por ejemplo, coordinando dos operaciones, es decir, dos axis, podamos tener esas animaciones.
01:12:28
Hay distintos tipos también de incorporar esto, pero bueno, básicamente cuando son 2D se refiere a eso, que podemos combinar dos axes para combinar dos tipos de animaciones.
01:12:41
Eso es muy útil para, por ejemplo, este movimiento que tenemos aquí del personaje.
01:12:53
si yo le doy play, y he deshecho
01:12:57
todo lo que he hecho, que no sé si
01:12:59
será suficiente, si yo le doy a play
01:13:01
si yo avanzo
01:13:03
el personaje se anima
01:13:05
como de avanzar, si voy para atrás
01:13:08
hace la animación de andar para atrás
01:13:09
si doy a los laterales, hace estas animaciones
01:13:11
se podrían suavizar más
01:13:14
que tardar el arranque, pero bueno
01:13:15
eso sería con el control de animator
01:13:17
con los nodos, que la condición tardará un poco más
01:13:19
pero fijaos
01:13:22
y si ya, vale, que
01:13:23
estoy combinando con un solo
01:13:25
Blend Tree, todas las operaciones
01:13:27
de caminado, incluso caminar
01:13:29
cruzado, luego ya
01:13:31
rota, etc.
01:13:33
Eso se consigue con esos Blend Trees.
01:13:35
Para crear un
01:13:38
Blend Tree, lo mismo, podría ir
01:13:39
paso a paso, pero lo pone en el tema, pero es
01:13:41
clic derecho, crear un estado
01:13:43
y un Blend Tree, y luego ya se ir incorporando
01:13:44
los distintos
01:13:47
los distintos clips de animación.
01:13:48
¿Qué tal hasta aquí?
01:13:52
Esto es ponerse a probar,
01:13:56
Porque por mucho que os lo explique
01:13:57
Hasta que no os sentéis
01:13:59
También es complicado, pero más o menos seguís
01:14:00
Qué es lo que conseguimos
01:14:02
Sí se entiende, perfecto
01:14:04
Esto es
01:14:10
Los parámetros, recordad
01:14:11
Por si acaso
01:14:14
Estamos en el AnimatorController, como en la unidad 5
01:14:16
Los parámetros
01:14:18
Para acceder a ellos y poder cambiar
01:14:19
Esos parámetros del AnimatorController
01:14:22
Habrá que crear
01:14:25
Una variable de tipo Animator
01:14:26
¿Sí?
01:14:28
que luego habrá que inicializar
01:14:29
aquí, que capturar el componente
01:14:32
como ya hemos visto con ese getComponent
01:14:34
cuando queremos
01:14:35
esta lógica ya la deberíamos
01:14:37
tener, pero bueno, sé que van apareciendo nuevos
01:14:40
ingredientes, para acceder a
01:14:42
las propiedades, a los métodos
01:14:44
de CharacterController
01:14:46
habrá que declarar la variable CharacterController
01:14:47
darle el nombre que nosotros queramos
01:14:50
y luego capturarlo
01:14:51
para poder aplicar
01:14:53
cambios
01:14:56
a ese carácter controller específico
01:14:57
¿vale? que tenemos en este personaje
01:15:00
porque si no, no sabe
01:15:02
qué valor cambiar, puede haber varios
01:15:04
carácter controllers
01:15:06
en distintos game outers ¿vale?
01:15:08
aquí, como estamos diciendo que coja
01:15:09
no pone nada en concreto, está cogiendo
01:15:12
el componente carácter controller
01:15:13
del mismo
01:15:16
personaje que tenga aplicado este script
01:15:17
¿vale? y ya con CC
01:15:20
pues por ejemplo es, fijaos
01:15:22
que siempre que ponga, bueno mira, un is grounded
01:15:24
para detectar que se puede saltar
01:15:26
¿vale? pero siempre que ponga
01:15:28
algo de simple move o move
01:15:30
como aquí
01:15:32
¿vale? va a ser
01:15:34
cc.move ¿vale? porque es una
01:15:36
un método de simple move y de move
01:15:37
esto es un poco
01:15:40
lo que ya hemos venido viendo
01:15:42
igual que cuando queremos cambiar parámetros
01:15:44
del animator pues hay que tener
01:15:46
un animator preparado
01:15:48
¿vale? la variable animator
01:15:50
capturarla
01:15:52
luego con el getComponent, aquí está
01:15:54
coge la misma del objeto, por eso no busca
01:15:56
en otros objetos, con un findObject
01:15:58
que era otro de los métodos que
01:16:00
en algún momento os he dejado
01:16:02
y siempre que queramos cambiar
01:16:03
alguno de estos parámetros, un float
01:16:06
etcétera, estos parámetros
01:16:08
walk is grounded
01:16:10
esto ya está dado, pero walk is grounded
01:16:11
lo vamos a cambiar porque estamos cambiando
01:16:14
los parámetros
01:16:16
del animator
01:16:18
¿vale?
01:16:19
entonces, descomponiendo
01:16:22
un poco... Sí, ¿no? Esto también
01:16:24
entiendo que más o menos me seguís.
01:16:26
Pues
01:16:30
descomponiendo un poco esto,
01:16:31
para este personaje
01:16:35
si se seguía todo en la
01:16:36
tarea, hay varios movimientos como el de desenfundar
01:16:38
o como el de
01:16:40
el de saltar
01:16:42
incluso, que si se hacen
01:16:44
pues nos hace
01:16:46
nos lleva a la reflexión de
01:16:48
qué método de
01:16:50
carácter control hay que usar, move o simple move.
01:16:52
pues para este personaje, si queremos que salte
01:16:54
evidentemente hay que usar un move
01:16:56
porque ya hemos dicho que es el que
01:16:58
sí que tiene en cuenta
01:17:00
que apliquemos, entre comillas
01:17:02
fuerzas al eje Y, que es el
01:17:05
que nos importa para el salto
01:17:06
si no, podríamos usar
01:17:08
tanto el move como el simple move, pero lo lógico
01:17:10
sería usar el simple move que ya añade
01:17:12
la gravedad y bueno, tiene otras ventajas
01:17:14
en este caso
01:17:17
se ha intentado que salte el personaje, por eso vais a ver
01:17:18
que cuando vamos aquí
01:17:21
Y al final, ahora también voy a ir por partes, se usa este move, ¿vale?
01:17:23
Entonces, vamos a ver.
01:17:27
Como en otras ocasiones lo que se hace lo primero, aparte de capturar en el start todos los componentes
01:17:30
y preparar las fuerzas que vamos a ir aplicando, variables, para luego ir ajustándolas,
01:17:36
en el update lo que habrá que hacer es recoger las interacciones.
01:17:42
En este caso, el personaje vamos a querer que haga tres cosas principalmente.
01:17:46
Vamos a querer que haga más, pero basadas en axis 3. Una es que cuando demos a la W o a la S, ¿vale? Estoy hablando de la convención que hemos hablado para el movimiento. Al dar a la W o a la S, pues que vaya hacia adelante o hacia atrás, ¿vale? De 1 hacia adelante, menos 1 hacia atrás, ¿no?
01:17:50
Ese es el axis que vamos a llamar vertical
01:18:10
Que cuando hemos hablado del Benetree
01:18:12
Era el axis que ponía
01:18:14
POSI, realmente, ¿vale?
01:18:15
Vertical
01:18:18
Realmente el personaje se mueve en horizontal
01:18:18
Pero lo estamos uniendo con la lógica de nuestro joystick
01:18:21
Es el eje I
01:18:23
Luego va a haber otro
01:18:24
Que lo que vamos a querer hacer es que rote
01:18:26
Este personaje
01:18:29
Va a moverse
01:18:32
Lateralmente de dos formas
01:18:33
Una rotando y otra
01:18:35
Haciendo este estrafe que es caminar hacia los lados
01:18:36
Que no es exactamente lo mismo, ¿vale? Y aquí el rotate yo lo voy a conectar luego con la cámara, bueno, eso voy a hablar después, ¿vale? Pero queremos otro axis que cuando le demos a la A y a la D, y vamos a verlo en el juego, un axis que W y S hacia adelante y hacia atrás.
01:18:39
cuando le dé a la A y a la D lo que hace es rotar
01:19:01
¿vale? realmente no va a ser un desplazamiento
01:19:05
de posición, va a ser de rotación
01:19:06
y por eso lo vamos a hacer de hecho con un rotate
01:19:08
pero luego hay otro que, claro, cuando va
01:19:10
para adelante va a ser en relación a donde mira
01:19:12
el personaje, pero hay otro que nos puede
01:19:14
interesar que es este estrafe que es
01:19:16
hacia donde esté mirando
01:19:18
¿vale? pero que se desplace en lateral
01:19:20
¿vale? no que haya que rotar y luego andar
01:19:22
para que se mueva hacia ahí, sino que directamente
01:19:24
se pueden hacer estas
01:19:26
rotaciones ¿vale?
01:19:28
Pues para eso hacemos otro axis, que es el de estrafe.
01:19:30
Otras opciones que se ponía, pues la de correr, con el shift izquierdo de la tecla.
01:19:34
Bueno, pues si pulsamos y mantenemos pulsada esta tecla de shift, lo primero es que el booleano, ¿vale?
01:19:41
Es decir, booleano, recordad que con booleano nos referimos a que puede ser true o false.
01:19:48
Pues si está true, ¿vale? Tenemos la condición perfecta para que pase de caminar a correr.
01:19:53
Para que haga la animación de correr. Luego, evidentemente, cuando pulsemos left shift, habrá un punto que al moverlo, cuando se pulsa esa tecla, hemos hecho, se podría decir aquí también, que cuando se pulsa la tecla, en la condición de pulsar la tecla left shift,
01:20:00
Pues que a lo mejor la speed, no sé si hay una variable llamada speed, supongo que sí, que pasara a ser el doble o otro valor o 100, porque es más rápido.
01:20:22
Pero recordad también en el tema anterior, y sería válido, se podría hacer así, pero también se puede hacer, según la tarea anterior, es detectar si en este momento,
01:20:31
cuando está moviendo el personaje
01:20:42
detecta que está, por eso no es setBull
01:20:45
getBull, en el nodo de correr
01:20:46
¿vale? es decir, si está
01:20:49
activado el nodo de correr
01:20:50
y es true este parámetro
01:20:52
¿vale? entonces
01:20:55
y aparte se está moviendo un poco, que la velocidad
01:20:56
sea el doble, por ejemplo
01:20:59
aquí es lo que está diciendo, si no está detectando
01:21:01
que está ahí, será que es que no hemos pulsado
01:21:03
este leftShift
01:21:05
¿vale? entonces pues irá normal
01:21:06
ya se, esta condición la pasa
01:21:08
y pasa a la siguiente, ¿vale?
01:21:10
Que es importante ya ir poniendo en juego
01:21:12
las distintas herramientas que tenemos.
01:21:14
Se puede detectar que un personaje quiere correr
01:21:18
porque pulsamos la tecla Shift
01:21:20
y luego más opciones derivadas de ese correr
01:21:22
no tienen por qué ser con el Left Shift.
01:21:26
Puede ser porque la anterior consecuencia del Left Shift,
01:21:27
que es que el Run pasa a ser True,
01:21:31
pues ahora es la condición de otra historia
01:21:33
que estamos usando, ¿vale?
01:21:35
Vale, tenemos, perdonad, en el update, aparte de que este animator va a aplicar la condición de move, pues va a variar este parámetro para que sea mayor o menor.
01:21:36
Por ejemplo, para activar ese blend tree del que hablábamos antes, va a estar completamente el valor del float que tenemos aquí, va a estar completamente vinculado, es decir, este float que tenemos aquí va a ser mayor o menor, va a ir cogiendo valores intermedios si tenemos un joystick.
01:21:55
por ejemplo, nuevamente
01:22:12
nos serviría para un blend tree
01:22:14
se va a vincular a
01:22:15
a la variable que hemos llamado
01:22:17
move, que está conectada con ese axis
01:22:22
vertical, ¿vale? pues con un joystick
01:22:24
lo mismo, con la tecla WS
01:22:26
no va a haber, va a ir
01:22:28
de 0 a 1 y de 0 a menos 1
01:22:30
de manera casi directa
01:22:31
pero con un joystick sí que hay valores intermedios
01:22:34
entonces con esto
01:22:36
es con lo que podemos ir ajustando el
01:22:38
animator para que eso, para que camine
01:22:40
haga la apariencia de caminar más o menos
01:22:41
y luego evidentemente este move
01:22:43
en cierto momento
01:22:45
lo vamos a aplicar en esta
01:22:48
en este método que estamos
01:22:50
creado yo también, ¿vale?
01:22:51
que es, si no estás apuntando, que es otra
01:22:53
de las opciones
01:22:55
de las opciones
01:22:56
de los movimientos opcionales que se os ponía
01:22:59
que es cuando pulse la tecla
01:23:01
del control, ¿vale? el control
01:23:03
del teclado, vaya
01:23:05
que pase a hacer una animación como de que saca una pistola
01:23:06
y apunta, y ahí
01:23:10
la dinámica que hay ahora mismo
01:23:10
os lo enseño, es que
01:23:13
mientras se está apuntando esté quieto, que esté como
01:23:15
en estado de alerta, de apuntar
01:23:17
un segundo
01:23:19
vale, yo me voy moviendo
01:23:20
etcétera, si doy a la tecla control
01:23:23
de pronto, aparte de cambiar la cámara
01:23:25
con cinemachine a otro, sí que se puede rotar
01:23:27
pero, aunque dé a la
01:23:29
W y a la S, no se puede
01:23:31
mover, no sé que
01:23:33
este aviso, porque como estoy con una combinación
01:23:35
algo va a pasar, pero bueno
01:23:37
Ah, porque estoy dando a control S, vale
01:23:38
Bueno, que no me deja, vale
01:23:42
Pero que eso, que mientras estoy apuntando
01:23:44
No puedo moverme, o no debería
01:23:46
Y creo que como que se ha desconjunto algo
01:23:48
Pero como que está pensado sobre todo
01:23:50
Para quedarse así, pues lo mismo
01:23:52
Mientras no esté apuntando
01:23:53
Si, lo contrario
01:23:56
Apuntando, vector move, vale
01:23:58
Y ese método lo que se ha creado
01:24:00
Es esto
01:24:02
Aparte de cambiar el valor de speed para que
01:24:03
El desplazamiento sea mayor o menor
01:24:06
porque luego todo lo vamos a multiplicar
01:24:08
por un speed finalmente
01:24:10
en algún momento, aquí, vale
01:24:11
aquí lo que vamos a ir haciendo es
01:24:13
venir aquí, lo dejo aquí
01:24:15
vale, con el speed que tengas
01:24:18
según vaya detectando
01:24:20
dos vectores, uno
01:24:21
del movimiento hacia adelante
01:24:23
hacia atrás y otro del estrafe
01:24:26
vale, porque la rotación
01:24:28
lo que he hecho es
01:24:29
crear un rotate, vale
01:24:32
que esté unido al axis rotate
01:24:34
este que hemos capturado antes, a esa variable
01:24:36
Y simplemente la estoy llamando en el update y ya está. Aquí es el update y la estoy llamando. No tiene más. Sí que el movimiento que estamos recogiendo aquí es el desplazamiento en el espacio del personaje con este vector move.
01:24:38
entonces va a haber por un lado un vector 3
01:24:52
move forward que está unido
01:24:56
a donde esté mirando
01:24:58
con esto lo que conseguimos es que esté unido
01:25:02
hacia donde esté mirando
01:25:04
si por ejemplo
01:25:06
lo que conseguimos con esta variable básicamente es
01:25:08
que en todo momento luego la animación que metamos
01:25:13
el desplazamiento que metamos
01:25:16
sea en relación hacia donde está mirando
01:25:19
Recordad que esto era una de las formas de recoger la dirección hacia la que está mirando un personaje
01:25:22
y te crea ese vector 3 en función de eso, como que resetea las coordenadas.
01:25:33
Con este vector right, en principio lo ponemos en 0 y solo se va a activar si el estrafe,
01:25:39
es decir, el Q y la E, que era el movimiento lateral, se activa.
01:25:46
¿Por qué? Porque queremos que siempre que no añada nada a este desplazamiento que vamos a hacer luego con el CC Move, que no añada nada hasta que no toque estas teclas. ¿Por qué? Para no ir capturando además valores.
01:25:49
Entonces, hasta que no se activa ese estrafe, que va a ser menos usado que el movimiento en profundidad, ¿vale? Hacia adelante o hacia atrás, pues no lo activa. Pero aquí, básicamente, veis que va a coger ese vector 3 de hacia donde está mirando. Si lo activas, va a coger también hacia donde está mirando, va a desplazarlo hacia la derecha con la fuerza que le estemos dando al axis de estrafe, ¿vale? Y otra velocidad que hemos creado para el estrafe.
01:26:03
Y finalmente, esos dos vectores, lo que va a hacer es sumarlos, ¿vale? En esta variable llamada vector move. Vector move suma estos dos valores. Por un lado, el desplazamiento hacia donde esté mirando, si le estamos dando, y por otro lado, el desplazamiento que conseguíamos como en este move right aquí, ¿vale? Si hay que añadir un estrafe.
01:26:29
Y aparte, como vamos a usar, siento que sea un poco complejo, pero estamos desglosando en distintos movimientos que luego se suman aquí en este punto.
01:26:56
Y luego, aparte de este vector move, hay que sumarle este fall direction, que es un valor que en todo momento, como estamos usando el move que no agrega por defecto la gravedad, estamos creando con un fix update este método de gravedad con la fórmula que...
01:27:08
Bueno, había una fórmula de hacerlo más ortodoxa u otra que es ponerla a pelo, perdonadme la expresión, que es que la caída, esta variable, que haya una variable que sirva para en todo momento ir calculando la caída que tendría que tener.
01:27:31
Hemos creado una variable que se llama gravedad y esa variable hemos dicho que es menos 9,8, que al final es la fuerza de la gravedad la que da como resultado en la fórmula que os estaba poniendo antes en el ejemplo y que vais a encontrar en el tema.
01:27:47
De hecho, si vais a Project Settings y a Physics, aquí está, vais a ver que el valor que un Rigipodi, por ejemplo, aplica de gravedad es este menos 9,81. Aquí lo hemos replicado, menos 9,8.
01:28:02
que está haciendo
01:28:16
este método
01:28:19
gravedad en todo momento
01:28:21
pues va a haber una variable
01:28:22
de vector 3 que en todo momento está
01:28:24
aplicando esta gravedad y está sumándola
01:28:27
sumándola con un delta time
01:28:29
¿vale? ¿qué significa
01:28:31
esto? que va a ir añadiendo
01:28:33
esto se va a estar reproduciendo
01:28:34
en todo momento y va a estar todo el rato
01:28:37
calculando
01:28:39
y guardando esta variable
01:28:41
el desplazamiento
01:28:42
que debería ir hacia abajo para simular esa gravedad.
01:28:45
En caso de que se estuviera tocando suelo, para que no haya conflictos,
01:28:48
o si estamos subiendo, es decir, le hemos dado una fuerza hacia arriba
01:28:54
o en algún momento está calculando que no debería estar cayendo,
01:28:57
lo dejamos en cero.
01:29:04
Es decir, estamos anulando esa fuerza de gravedad en ciertas condiciones.
01:29:06
Pero en todo momento lo que estamos consiguiendo es,
01:29:09
siempre que no esté en el suelo, que haya una gravedad,
01:29:12
Que luego la vamos a usar aquí. Fijaos. A este vector move, aparte, sumale este vector 3. Como solo estamos afectando al eje Y, el resto va a ser 0 y 0. Pero va a haber un 0, un valor negativo de bajada de gravedad en Y y otro 0.
01:29:14
Entonces al sumarlo solo va a afectar, por ejemplo en esta operación, al desplazamiento que ya teníamos en profundidad y en horizontal, ¿vale? También se le va a estar añadiendo en caso de que se active, es decir, en caso de que se hubiera saltado, esta gravedad para que caiga, ¿vale?
01:29:34
Y aquí estamos básicamente guardando en vector move el vector 3 del desplazamiento que deberíamos luego aplicar a este move para que se mueva, ¿vale? También el simple move, otra, lo veréis en el tema, simple move no hace falta aplicarlo en time delta time porque ya lo hace por defecto, pero a move sí que hay que dárselo, ¿vale?
01:29:49
Entonces, esta es una forma de llegar a esto, hay otras. En vez de hacer esto de la gravedad con el fall direction y que en todo momento estamos ya dándole el resultado, se puede decir que el salto, en vez de decirle, cuando damos a saltar, igual que hay una gravedad que se está calculando todo el rato, que lo que hace es ir reseteando este fall direction,
01:30:12
Por otro lado, al darle a la barra espaciadora en el update, se ejecuta el método saltar. Y aquí en saltar, si está posado en el suelo, si no, no se ejecuta nada. Aparte de lanzar la animación visual en el animator controller del salto, también dice, vale, aquí lo que vamos a hacer es que el fold direction y pase a tener un valor de jump speed que hemos creado aquí, que es de 8.
01:30:37
Es decir, que de pronto fold direction va a valer 8. Y como esto va a hacer que de pronto deje de estar posado, al saltar, este fold direction que sumamos es positivo.
01:31:02
¿Hacia dónde moverá en ese caso? En vez de hacia abajo como la gravedad, va a subir. Y cuando ya, tened en cuenta que esto se va a aplicar solo en un fotograma, porque cuando vamos a saltar es un get key down, no es cuando estamos pulsando y en cada fotograma está añadiendose la fuerza.
01:31:18
En un solo pulsado va a hacer este saltar, va a añadir esta fuerza de golpe, va a subir, va a tener esa dirección y cuando ya empiece a perder esa fuerza, un poco simulando esa física, pues volverá a añadirle la gravedad que teníamos aquí.
01:31:36
más o menos me seguís
01:31:54
aquí os he dicho una cosa y por eso lo estoy mirando
01:32:05
claro, cuando le damos
01:32:08
esto no lo pone a cero y se ejecuta
01:32:09
cuando el jump speed
01:32:12
aporta un valor que es positivo
01:32:13
esto no nos lo resetea en cero
01:32:16
sino que está sobreescribiendo la gravedad
01:32:17
y ya cuando
01:32:20
ya en los siguientes fotogramas ya deja de haber
01:32:21
esa
01:32:24
digamos, esa fuerza que le hemos
01:32:24
aplica hacia arriba, pues ya vuelve otra vez a tener
01:32:28
la gravedad y vuelve a bajar.
01:32:30
¿Qué tal? ¿Me seguís?
01:32:35
¿Más o menos?
01:32:37
Más o menos, sí.
01:32:41
Vale.
01:32:44
Vale, bueno,
01:32:46
eso, rotar hacia los lados con las
01:32:47
teclas A y D, que es lo que asigna, pues
01:32:49
es simplemente un transform rotate.
01:32:51
No tiene
01:32:53
mucho más.
01:32:54
¿Vale? Decidme
01:32:57
dudas que tengáis.
01:32:58
Porque ya lo de enfundar-desenfundar
01:33:01
Ahora hablamos un poco de cámara de Cinemachine, pero para las cámaras, ¿vale?
01:33:03
¿Alguna duda?
01:33:15
Vale, sigo.
01:33:20
Igual que sucedía con los Terrain Tools, que había que incorporarlo en el Package Manager,
01:33:23
hay otro package que no viene por defecto, pero que es muy útil, que es el que se llama Cinemachine.
01:33:29
¿Vale? Que yo ya lo tengo aquí instalado.
01:33:34
Es instalarlo.
01:33:36
Cine Machine al instalarlo os incorpora aquí otro menú con muchas opciones. Pero básicamente lo que va a hacer es, por un lado, la cámara principal que tuvierais ya en la escena le va a añadir este iconito y va a incorporar, y si no, lo que habrá que hacer es buscar el componente que se llama Cine Machine Brain.
01:33:38
¿Por qué? Porque esta cámara realmente va a dejar de funcionar como una cámara
01:33:56
Me explico, va a ser la cámara principal a través de la que veamos todo
01:34:01
Pero va a estar sometida a otras cámaras que tengamos en la escena
01:34:04
De hecho yo aquí tengo otras dos cámaras
01:34:08
Con este menú que tenemos aquí podemos ir creando distintos tipos de cámaras
01:34:10
Hay muchos, pues uno para hacer como simulación de un travelling, para hacer cinemáticas
01:34:14
Hay otro que sirve para tener una vista libre
01:34:19
Hay otro que es para seguir al personaje, por ejemplo
01:34:22
este que tengo aquí, pues yo voy rotando
01:34:25
y es una vista libre, yo puedo irme moviendo
01:34:27
y bueno, hay algún límite porque no se mete
01:34:29
en el suelo, pero es vista libre, puedo
01:34:31
orbitar, todo esto se puede ir ajustando
01:34:33
pero yo, luego cuando doy a la
01:34:36
control y veis que pasa de una
01:34:37
a otra, estamos pasando de esta cámara
01:34:39
a esta, y literalmente
01:34:41
si nos fijamos en este cinemachine
01:34:44
que tenemos aquí, fijaos que yo
01:34:46
cuando cambio de una a otra
01:34:47
cambia, veis que pasa de llamarse
01:34:48
en cámara, como esta que tenemos aquí
01:34:52
a CML, a CMA, a Cine Machine,
01:34:53
perdón, a Free Look, ¿vale? Es un gestor, este Main Camera,
01:34:58
este Cine Machine Brain, de qué cámara es la que debemos ir
01:35:01
capturando, ¿vale? Entonces, vamos a ir preparando cámaras
01:35:05
en la escena, que en este caso, una, esta de Free Look, lo que va a hacer es
01:35:08
ir persiguiendo al personaje en todo momento, y esta que tenemos aquí
01:35:13
lo va a hacer igual, pero ya teniendo unas coordenadas próximas a su
01:35:17
a su hombro. Con Cinemachine lo que vamos a ir haciendo entonces es que cada cámara de Cinemachine va a tener el valor de prioridad. El que tenga mayor prioridad va a ser la que se vea, es decir, la que esté en este campo de la cámara en vivo de Cinemachine Brain.
01:35:21
¿Qué es lo que habrá que ir haciendo? Ir cambiando, por ejemplo, al desenfundar, ¿vale? Digo, la FreeLux Camera pasa a tener una prioridad de 1 y cuando enfunda pasa a tener de 22 para tener más que la otra, ¿vale? Y entonces se van cambiando de una a otra de manera automática.
01:35:38
Como sucedía en otros casos, para acceder a los métodos y propiedades de Cinemachine habrá que incorporar la librería de Cinemachine, Using Cinemachine. Tiene su propia librería con muchos parámetros que si no se usaran Cinemachine, pues para qué incorporarlos y qué pese.
01:35:54
Entonces, simplemente con esta línea ya podemos acceder a las propiedades y métodos de Cinemachine.
01:36:12
E igual que sucedía con el Animator y con el Character Controller, si queremos acceder a las propiedades de la Free Look Camera, por ejemplo, habrá que poner que acceda a ese componente de Free Look Camera.
01:36:20
Para acceder, ¿vale? Cinemachine Free Look Camera. Como siempre, se llama igual. Si quiere acceder a la orden en cámara, habrá que poner Cinemachine Virtual Camera, que es la otra cámara que he creado aquí.
01:36:36
Vaya, que cuando incorporamos esta librería, aquí podemos poner Cinemachine, ¿vale? Y aparecerán las distintas cámaras y propiedades que tiene Cinemachine.
01:36:51
Luego, igualmente, habrá que capturar con un GetComponent esa cámara de Cinemachine o, como se puede hacer aquí, poner un SerializeField y lo hemos arrastrado directamente.
01:36:59
directamente. Recordad que como esta cámara, a diferencia de los otros componentes que hemos
01:37:14
hecho el GetComponent, no es un componente que esté en el propio objeto que tiene el script,
01:37:22
a CharacterController y el Animator, con un GetComponent era fácil, pero aquí lo que queremos
01:37:26
es controlar desde el personaje o un componente que está en otro objeto. Entonces ahí lo más fácil
01:37:31
es serialize fill y arrastrarlo y que ya coja ese ese componente vale y una vez lo tenemos pues bueno
01:37:38
hay mucha documentación de cinemachine os dejo vídeos es ir viendo cómo se controlan en el tema
01:37:46
os dejo los principales valores pero hay dos cámaras principales la virtual y la free look
01:37:51
la virtual es como una cámara pues que intenta basarse más en un objeto al que seguir vale
01:37:59
Sería esta, por ejemplo, aunque le haya cambiado el nombre.
01:38:05
Esta es una virtual cámara.
01:38:07
Y con esto lo que podemos hacer es decirle, vale, tú sigue a un personaje y lo arrastramos.
01:38:09
Sigue al personaje y luego aparte hacia donde tiene que mirar es hacia la cabeza del personaje
01:38:13
para que esté un poco a su altura.
01:38:19
Veis que lo que está centrado es la cabeza, ¿vale?
01:38:20
Ya arrastrando esos dos elementos, ya vais a ver que tenéis una cámara
01:38:23
con la que podéis orbitar alrededor de un personaje y le va a ir siguiendo, ¿vale?
01:38:27
Algo que, como hemos establecido las cámaras hasta ahora,
01:38:32
Pues será más complicado
01:38:35
Simplemente ya por cómo viene configurado
01:38:36
¿Vale? Vais a ver que con el ratón
01:38:39
Vais a poder ir
01:38:41
Moviendos
01:38:42
Alrededor
01:38:44
El ratón es el que hace que se mueva
01:38:45
Porque, a ver, perdonad
01:38:49
En algún punto
01:38:50
Es que por defecto ya viene
01:38:53
Con el que coja el ratón
01:38:55
Pero esto se podía cambiar
01:38:57
A ver, un segundo
01:38:58
En algún momento
01:38:59
No
01:39:01
a ver
01:39:02
en donde se definía
01:39:05
porque por código, perdón
01:39:10
a lo mejor lo hice por código
01:39:16
pero por defecto
01:39:18
si, es que por defecto ya viene con la
01:39:19
con la cámara
01:39:21
para que se mueva así
01:39:24
lo que se puede ir definiendo
01:39:27
vale, debería haber
01:39:29
creo que para cambiarlo si que hay que añadir una extensión
01:39:31
pero por defecto está cogiendo la
01:39:35
es que no me acuerdo muy bien
01:39:37
porque siempre con lo hago con el ratón vale lo que sí se puede ir haciendo es pues por ejemplo
01:39:39
en este no perdona la que orbita directamente la free look vale verdad y esa es la que sí que está
01:39:47
vinculada a el x y axis está vinculada a al axis de pivotar bueno aquí está con él con él
01:39:55
el Input Provider, que es para el Input System, pero os saldrá, si no, directamente con el ratón normal.
01:40:05
Esta es la que permite rotar igual. Queremos que siga al superviviente y que apunte hacia la cabeza.
01:40:19
Se pueden ir poniendo, y si vamos a escena lo veremos, tres, lo que se llaman Rigs,
01:40:26
¿Vale? Que son esos tres
01:40:31
Circulitos rojos
01:40:34
Que son a distintas alturas
01:40:36
A las que se puede poner, si os fijáis cuando yo voy
01:40:38
Moviendo la
01:40:40
Cámara, ¿vale? Veis que cuando
01:40:40
Se pone arriba como que se cierra
01:40:44
Como que hace, como si hiciera una esfera
01:40:45
Alrededor del personaje, ¿vale?
01:40:47
Todo eso se puede ir definiendo
01:40:49
Con el middle rig
01:40:51
El bottom rig, ¿no? Por ejemplo, queremos que
01:40:53
El bottom rig, que si bajamos
01:40:55
Sea mucho más grande
01:40:58
Pues con esto, si vamos al botón Rig y buscamos el punto en el que se hace más grande, que va a ser aquí, ¿vale? En el botón Rig vamos a darle un radio mucho mayor, ¿vale? Vais a ver que yo ahora cuando baje esta FreeLux Camera se aleja, ¿vale? Bueno, y ahí no he ajustado el cápsula este del carácter control, pues no se está posando bien, pero veis que se aleja en vez de estar acercándose como sucedía antes, ¿vale?
01:40:59
Pues aquí hay tres rigs, luego con sus propias configuraciones, con las que podemos ir definiendo distintos comportamientos.
01:41:28
Que si el personaje cuando está en el centro, si rotamos mucho hasta que no llegue a un cierto punto, que es esto que tenemos aquí, no se intenta recolocar.
01:41:34
Que cuando soltamos, veréis que se recoloca pasado cierto tiempo, que es el de dumping.
01:41:44
Bueno, hay un montón de opciones y tampoco en este curso nos vamos a meter mucho en esto.
01:41:49
Os he dejado tutoriales de ampliación y un poco en el tema se habla de ello, pero lo importante es eso, saber que el main camera lo que está haciendo en todo caso es gestionar qué cámara se está viendo de las otras que tengamos de Cinemachine creadas, ¿vale?
01:41:53
Y todo eso dependerá de, bueno, pues que esté activa también en vez de darle prioridad, ¿vale?
01:42:08
En lugar de la prioridad también se puede decir que esta FreeLux Camera de pronto no está activa.
01:42:13
Pues ahora la que está cogiendo es la otra que hay, que sí está activa y tiene la prioridad más alta, ¿vale?
01:42:20
Si lo vuelvo a activar, que también sabríamos activarla por código, al darla vuelve a ser la que tenemos aquí, ¿vale?
01:42:26
Entonces, con estas opciones, pues podemos ir generando la cámara de seguimiento y, bueno, un poco lo que resuelve la tarea. Luego estaría todo lo relacionado con la inteligencia artificial, que es el NASMES, es el último apartado del tema, que básicamente es otro modo de mover personajes.
01:42:33
En este caso suele ser, aunque no siempre, he visto usos creativos incluso en alguno de vuestros proyectos, un compañero lo ha hecho, que ha usado el NASMES para mover al personaje principal.
01:42:53
Pero un NASMES, como sucede con este zombie, básicamente lo que es, en el tema se habla de cómo se despliega, etc.
01:43:04
Pero si vamos aquí a Navigation hay un panel con el que podemos definir de un escenario qué partes son navegables por un automata, por una inteligencia artificial.
01:43:11
Entonces, por ejemplo, en estas opciones se pueden poner también opciones de cuánto de empinada y qué altura de escalones puede caminar ese personaje.
01:43:22
Bueno, pues cuando se baquea y se le asocia a un personaje con los distintos elementos de un Nazmesh, luego cuando lo aplicamos a los zombies, este Nazmesh agent podrá decir que sea de tipo humanoide y se mueva por las zonas que se han baqueado.
01:43:35
Entonces el personaje ahí es donde sabrá por dónde ir caminando. Y de una forma autónoma, con una variable que se llama, con una instrucción que se llama setDestination, que es esta de aquí, podemos ir diciendo que se mueva de un punto a otro siguiendo esa malla de navegación que se ha dibujado.
01:43:57
¿Vale? Entonces, con el
01:44:19
NavMesh, lo que se hace es
01:44:21
Definir las áreas del escenario por las que
01:44:23
Cada objeto puede ir moviéndose
01:44:25
¿Y qué se va haciendo?
01:44:27
Pues se le van diciendo puntos del escenario
01:44:29
Entre los que ir caminando
01:44:31
Y se irá caminando
01:44:32
Con una velocidad concreta
01:44:34
¿Vale? Con una aceleración
01:44:37
Concreta, irá de un punto a otro
01:44:39
Sin parar
01:44:41
Que luego, en cierto, vais a ver
01:44:42
Mirad ese personaje que está ahí quieto
01:44:45
Y de pronto dice, ala, me pongo a caminar hacia otro sitio
01:44:47
Eso es porque le hemos marcado otro punto del escenario y va a ir caminando por las áreas que puede caminar hasta llegar a ese punto de manera automática. Cuando llega a ese punto, dice, tengo que ir a otro. Y que se va a ir diciendo. Cuando un personaje, cuando un agente llega a un destino, ¿vale? De pronto, a ver, perdonad, esto va a estar aquí, ¿vale? Ronda random.
01:44:49
Si no está aceptada el personaje, que es una condición que si ve al personaje, digamos, cambia, ¿vale? Va a ir de un punto a otro de los que están definidos en un array y va a ir a ese, setDestination. Cuando llega al destino, vuelve a capturar otro destino y volverá a hacer otro setDestination hasta otro punto, ¿vale?
01:45:15
En el tema nuevamente se os ponen instrucciones de cómo conseguir esto, pero sobre todo que sepáis eso, que la NATMES sirve para crear estas mallas de por dónde se puede caminar en función de, pues eso, inclinaciones, pasos, zonas que nosotros demarquemos que también se pueden marcar áreas con colliders, por ejemplo, y por ahí no puede caminar, ¿vale?
01:45:34
Entonces, ya con eso, el personaje va a tener las áreas, esta inteligencia artificial, por las que va a poder caminar. Si, por ejemplo, el personaje pudiera subir con ese carácter controller cuestas más empinadas que el personaje, pues en este juego, bueno, no sé en qué valores lo he puesto, pero el chico ya casi no sube ahora, ¿vale? Una forma de salvarse sería subir más que el automata, porque hasta cierto punto no podría subir, ¿vale? Fijaos que ahí se ha quedado quieto, ¿vale?
01:45:57
Yo he conseguido llegar por un salto, por eso se ha quedado así un poco pillado, ¿no?
01:46:24
Pero veis que el zombi ya no puede subir, intenta llegar a mí porque ahora mismo su destination es mi transform
01:46:29
y por eso siempre va a intentar seguirme, ¿vale?
01:46:35
Con set destination a ese personaje le estamos diciendo hacia dónde tiene que ir, ¿vale?
01:46:38
Y no va a dejar de perseguirme hasta que estemos a una distancia que pase a un estado de no detectado, ¿vale?
01:46:43
Bueno, esto ya, esa parte de la IA es la opcional, ¿vale? Estos NATMES es opcional, pero también tenéis que conocer un poco pues que es un Finite State Machine, una FSM, que es uno de los apartados de los que se habla y un poco el funcionamiento básico de una inteligencia artificial en Unity, ¿vale?
01:46:50
Las inteligencias artificiales, cada motor de videojuegos lo tratará de una forma u otra, pero Unity se basa en función de estos navmes, que son esas mallas que se pueden ir generando para que un personaje autómata se vaya moviendo por ahí.
01:47:09
vale, dudas
01:47:24
sé que habrá un millón
01:47:27
sobre todo si no os habéis puesto con la tarea
01:47:28
si no hacéis la tarea habrá un millón todavía
01:47:30
aunque podéis tener en la cabeza
01:47:32
los conceptos y los métodos principales
01:47:35
y cómo funcionan, por ejemplo lo que se habla hoy
01:47:37
pero bueno
01:47:39
hasta que no os sentéis a intentar hacerlo
01:47:41
pues todo se queda un poco en teoría
01:47:43
¿vale? para superar el examen nos puede servir
01:47:45
yo siempre os animaré
01:47:47
a que intentéis hacer la tarea
01:47:49
pero bueno, entiendo las circunstancias de cada uno
01:47:50
Y que por cómo es la normativa y cómo están las reglas del juego, digamos, las tareas no son obligatorias para superar el módulo.
01:47:53
Así que ya cada uno hará lo que quiera hacer, claro.
01:48:00
Vale, pues nada, podríamos hablar muchas más horas, pero tenemos que cortar.
01:48:07
Si tenéis dudas, decidme y si no, pues más o menos hemos hecho un repasín de esta unidad.
01:48:15
¿Cómo lo veis?
01:48:20
Le paso visto, vale
01:48:25
Lo dicho
01:48:26
Cuando vayáis leyendo el tema
01:48:27
Entiendo que esto os habrá ayudado
01:48:30
A contextualizar algunas cosas
01:48:32
Pero bueno
01:48:34
Vale
01:48:36
Lo dicho, pues nada
01:48:37
Para el examen queda
01:48:40
Queda un mes largo
01:48:42
Todavía tenéis tiempo
01:48:45
Es decir, que si lo lleváis al día
01:48:46
Os queda finiquitar este tema
01:48:49
ver el siguiente
01:48:51
que tiene muchas cosas
01:48:53
pero creo que ninguna es muy compleja
01:48:55
a no ser
01:48:58
como todo, si os metéis en harina
01:48:59
de intentar desgranar y más
01:49:01
tocamos muchas cosas, a veces superficiales
01:49:03
porque no da tiempo a profundizar más
01:49:05
pero bueno, creo que abarca muchas cosas
01:49:07
pero bueno, creo que es asequible
01:49:09
la tarea sí que tiene complejidad
01:49:12
si os metéis de verdad a intentar
01:49:14
hacer un shader
01:49:16
aunque os dé uno ya hecho
01:49:16
por si queréis omitir también esa parte
01:49:19
Bueno, pues ponerlo en práctica lleva tiempo también, porque primero hay que comprenderlo y ir poco a poco, pero es la forma. Vale, pues habrá una tutoría del tema 7 que, según vayamos viendo el calendario, puede que se combine con repaso del módulo, un poco de hablar de cara al examen, qué miraría más, qué menos, ¿vale? Un poco pistas, aunque yo os digo, por muchas pistas que os diga, puede entrar todo el temario que está establecido como materia de examen, pero bueno, algo veremos.
01:49:21
Si hay más tiempo, intento hacer una solo del examen y una solo de la unidad 7, pero bueno, tampoco quiero agobiaros con muchas tutorías, a menos que vea dudas en los foros, claro.
01:49:51
Pero como no las veo, pues eso, yo voy hablando un poquito de las cosas y lo intento conectar con la tarea para ayudaros y que lo ubiquéis mejor.
01:50:04
Bueno, me callo. ¿Alguna duda? ¿Algo que queráis que hablemos?
01:50:13
ya has hablado mucho
01:50:18
sí, sí, tengo la boca bastante seca
01:50:22
pero bueno
01:50:25
todavía me queda para un rato
01:50:26
si lo necesitáis
01:50:28
pues nada, damos por
01:50:29
concluida la tutoría
01:50:34
y sé que
01:50:36
es complicado, sé que hay muchas cosas
01:50:38
pero bueno
01:50:40
también espero que os pueda ser útil en algún momento
01:50:41
y que os parezca interesante
01:50:44
pues lo dicho, muchas gracias por
01:50:45
asistir y nos vemos
01:50:48
calculo que en un par de semanas
01:50:49
es que también algunos compañeros
01:50:52
tienen ahora las defensas de proyectos
01:50:54
hay que intentar cuadrar los días
01:50:56
esperemos que tampoco haya apagones generales
01:50:57
porque visto lo visto
01:51:00
entonces bueno, os lo iré anunciando como siempre
01:51:01
pero eso, habrá todavía
01:51:04
que dar alguna tutoría
01:51:06
pues muchas gracias por
01:51:07
asistir, por vuestro tiempo
01:51:09
gracias a ti, hasta luego
01:51:12
- 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:
- 27
- Fecha:
- 29 de abril de 2025 - 20:15
- Visibilidad:
- Clave
- Centro:
- IES CIFP a Distancia Ignacio Ellacuría
- Duración:
- 1h′ 51′ 20″
- Relación de aspecto:
- 1.78:1
- Resolución:
- 1920x1080 píxeles
- Tamaño:
- 922.32 MBytes