Saltar navegación

Tutoría 13 - DEIM - Examen Ev. Ordinaria - Curso 23·24 - 17 Mayo - Contenido educativo

Ajuste de pantalla

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

Subido el 18 de mayo de 2024 por Daniel M.

39 visualizaciones

Grabación de tutoría de DEIM

Descargar la transcripción

Pues, inicio grabación. ¿Qué tal? ¿Cómo estáis? ¿Cómo va todo? 00:00:02
Muy liados, la verdad. 00:00:07
Con el estudio, ¿no? Entiendo. 00:00:09
El estudio, el trabajo y todo lo demás, pero bueno, bien. 00:00:11
Sí, un poco igual. 00:00:14
Vale. Venga, pues vamos a ello. Así de primeras, aunque luego lo posponga un poco para después, según lo que me vayáis planteando. 00:00:16
¿Así dudas que me queráis plantear? ¿Hay alguna? Que no he visto ninguna en foros, etc. 00:00:24
Sí, yo tenía una duda 00:00:28
con respecto a las preguntas abiertas 00:00:30
¿Van a ser definiciones o van a ser 00:00:32
hazme un script 00:00:34
de algo por el estilo? 00:00:36
Puede ser 00:00:39
es decir, te lo respondo 00:00:39
ahora o después, si te parece, ¿vale? 00:00:43
Si voy a hablar 00:00:45
del simulacro y así también hablo 00:00:47
para no dar dos veces la vuelta a lo mismo 00:00:48
¿Alguna cosa más? 00:00:50
Para yo tenerlo en cuenta, es para gestionar 00:00:54
un poco el... Vale 00:00:56
Lo primero, bueno, entiendo que la fecha, el aula, os he enviado mensaje, lo tenéis creo todo en el aula virtual. Voy a compartir pantalla también para que no haya problemas. Compartir audio también por si acaso. Vale. 00:00:58
Vale, pues vamos a ver, me meto en DAME. Nada, simplemente entiendo que no hay dudas sobre lo que es el procedimiento de examen. Importante es que me confirméis, bueno, ya os lo hice saber a través del foro, lo vimos en alguna otra tutoría, de hecho, el simulacro de examen, ¿no? 00:01:13
Que es algo que recomiendo muchísimo que veáis, sobre todo para que conozcáis ya las instrucciones, que van a ser las mismas del día del examen, ¿vale? No sé si tenéis dudas sobre ello. Por ejemplo, en los exámenes a veces está la duda de, bueno, que hay gente que en el tipo test empieza a marcar las preguntas en el cuerpo de texto. 00:01:35
Recordad que hay que responder siempre en la tabla de respuestas. Y el criterio de tachar, si queréis cancelar, dejar sin respuesta alguna de las opciones que hay dado, incluso la respuesta corregida, pues está el procedimiento escrito y en el simulacro incluso se ve. 00:01:55
También se ven, bueno, son ocho preguntas, además que no van a ser las mismas en el examen, pero sirve un poco para ver la estructura de ocho preguntas de tipo test. 00:02:17
Serán 32. Importante que sepáis que las respuestas correctas suman y las erróneas restan un cuarto de la pregunta, digamos, un 0,0625. 00:02:27
Entonces, es importante que tengáis en cuenta que una respuesta fallida puede restar. Sobre la pregunta del compañero, y así ya voy, aparte de las de tipo test, que entiendo que es más sencillo, puede caer cualquier cosa de las que estamos tratando en el curso, pero básicamente van a ser preguntas tipo test con una sola respuesta posible correcta. 00:02:39
Sobre las preguntas de desarrollo, ¿vale? En los dos hay tres ejemplos porque, bueno, otra cosa que puede pasar, no va a ser el caso, pero va a haber dos preguntas de desarrollo. 00:03:09
Aquí la segunda la dividí en dos apartados, entre otras cosas, para poner más tipologías de pregunta, pero va a haber dos preguntas de desarrollo, ¿no? Una, dos, no van a ser tres. 00:03:20
Sí que es verdad que como sucede, perdonad que suba y baje tanto, ¿vale? Como sucede en esta, se puede descomponer en varios ítems o que pida varias cosas, ¿vale? 00:03:29
Os adelanto ya, ¿vale? Que estas preguntas, y va a haber una de ellas muy parecida a este tipo de pregunta, en la que va a haber un código y va a ser que interpretéis ese código, ¿vale? 00:03:37
Y ahí, digamos que es un poco abierto a que yo vea la comprensión que tenéis de ese código, en base a lo que os pregunto, pues suele ser esta línea, ¿vale? 00:03:50
Si, por ejemplo, os pregunto qué supone a nivel de código esta línea, pues que me digáis, ¿vale? Tanto de dónde viene, por ejemplo, esta variable, ¿vale? Pues que es de tipo animator para hacer animaciones, como que hace este método, ¿vale? 00:03:59
Incluso si luego me decís, porque los códigos no van a ser muy largos, esta línea luego es usada en este punto, en el método de saltar, porque se va a ejecutar un trigger llamado jam dentro del panel animator, de los parámetros que se han ejecutado, ese tipo de respuesta sí que es amplia. 00:04:12
De los 10 puntos que consta el examen, 2, uno a cada pregunta, va a ser de desarrollo. Y son de desarrollo un poco en parte para ver cómo os expresáis también y cómo lo entendéis. 00:04:33
Porque es cierto que las preguntas de test pueden ser muy concretas o tratar cualquier punto, pero sí que en estas preguntas se trata un poco de que desarrolléis, como dice la propia tipología de preguntas. 00:04:45
Entonces, os sugiero, esto es una sugerencia, que primero leáis las preguntas de desarrollo al iniciar el examen para ver un poco de qué van, y ver cuánto tiempo os puede llevar, si lo entendéis o no, y luego hagáis, es decir, no contestéis, pero que lo tengáis un poco en cuenta para no gastar todo el tiempo del examen en desarrollar esto. 00:05:00
porque es verdad que puede ser muy amplio 00:05:24
no hace falta que sea súper minucioso 00:05:27
lo que me importa es que yo vea 00:05:29
si la pregunta es de este tipo 00:05:31
que va a haber una de este tipo, con otras líneas 00:05:33
pero va a ser de este tipo 00:05:35
que entienda que entendéis 00:05:36
pues que es cada línea 00:05:38
y por qué está ahí y qué función tiene 00:05:40
porque no va a haber líneas al azar 00:05:42
no debería haber líneas 00:05:44
si que alguna a lo mejor no se 00:05:46
está referenciando 00:05:48
no es la que hay que contestar 00:05:50
Pero que no son líneas de paja, digamos, puestas a drede, no debería ser. Pero sí que, pues eso, si aquí, por ejemplo, esta variable está guardando la referencia a un componente animator de este script en el que se está aplicando, pues si luego también habláis, se pedirá que habléis en el conjunto de código qué función tiene, pues eso es lo que va a dar la nota máxima. 00:05:52
Lo bueno de estas preguntas de desarrollo, de estas dos, es que a diferencia de las de tipo test, no restan. Es decir, puede restar de que yo no vaya sumando porque no ponéis nada que sea la respuesta, pero bueno, que podéis esmeraros. 00:06:16
A ver, me preguntan, ¿te tendríamos que explicar qué hace esa línea o explicar el código en general? Sobre todo, en este caso, por ejemplo, me interesa que me expliquéis esta línea, pero para hablar de esta línea y de esta primera parte me tendréis que hablar de dónde viene esta variable, se ha generado antes. 00:06:32
entonces, para yo saber que entendéis 00:06:51
toda la línea, por partes 00:06:53
sí que debería haber una mención 00:06:55
a que se ha declarado 00:06:57
esta variable de tipo animator 00:07:00
¿vale? Sí 00:07:01
claro, me preguntan también, en plan 00:07:03
¿qué hace el getComponent en este caso? 00:07:05
claro, eso es lo que me interesa 00:07:08
que me digáis, ¿por qué? ¿qué acción 00:07:09
hace este 00:07:12
esta instrucción, esta orden? 00:07:12
¿vale? pues por ejemplo aquí 00:07:16
dado que no hay nada que referencia 00:07:17
otro script, lo que quiere decir aquí es que esta variable llamada 00:07:19
anim de tipo animator está referenciando un componente 00:07:23
llamado animator, ¿vale? Está cogiendo esa información y a partir de ahí, siempre 00:07:27
que hablemos de esta variable, estaremos 00:07:31
aplicando instrucciones o dirigiéndonos al componente 00:07:35
que está aplicado en ese script, ¿vale? 00:07:40
Entonces, por ejemplo, si aquí no hubiéramos cogido este getComponent, este 00:07:43
animator cuando hiciéramos 00:07:47
la orden derivada de todo esto 00:07:49
setTriggerJam, si no hubiéramos 00:07:51
hecho este getComponent no funcionaría 00:07:54
entonces sobre todo es eso 00:07:55
o por ejemplo aquí 00:07:57
se ha generado en esta segunda línea 00:07:59
se ha generado una variable de tipo float 00:08:01
una variable global 00:08:03
y en el método update se está 00:08:05
declarando que este 00:08:07
xAxis lo que esté recogiendo es 00:08:09
una interacción 00:08:11
del jugador, por eso estamos usando 00:08:13
esta clase input 00:08:15
que se basa en un eje 00:08:16
que por tanto tiene 00:08:19
posiciones que puede captar 00:08:21
tanto hacia lo positivo y lo negativo 00:08:23
y ese getaxis 00:08:25
se llama horizontal 00:08:27
se tiene que haber planteado antes en los 00:08:28
project settings que ese eje se llame 00:08:31
horizontal, ¿para qué se usa luego? 00:08:33
pues por ejemplo si vamos bajando 00:08:36
se mostrará en consola 00:08:37
en el posterior de backlog 00:08:39
y aparte se usa para añadir 00:08:41
una fuerza 00:08:43
por físicas al objeto, ¿vale? Sobre todo me interesa, sobre todo, de esta línea hacia su declaración, es lo más importante, ¿vale? 00:08:44
Si luego aparte me habláis de esta línea, posteriormente, esta explicación de esta línea, evidentemente es lo que quiero, pero si aparte me decís 00:08:54
cómo se usa después, pues mejor aún, ¿vale? O por ejemplo, aquí si os fijáis, y esta ya sí que hay que ser lógico, si pregunto que en el update 00:09:02
Si se cumple esta condición, esta línea, al decir saltar, me tendré que decir que se está llamando al método saltar, que posteriormente hará tal cosas y además se le llama cuando se pulse la barra espaciadora, en el momento de pulsar la barra espaciadora. 00:09:12
Entonces, si esta línea no es solo decirme, ¿se ejecutará el método de saltar? Eso no se considera una respuesta específica y correcta. Es decir, sí que sumará algo de puntuación, pero si estoy señalando esta línea y estoy diciendo qué función tiene en el contexto del script, pues tenéis que desarrollar un poco hacia dónde va y de dónde viene. 00:09:27
en este caso, de hecho es 00:09:47
casi 00:09:51
exigible que me contéis 00:09:52
que este método hace estas acciones 00:09:55
00:09:56
alguien creo que ha levantado la mano 00:09:58
sí, yo 00:10:00
a ver, entonces sería más o menos una cosa así como decir 00:10:03
genero dos variables 00:10:05
una animator y otra rigidbody rb 00:10:06
la primera, el start 00:10:09
la declaro, cojo su componente 00:10:11
animator y luego además 00:10:13
dentro del componente animator 00:10:14
me acedo a su RigidBody 00:10:16
lo cual me permite a base abajo 00:10:18
con el tema de saltar, recuperarla 00:10:20
a través de un trigger, más o menos sería una cosa así 00:10:22
¿no? Sí, es verdad que por ejemplo 00:10:24
me has hablado del RigidBody y para 00:10:26
esta línea, ¿vale? no es 00:10:28
necesario, me estás hablando de algo que no tiene 00:10:30
nada que ver con la línea. Sí, pero la siguiente 00:10:32
sí está. Sí, pero yo te estoy hablando 00:10:34
de esta línea solo, cuando te pregunto 00:10:36
por el ítem 1, ¿vale? 00:10:38
O sea, solamente las específicas esas, ¿vale? 00:10:40
Efectivamente, pero te estoy hablando de esta línea 00:10:42
y esta línea sí que tiene 00:10:44
vinculación con otras líneas dentro del script 00:10:45
¿vale? aquí en este punto 00:10:48
no estamos hablando, en el 1 no estamos hablando 00:10:49
del rigidbody, no tiene nada que ver el rigidbody 00:10:51
es decir, yo podría borrar la línea del rigidbody 00:10:54
y esta funcionaría perfectamente 00:10:56
y luego posterior 00:10:57
¿vale? sí que es verdad que 00:10:59
cuando te ponga esta, aquí sí 00:11:01
me tienes que hablar de ese rigidbody 00:11:03
porque si no he hecho esta operación 00:11:05
de antes, esto no funcionaría 00:11:07
¿vale? esto en las prácticas 00:11:09
lo habéis puesto en práctica, básicamente 00:11:11
esta va a ser una, luego es muy probable 00:11:13
que haya otras de tipo 00:11:17
hay un error en el script 00:11:18
¿por qué? ¿cómo se solucionaría? 00:11:21
vale, pues es que veáis el script 00:11:23
igual que haría 00:11:25
y vosotros al hacerla 00:11:26
un script, el desarrollo de un script 00:11:28
pues claro, cuando sale esta línea no se ejecuta 00:11:30
el script, es un error 00:11:33
por tanto hay que ver cómo solucionarlo 00:11:34
vale, pues en vez de hacerlo no tenemos 00:11:36
ordenador para hacerlo, pero me lo podéis comentar por escrito 00:11:39
y otra tipología 00:11:41
de pregunta de desarrollo es que os pregunte 00:11:42
este método, ¿qué es lo que hace? 00:11:44
¿Vale? Y hay dos métodos 00:11:46
muy parecidos o que hacen acciones parecidas 00:11:48
¿qué es lo que harían? 00:11:50
¿Vale? Pues por ejemplo, aquí hablo 00:11:52
¿qué diferencias hay entre 00:11:53
getKeyDown, getKey y getKeyUp? 00:11:56
Pues la respuesta correcta sería que son 00:11:59
tipos de interacción basados en 00:12:00
pulsar una tecla, ¿vale? 00:12:02
Solo que la diferencia entre los tres 00:12:04
un poco, pues hablando de cada uno 00:12:06
uno se activaría, se ejecutaría 00:12:08
la orden en el momento que se pulsa la tecla, otro en este GetKey mientras se mantiene pulsada 00:12:11
y en el GetKeyUp cuando se soltara. Y luego ya si ponéis un ejemplo de qué hace cada 00:12:16
uno, un ejemplo específico, pues ya la respuesta sería redonda. Yo sobre todo voy a intentar 00:12:21
ver qué entendéis, bueno, pues qué es lo que se os pregunta. Por ejemplo, antes intentaría 00:12:27
ser lo más específico posible. Cuando el compañero ha dicho que hacía esta línea, 00:12:36
al hablar del GetComponent es que recoge el componente del GameObject en el que esté aplicado este script. 00:12:40
Hay que decir que esto es lo que hace el GetComponent. 00:12:48
El GetComponent es básico, lo habéis usado en todas las tareas desde la unidad 3 como mínimo. 00:12:50
El GetComponent es una referencia al componente que tiene el objeto. 00:12:55
Es una especie de puente que se hace. 00:13:02
¿Sí? ¿Hasta aquí dudas? 00:13:06
ahora de todos modos cuando vayamos también repasando 00:13:07
cada tema pues os voy 00:13:11
os voy 00:13:12
bueno, diciendo lo que me parece más importante ¿vale? 00:13:14
vale, hasta aquí dudas 00:13:19
habéis ojeado el simulacro 00:13:21
y no hay duda de 00:13:23
ni de la estructura digamos 00:13:25
ni de 00:13:27
ya os digo, las de desarrollo 00:13:28
como veis van a ser amplias 00:13:31
esos dos puntos de 10, entonces 00:13:32
os sugiero que las de tipo test no las dejes 00:13:34
para el final, para que no perdáis todo el tiempo 00:13:37
a lo mejor, pero a veces está bien 00:13:39
también de primeras echarle un vistazo 00:13:41
a las dos preguntas, para tenerlas ahí 00:13:43
digamos, cocinándose 00:13:45
esto por supuesto es una recomendación 00:13:47
lo podéis hacer como queráis, y luego ya iría haciendo 00:13:49
el tipo test, son 8 puntos 00:13:51
es lo que más puntuación 00:13:54
en conjunto 00:13:55
aporta 00:13:56
y una vez ya esté esto 00:13:58
realizado, yo pasaría 00:14:01
a desarrollar estas 00:14:03
que tenemos aquí, además 00:14:05
Además, esto es como consejo, es cierto que, igual que os he dicho que en todas las tareas, desde la unidad 3 como mínimo, habéis estado usando este GetComponent, hay cosas que se repiten, lo habréis visto, ¿no? Hay cosas como incluso mecánicas, por declarar variables, etc. 00:14:07
Sí que es verdad, esto también como consejo, a medida que vayáis haciendo las preguntas de tipo test, al pensar cómo se resuelven, contestáis algunas, también como que refrescáis algunas cosas que luego puede que estén aquí, que a lo mejor de primeras os ponéis a contestar y os bloqueáis, y oye, a veces el tipo test hasta puede dar pistas. 00:14:22
No sé si me estoy explicando, pero que, digamos, hacer como un repaso de temas, de las preguntas y luego volver a esta, yo lo aconsejo así. Oye, que queréis hacer primero esto y os lo quitáis de encima, pues, por supuesto, yo no voy a saber el orden, tampoco no me importa. 00:14:42
Pero sí que intentad que se note que en estas de desarrollo, y por eso se han planteado las de desarrollo, aparte de porque a nivel de centro, digamos, se ha dicho que debe ser así, que tiene que haber algo de desarrollo, que se note, que entendéis que es cada línea. 00:14:57
Vale, ¿dudas con esta parte? Vale, pues bueno, lo minimizo en cualquier caso y vamos un poco por temas, ¿os parece? Bueno, eso, no he visto ninguna duda de los foros, entonces entiendo que así no hay ninguna duda a resolver, si no decídmela, porfa, y si no, pues vamos tirando. 00:15:13
Y básicamente lo que voy a ir es pasando un poco por los temas y lo que digo siempre, entrar entra todo lo que no esté en las cajas de saber más. Bueno, os voy a enseñar el ejemplo de esas cajas, pero vaya, que a poco. 00:15:40
En las de para saber más, en muchas ocasiones lo que hay es, digamos, información extra, que por supuesto, cuanto más sepáis, siempre mejor, pero no va a ser el contenido directo del examen. 00:15:56
Lo que sí que se considera, ya lo he comentado en alguna tutoría, el contenido del examen como aplicación de este examen son los enunciados de las tareas, que son voluntarias, pero eso no significa que no debierais saber resolverlas, al menos las partes que no eran opcionales. 00:16:12
Entonces, bueno, pues eso, que básicamente es importante que hayáis hecho un seguimiento del curso, vaya, en la medida de lo posible. 00:16:31
Pero ya os digo, lo que es el contenido del examen es los cuerpos de texto y, bueno, las cajas que son destacado o deberías conocer esas si son importantes. 00:16:41
Vale, sobre el tema cero transversal, que como entiendo que habréis visto a lo largo del curso, es transversal porque en todo momento se está programando, 00:16:49
Se hace desarrollo y, por tanto, se está volviendo una y otra vez. 00:16:58
Luego se van dando esos métodos o acciones concretas de código referenciado a Unity, 00:17:02
pero estas bases de programación son comunes a todos los lenguajes. 00:17:09
Sobre este primer tema, saber un poco en qué se basa la programación, sí, podría ser interesante. 00:17:13
No me parece muy concreto, así que no tendría... Este tipo de preguntas para desarrollo, por ejemplo, no entraría. No creo que os pregunte este tipo de cosas, pero bueno, a tipo test sí que es importante que sepáis que existen los lenguajes de alto nivel, de bajo nivel, que es un IDE, en nuestro caso Visual Studio. 00:17:21
Bueno, ya sabéis un poco cómo funciona el IntelliSense que tenemos en Visual Studio para ir completando código, etc. Bueno, esto sobre todo si habéis estado haciendo las prácticas, igual esto es importante que sepáis que es un lenguaje interpretado y compilado, pero no es en lo que más me centraría. 00:17:42
Ojo, puede entrar 00:18:00
Este apartado de concepto básico de programación 00:18:02
Me parece muy importante 00:18:04
No solo porque os pueda preguntar 00:18:05
Sobre qué es una variable, por ejemplo 00:18:08
O cualquiera de estos apartados 00:18:10
Sino porque básicamente 00:18:11
Es esencial para que podáis aplicar el resto 00:18:12
Entonces es importante 00:18:16
Que sepáis qué son las variables 00:18:18
Los tipos de variables 00:18:19
Cómo se declaran en Unity, en César 00:18:20
Por ejemplo, que un float 00:18:23
Lleva una F, pues eso es vital 00:18:26
Lo hemos visto desde el principio del curso 00:18:28
¿Qué es un boleano? ¿Cómo son las arrays? ¿Cómo se declaran? Este tipo de cosas. Importante también, muy importante, este tipo de operaciones, sobre todo en la tutoría que hicimos para resolver esta tarea que no era obligatoria del apartado 0, se habló de, sobre todo en las primeras tutorías que se hizo un poco de repaso, mejor dicho de explicación del lenguaje de programación, 00:18:29
Se habló también de atajos o instrucciones reservadas como esta que tenemos aquí. Esto es muy importante saberlo, ¿vale? Y lo hemos visto en varios momentos, pero sobre todo en esas primeras tutorías. Esto es importante, ¿vale? 00:18:54
Ahora, de todos modos, hablaremos de algunas operaciones que son básicas, que conozcamos, pero este apartado es importante. 00:19:08
Los tipos de variables, qué es un array, así a nivel general cómo se declara, qué es el bucle for, que se ve en las siguientes, también importante. 00:19:16
Los operadores, por supuesto, importantes. Esto es esencial. Así que es importante que sepáis todo lo relacionado con esto. 00:19:26
También los relacionales, ya sabemos que no es lo mismo el igual de asignación de valores a una variable, básicamente guardar dentro de una variable un valor, 00:19:34
Es este igual. No es una ecuación en la que los dos lados son similares, sino que el primero sirve para abrir o, digamos, especificar qué variable es la que va a albergar la operación posterior. 00:19:54
Y vemos que el igual a i cumple un valor esencial, que no es lo mismo que cuando en un condicional ponemos un igual de comparativo o relacional, que es igual que decir número a igual a a, y aquí ya a 2, yo que sé lo que fuera. 00:20:08
Si esta instrucción se da, ¿vale? Tenemos que usar estos relacionales, que en este caso, si lo ponemos así, veis que incluso da error, porque no estamos asignando al número A que valga 2, no, aquí estamos estableciendo una condición, estamos poniendo igual que ponemos mayor o menor, ¿vale? El igual A es este, ¿vale? Eso es importante. 00:20:24
Es decir, son cosas que ya os digo que a medida que se ha ido avanzando el curso y se han ido plantando las tareas, pues se ha entendido que hemos sabido qué es. Los condicionales, los ifs, cómo se declaran, cómo se escribe la sintaxis, el else if, el else, todas estas cosas son importantes. 00:20:45
Por tanto, todo lo que son estos apartados, importantes. Igual que, por ejemplo, estos operadores, que también aquí teníamos algún ejemplo en variables. Este tipo de operadores, también importante saber lo que son. 00:21:06
Vale, aquí se hablan, pues eso, este tema es básico, por tanto, hay que conocerlo, ¿vale? Lo mismo, importante, para dar más de una condición o que solo se dé una u otra, la disyunción también importante, ¿vale? 00:21:24
El comando switch también saber cómo funciona y saber cómo es. 00:21:44
Sobre todo a nivel, bueno, si hubiera que usar un switch, pues eso, que se pueden declarar varias condiciones, etc. 00:21:49
Es verdad que el switch no es la más importante, pero también habría que conocerla, que existe. 00:21:57
Los bucles, los bucles son importantes, se han usado en ocasiones. 00:22:03
Bueno, pues no sé si tenéis duda, lo tenéis claro cómo funcionan los bucles for. 00:22:08
Y entiendo que sí. Además, también en los test, es importante que hagáis los test de los temas. No porque vayan a ser las preguntas, pero bueno, os da a veces, en muchas ocasiones, ideas de qué tipo de preguntas o qué cosas son importantes. 00:22:14
En algunas, por ejemplo, hay algún bucle for, o por ejemplo, incluso en las preguntas que tenéis aquí de tipo test, también se habla de la corrutina, de un bucle for, y ahí podéis también ver que es un ejemplo de que puede caer. 00:22:29
Las funciones, importantísimas, ¿no? ¿Cómo llamar a funciones? Esto también lo hemos visto, que pueden llevar en ocasiones un parámetro, ¿vale? Para pasarlo de una a otra, ¿vale? Y bueno, ¿y cómo se retorna el valor si son variables que no son de tipo void? Es decir, que sí que tienen una tipología que no esté vacío. 00:22:51
Ya hablamos en su momento que las variables de tipo void, como por ejemplo esta, lo que hacen es ejecutar en el momento de ejecución que corresponda lo que tengan en su interior. 00:23:15
Listo. Pero las variables que sí que tienen un valor, lo que tienen que hacer es devolver al final un valor. 00:23:24
De este método tiene que salir un número int, en este caso. Si fuera un string, tendría que devolver un string. 00:23:31
Y para devolverlo en todo momento hay que usar la palabra reservada, return, junto a A, que es lo que tiene que mostrar. 00:23:36
Si no, estas funciones no funcionarán correctamente. Ámbito de las variables, súper importante. Y además os digo que es súper importante porque suele ser uno de esos errores que suelen aparecer, por ejemplo, antes os he dicho que una de las preguntas de desarrollo podría ser recalcar por qué está habiendo un error. 00:23:42
En muchas ocasiones, ya lo habréis comprobado haciendo las tareas, el ámbito de las variables es el origen de estos errores. Por tanto, hay que saber que existen las variables globales, las locales, el encapsulamiento del que se habló, que si se declara una variable dentro de un método y no es pública, no se podrá acceder desde partes del código en el que no ha sido declarado correctamente. 00:24:05
Luego, sobre programación orientada a objetos, pues bueno, que os suene el concepto, pero básicamente lo que más me importa es la aplicación que estamos haciendo de programación orientada a objetos en Unity. 00:24:35
Entonces, como tal, a ver, es importante saber lo que es y que todo se basa en clases, ¿vale? Cuando estamos generando clases, básicamente son referencias a un script que luego, en este caso en Unity, pues se pueden hacer como muchas copias. 00:24:47
Es decir, se puede hacer que esta clase, que al final son componentes, se pueda referenciar desde otro punto. 00:25:04
Y, por ejemplo, cuando antes decíamos en la pregunta de desarrollo que aquí estábamos llamando a un tipo de variable llamado animator, en realidad es una clase. 00:25:12
Estamos haciendo una copia de esa clase que llamaremos anim. 00:25:25
Pero al final es una clase, igual que tenemos aquí QController, Animator es una clase que existe y por eso además comparte el mismo color, de la que nosotros podemos acceder a su código. ¿Cómo? En forma de componentes, ¿vale? 00:25:28
Los componentes son la versión de que estas clases se puedan aplicar en GameObjects del entorno de Unity, pero las clases básicamente son elementos de las que se pueden realizar instancias o copias y de las que se van luego desencadenando otras acciones aludiendo a esos códigos encontrados en las clases. 00:25:41
¿sí? 00:26:04
vale, hasta aquí 00:26:06
¿qué tal? este tema 00:26:08
cero 00:26:09
ejemplo práctico, bueno, pues esto también 00:26:10
es importante 00:26:16
pero sobre todo es 00:26:16
este apartado de programación orientada 00:26:20
a objetos, sobre todo me importa 00:26:22
para que lo entendáis, tipos de variables 00:26:23
esto sí, aunque esté dentro de programación 00:26:25
orientada a objetos, lo mismo, esto se ha visto 00:26:27
ya en más momentos 00:26:30
pues que es una variable pública, que es una privada 00:26:31
y que son las estáticas, que también se ven 00:26:34
en uno de los temas y se empleó 00:26:35
por ejemplo en la unidad 4 00:26:38
cuando teníamos que guardar los valores 00:26:40
del menú 00:26:42
de configuración, pues el nivel de dificultad 00:26:44
o el nombre del jugador 00:26:46
si recordáis, se hacía con una variable de tipo 00:26:48
static, que es una variable 00:26:50
la tipología es estática 00:26:51
¿vale? 00:26:53
pasamos al siguiente tema si no hay 00:26:55
nada que ver 00:26:57
vale, introducción 00:26:59
Bueno, en este tema se empieza a hablar 00:27:02
como ahora seguramente 00:27:08
los que habéis hecho el seguimiento del curso 00:27:09
pues ya estará, espero, bastante 00:27:11
asumido, pero es un poco hablar de 00:27:13
qué es Unity, de su IDE 00:27:15
¡Ojo! Recordad 00:27:17
estos apartados azules 00:27:19
significa que entran, ¿vale? Por tanto 00:27:21
los vídeos que se consideran como base 00:27:23
del temario 00:27:25
estos vídeos también habría que haberlos 00:27:27
visto porque son un poco la explicación 00:27:29
en vídeo de lo que se ve después 00:27:31
en muchos casos, en algunos he subido yo alguno 00:27:34
pero sobre todo son los de Álvaro 00:27:36
por cierto, bueno 00:27:37
otra cosa, vuelvo un punto 00:27:40
un momento para atrás, que se me ha olvidado hablar de esto 00:27:42
pero en el aula virtual 00:27:44
en el apartado de recursos generales 00:27:45
este que tenemos al principio 00:27:48
ya os llevo un aviso, si no me equivoco 00:27:49
pero tenéis una encuesta 00:27:52
de satisfacción 00:27:54
para que rellenéis de manera anónima 00:27:55
lo que consideréis 00:27:57
y nos ayudará a ir mejorando 00:27:59
en próximos cursos 00:28:02
y un compañero ya me ha escrito 00:28:03
no sé quién, es anónimo 00:28:06
no hay problema en ello, pero que hay enlaces 00:28:08
que no funcionan, como algo 00:28:10
llamativo 00:28:12
nunca nadie me ha escrito sobre ello 00:28:13
y más o menos lo he ido comprobando y tal 00:28:16
quizá alguno se haya quedado obsoleto 00:28:18
o alguna referencia 00:28:20
solo por confirmar 00:28:21
¿estáis teniendo ese problema en general? 00:28:24
Sí, a mí también me ha pasado alguna vez 00:28:28
que hay algunos enlaces que no han funcionado 00:28:29
vale, pues en esos 00:28:30
casos, bueno 00:28:33
entiendo que serán los enlaces 00:28:35
de algún saber más, pero en esos 00:28:37
casos, joder, me lo podíais 00:28:39
haber indicado, pero bueno 00:28:41
¿es algo general o algún enlace importante? 00:28:43
no ha sido, yo creo 00:28:49
que ha sido más en otras materias 00:28:50
más que en esta, pero si es verdad que en alguna ha pasado 00:28:52
yo me refiero a este módulo, yo lo que 00:28:54
hagamos, incluso yo en otro 00:28:56
módulo, pues también, evidentemente 00:28:57
hablo de este módulo 00:28:59
No, en este módulo creo que no, pero vamos, el otro sí me ha pasado seguro. 00:29:01
Vale, sí, no, no, claro, la encuesta de satisfacción, es que me da la impresión de que la encuesta de satisfacción 00:29:05
la ha respondido a nivel general de todos los módulos que está impartiendo. 00:29:12
Cada encuesta de satisfacción es propia del módulo, ¿vale? 00:29:17
Y es importante porque si no, no sabemos de cuál estamos hablando. 00:29:20
Vale, no sé el resto si estáis teniendo, lo digo yo por saberlo porque es muy importante. 00:29:25
Si no se están funcionando bien los enlaces. Que no he tenido constancia hasta eso y por lo que veo igual no se refiere a este módulo. ¿El resto ha tenido así problemas? Ya os digo, igual algún módulo de algún saber más. Algunos sí. Vale, si cuando estéis repasando, si no, nada, pero cuando estéis repasando vídeos y tal. Bueno. 00:29:30
vale, cuando estéis repasando 00:29:51
incluso alguien que esté viendo 00:29:53
esta tutoría 00:29:55
si hay algún enlace que no funcione 00:29:57
por favor 00:29:59
decídmelo, ¿vale? para yo revisarlo 00:30:01
porque están revisados, pero es verdad que algunos 00:30:03
están revisados desde noviembre, igual ha cambiado 00:30:05
la URL por algún motivo 00:30:07
en el inglés, pero con 00:30:09
un clasicionario, pero inglés 00:30:11
¿te refieres inglés, el módulo de inglés? 00:30:13
Sí, concretamente 00:30:17
estuve haciendo un... 00:30:20
Perdona, que es que lo acabo de decir. 00:30:21
Me refiero al módulo de BAME. 00:30:24
No, no, aquí no. 00:30:26
Por eso decía yo, bueno, que me ha ocurrido 00:30:28
puntualmente en un módulo. 00:30:30
Sí, sí, yo hablo de los módulos 00:30:32
que imparto yo. 00:30:34
Si no, pues se lo tendréis que decir al profesor 00:30:36
correspondiente. 00:30:38
Bueno, vale. Eso, porfa, 00:30:40
si respondéis a la encuesta, que os 00:30:42
animo mucho al cuestionario, porfa, 00:30:44
hacedlo del módulo 00:30:46
en concreto, en cada 00:30:48
aula virtual tiene su cuestionario 00:30:49
lo digo porque si no es 00:30:52
no sirve para nada, digo que si 00:30:53
aquí me, imaginaos, me empezarais 00:30:55
no solo por vosotros, sino por si alguien ve la tutoría 00:30:57
si me contestáis algo que yo 00:31:00
entiendo que es paradigm, hablando del módulo 00:31:02
de inglés, por poner un ejemplo 00:31:04
pues 00:31:05
lo único que tenemos es 00:31:06
una valoración inexacta, ¿vale? 00:31:09
eso no es lo que buscamos, lo que buscamos es 00:31:11
ver cosas que poder mejorar o 00:31:13
también saber las que hacemos bien, por supuesto, pero bueno 00:31:15
Sobre todo lo que hay que mejorar, que es el ánimo de saber vuestra opinión. Vale, perdonad por este desvío. Tema 1. Pues eso, bueno, la interfaz, instalación del programa, que es el Unity Hub, pues hay que tener una identidad. Bueno, esto es importante, es decir, tenéis que saberlo. 00:31:17
También puede haber alguna pregunta sobre algún apartado de la interfaz, etcétera, o de cómo instalar. Os diría que es importante porque lo es, pero es que entiendo que si habéis seguido un poco el curso, esto lo debería sonar. 00:31:35
Entonces, estas cosas que son los módulos para luego, sobre todo en el último tema, instalar más plataformas, pues es importante saber que existen. 00:31:50
Al crear el proyecto, pues eso, que hay distintos ya plantillas, que hay 2D, hay 3D, que luego esto ya tiene sentido más adelante, pero que existen otros tipos de motores, bueno, más que motores de, sí, como motores de renderizado, que son scriptables, que pueden ser ya, digamos, basados en programación nuestra, más que un entorno cerrado, ¿vale? 00:32:05
que son esta URP y HDRP, luego llegaremos a plantillas generadas. 00:32:31
Es importante la estructura de carpetas. 00:32:36
Cuando creéis un proyecto ya habréis visto una estructura de carpetas que existe, etc. 00:32:39
Las cosas que hay que tener en cuenta vienen aquí detalladas. 00:32:44
La interfaz es importante conocerla. 00:32:49
También saber cómo funcionan. 00:32:51
Esto es importante, esto sí que a lo mejor podría ser una pregunta. 00:32:54
pues las jerarquías 00:32:56
en el 00:32:57
panel jerarquía 00:33:00
cuando movemos un objeto, igual que en los 00:33:02
software de 3D, por ejemplo, pues 00:33:04
los hijos y los nietos 00:33:06
tienen un 00:33:08
sentido, aparte de para almacenar 00:33:10
digamos varios game objects dentro de un 00:33:12
padre, pues para que al mover 00:33:14
hijo 2, por ejemplo, nieto se mueva relativamente a su 00:33:15
padre, esto es importante conocerlo 00:33:18
el panel de escena 00:33:20
cómo navegar, esto es importante 00:33:21
es decir, todo esto, el panel project 00:33:24
dónde están los assets, por supuesto 00:33:26
los componentes, dónde están, cómo se aplican 00:33:28
importante también que los scripts 00:33:30
hasta que no se añaden como un 00:33:32
componente, no están funcionando 00:33:34
en ese GameObject, que es uno de los errores 00:33:36
que sobre todo al principio todos tenemos 00:33:38
cuando hasta que no se adjunta 00:33:40
no funciona, el panel 00:33:41
de juego para que funcione, el panel de consola 00:33:44
importantísimo, ya lo hemos usado 00:33:46
muchas veces para ir comprobando 00:33:48
puntos del código, ver qué resultado 00:33:49
devuelven 00:33:52
entonces, importante 00:33:53
Las primitivas, pues sí. Todo este tema es importante en el sentido de que es tan esencial también, ¿no? Pues que son los tags, que luego se han explicado. 00:33:55
Cuando hayáis visto lo relativo a los NATMES, lo que es importante es que hay ciertos apartados para que sean considerados, por ejemplo, un terreno o ciertas superficies navegables por ese NATMES, pues tienen que estar marcadas con alguno de los puntos de static o directamente marcando como estático ese objeto. 00:34:06
ese objeto, ¿vale? Igual que 00:34:31
cuando en iluminación 00:34:33
estamos usando luces baqueadas 00:34:35
pues también tienen que ser estáticos 00:34:37
pues los componentes 00:34:39
bueno, importante, voy a ir rápido 00:34:41
porque todo es importante, que es un prefab 00:34:43
porque se usa, por ejemplo, ya la 00:34:45
tarea de instanciar 00:34:47
un objeto, pues tenía que usar un prefab 00:34:48
pero, bueno, los usos son muchos, también 00:34:51
como es el icono que lo identifica 00:34:53
operaciones con un prefab 00:34:55
bueno, esto es importante todo 00:34:57
lo que os he dicho, añadir scripts 00:34:58
cómo se crean 00:35:00
la nomenclatura 00:35:02
que tienen que empezar por mayúsculas los scripts 00:35:04
el Pascal case, el camel case 00:35:06
esto estaba en el anterior tema 00:35:09
bueno, pues un poco 00:35:10
todo 00:35:12
espera que está habiendo como una fuga 00:35:14
de gente, vale, me escucháis, ¿verdad? 00:35:16
no hay ningún problema 00:35:18
vale, entiendo que sí 00:35:19
la estructura de 00:35:23
de un script 00:35:24
también, importante 00:35:26
para nota, esto luego se va viendo 00:35:28
los distintos momentos de ejecución, aparte del Start y el Update, que están siempre, 00:35:30
pero el Fixed Update, cuando se habla de aplicación de fuerzas físicas, operaciones de mover un objeto 00:35:37
o de meternos a operar en el Rebody, lo suyo, a menos que lo tengamos justificado, es usar el Fixed Update 00:35:48
Para que sean tiempos, ahora lo veremos en el tema 3, periodo de tiempo estables. Que no dependan de la velocidad de ejecución como el update. El hola mundo, el print o el debug log, que también se puede usar. 00:35:57
que lo tenemos aquí. Y bueno, pues todo. Este para nota no es un para saber más. Este es importante que os suene. Aunque es verdad que luego se ve el uso de las corrutinas que es para abrir otro tiempo de ejecución paralelo. Se ejecutan cada cierto tiempo en paralelo. Eso se ve en el tema 3 también. Sin tener dudas, cuando lleguemos me lo decís. 00:36:12
variables públicas 00:36:33
aparte de saber que es una variable pública 00:36:35
saber cómo afecta que se vea luego 00:36:36
en el editor y que hay 00:36:39
una forma de poder operar o cambiar 00:36:41
los valores de una variable 00:36:43
desde el editor pero 00:36:45
sin hacer la variable pública, sabemos que si 00:36:47
una variable es pública se puede acceder desde otros 00:36:49
puntos fuera de 00:36:51
el encapsulamiento que tenga 00:36:52
pero a veces queremos que una 00:36:54
variable sea privada, como en este caso 00:36:57
que al no poner ámbito 00:36:59
se considera que es private 00:37:00
Pero sí que, aunque no se puede acceder desde otra parte del script, que se salgan de ese ámbito, sí que queremos operar o cambiar el contenido de esa variable desde el editor. Para eso está este serialize fill. 00:37:02
¿De acuerdo? Bueno, importante, las convenciones importantes también, sobre todo, aparte para el examen, porque son las que se usan cuando se trabaja. Si estáis haciendo Instance8, es un método que hemos usado, pues habría que conocer cómo es el funcionamiento, ¿vale? 00:37:18
si os fijáis 00:37:37
esto es 00:37:42
entre comillas por supuesto, igual que todo lo que voy diciendo 00:37:43
ya os digo, puede entrar cualquier cosa 00:37:46
pero por lo general 00:37:48
las preguntas de desarrollo es más de evaluar un script 00:37:50
y decir cómo funciona que de escribirlo 00:37:52
vosotros, entonces ¿qué quiere 00:37:54
decir esto? que sobre todo sabéis 00:37:56
interpretar más que escribirlo 00:37:58
ya se han hecho las tareas donde tenéis que 00:38:00
escribir, sobre todo 00:38:02
ya os digo, a lo mejor en algún momento 00:38:04
Sí que os digo, ponedme un ejemplo de, como ponía antes, ¿qué hace el getKeyDown? Hombre, pues ahí si me vais a poner ejemplos, sí. Pero sobre todo saber que esto es un método y, bueno, pues interpretar. Si os llega un código con estos apartados y estos parámetros, pues saber interpretarlo es lo que me importa. 00:38:05
vale el instancia y pues se vio es un método que se usa bastante por tanto tuvimos la tarea 2 sino 00:38:25
del tema 2 si no me equivoco o si bueno del tema 1 de hecho que que ya se usaba por tanto importante 00:38:32
es vale y herramientas adicionales bueno pues que son los proyectos settings esto es muy importante 00:38:41
también porque se ha usado o por ejemplo si queremos variar las axis hay que aludir a este 00:38:48
input manager para luego meter los nombres del axis por ejemplo de un 00:38:55
button etcétera bueno pues un poco saber qué son cada uno de estos apartados si 00:38:59
es importante o por ejemplo qué time sirve para ajustar esto también lo vimos 00:39:04
en el tema 3 los pasos los steps se llaman los pasos que hay entre entre 00:39:09
entre una ejecución del fix update del método fixate y no que es uno de los 00:39:18
métodos de ejecución de tiempo de ejecución pues ahí es donde podríamos variar ese tiempo vale 00:39:22
igual que la gravedad por ejemplo se pueden cambiar esto sobre todo que sepáis los apartados 00:39:28
que sepáis un poco cómo hacen el quality se ve en el último tema también bueno pues que sepáis 00:39:34
un poco que hace cada apartado luego los siguientes temas ya se ha desarrollado más el 00:39:39
package manager pues también cómo se instalan package esto lo hemos hecho en por ejemplo aquí 00:39:44
Aquí hay dos ejemplos que hemos usado. 00:39:48
El package manager, pues, ¿qué es y cómo funciona un poco? 00:39:51
Vaya. 00:39:55
Y el asset store, pues, igual. 00:39:56
Que sepáis que existe y lo habréis usado en alguna de las 00:39:58
prácticas, pero, bueno, que sepáis que existe. 00:40:01
El asset store, pues, no creo que entre más allá. 00:40:03
¿Vale? 00:40:06
¿Hasta aquí algún problema? 00:40:06
O vamos al tema 2. 00:40:09
Voy así rápido un poco con la cantinela de esto es importante, 00:40:12
esto no, porque no me puedo detener en todo. 00:40:15
Claro, pero eso, que si no me paráis. Vale, bueno, pues saber que existe esta documentación que es vital a lo largo del curso para saber interpretar cómo es la API, cómo es el scripting, cómo desarrollar para Unity. 00:40:18
Saber que es un vector, básico, por supuesto que es básico. 00:40:36
Y es básico a nivel también saber, aparte de cómo se declara, ¿vale? 00:40:39
Y, ojo, saber que siempre que estamos generando una variable de tipo vector 3, 00:40:43
realmente lo que estamos haciendo, al ser un constructor, ¿vale? 00:40:49
Un elemento que tiene más de un valor, ¿vale? 00:40:54
Porque a diferencia de un float que es un 20, o un valor 20.5 o algo así, 00:40:56
aquí son varios valores, ¿no? 00:41:02
Un vector, por definición, si tiene más de una dimensión y por tanto es un vector, tiene varios valores en su interior. 00:41:04
Por eso cuando generamos una de estas variables tipo vector3 o vector2, ponemos esta palabra reservada new, 00:41:11
porque lo que estamos haciendo no es guardar directamente en una variable, sino que estamos generando una estructura 00:41:18
basada en una construcción que ya existe previamente de varios elementos. Por eso hay que poner este new. 00:41:25
¿Vale? Entonces cuando estamos incluso en mitad de un código y hay que poner un vector 3 que no está referenciando una variable que estamos creando, hay que poner este new. ¿Vale? Esto también entiendo que lo hemos visto, pues a ver, la diferencia entre un vector 2 y un vector 3, entiendo que la tenemos clara. ¿Vale? Y bueno, pues aquí veis, por ejemplo, cómo se vería en el editor si le hacemos un serialize, etc. ¿Vale? 00:41:31
O cómo se pueden declarar después o desde el principio ya los valores de ese vector que luego, por supuesto, se pueden ir cambiando. Ahora sí no vemos algún detalle de eso, pero vamos. Lo que ya se vio también creo en su momento. 00:41:55
Bueno, saber también que la rotación se basa en realidad en cuatro dimensiones, ¿vale? Este quaternion y ya vimos también en su momento que había luego en el transform, está basado en tres dimensiones, esto se ve ahora después, en tres dimensiones en lo que se conocen los Euler angles. Ahora lo vemos, ¿vale? Esto es importante también que os suene. 00:42:09
Operaciones con vectores. Va a haber alguna operación, aunque sea basiquilla, con vectores. 00:42:37
¿Vale? Entonces, a ver los resultados. 00:42:41
Va a haber alguna suma, alguna resta, ¿vale? Pero muy básica. 00:42:45
Por eso no se menciona que haya que llevar calculadora ni se van a permitir, ¿vale? 00:42:48
Pero van a ser sumas básicas o restas. En ese sentido no va a haber problemas. 00:42:53
Por ejemplo, no sería extraño, lo tengo aquí preparado, que haya alguna suma de vectores. 00:42:58
Vectores en el sentido, por ejemplo, aquí he declarado dos vectores ya con valores desde el principio, que ojo, esto es lo de siempre. Lo estamos declarando como variable global y aquí todavía no está en un tiempo de ejecución. 00:43:04
Esto se puede también decir vector primero, ¿vale? Pues yo he declarado aquí que valga esto, pero nuevamente, si yo quiero que valga otro valor, tengo que decir, ¿vale? Y lo voy a poner así para que veáis qué pasa, si no, si yo pongo 4, 5, 6, los tres valores, no se guarda. ¿Por qué? Porque cuando aludamos a una variable vector 3, si cambiamos los valores de esa variable hay que poner este new, ¿vale? 00:43:17
Y eso, yo lo he declarado aquí primero y ahora mismo vector primero vale esto y vector segundo vale esto. Entonces, no sería extraño poner algo tipo vector tres suma vectores, ¿vale? Y que os diga que devolvería suma vectores y que fuera vector primero más vector segundo. 00:43:45
¿Vale? Entonces 00:44:10
Básicamente 00:44:13
Yo ahora en el debug log mostrará esto 00:44:16
O preguntará que son los valores 00:44:19
Del vector resultante 00:44:21
O el vector llamado sumaVectores 00:44:23
Así muy rápido 00:44:25
¿Cuánto valdría? ¿Qué me devolvería 00:44:27
La consola? Esto es básicamente 00:44:33
La suma de vectores 00:44:39
O la posición de vectores 00:44:40
Básicamente lo que hacemos siempre que usamos 00:44:43
Un transformTranslate 00:44:45
o un rotate, ¿vale? Estamos sumando 00:44:47
o restando vectores. ¿Cuánto daría? 00:44:49
Sumar los valores de la 00:44:52
X, de la Y, de la Z de cada vector. 00:44:53
Vale, ¿qué vector devolvería 00:44:55
aquí? ¿Suma vectores que es un vector 3? 00:44:57
¿Qué daría en el debug log de la 00:44:59
consola? Pues es que no lo veo bien porque 00:45:01
me pillas en la calle ahora mismo y no veo bien 00:45:03
con el reflejo. Vale, y 00:45:05
pero vamos que básicamente es eso. 00:45:07
Vale, básicamente lo que sumaría 00:45:09
es estos X, 00:45:11
estos Y y estos Z, por tanto 00:45:13
daría 4, 8, 10. 00:45:15
No, ¿vale? Yo si ahora mismo voy y ejecuto, a ver, perdón, que lo tengo aquí. Si ejecuto ese script que lo tengo aquí preparado, bueno, no se está viendo porque igual no lo he guardado o algo. Bueno, lo tengo aquí preparado que quiere funcionar otra vez, ¿vale? Os vuelvo a lo que os digo. 00:45:17
Si generamos un vector 3, aquí por ejemplo, seguramente es porque lo estoy declarando en donde no debo, porque si no, no. Resultado, vectores. Dejo ahí ese vector 3 preparado. 00:45:40
Y yo digo, quiero que el resultado vectores sea igual a vector primero más vector segundo, ¿vale? Y aquí le digo, lo que quiero que me enseñe es el resultado vectores. Y ahora a ver si quiere, porque hasta ahora no ha querido. A ver, vale, bueno, ahora sí va. 00:45:56
Vale, 4, 8, 10. Veis que básicamente es la suma de cada eje. 2 y 2, 4. 4 y 4, 8. Y 5 y 5, 10. Entonces, ese tipo de operaciones pueden surgir. O decir, en vez de sumar, restar. Y ahora, como son iguales, dará 0, 0, 0. 00:46:18
Vamos a ello y veréis que el resultado es 0, 0, 0. Son fluids, por eso pone los puntos, las comas, pero eso sería, ¿vale? Ese tipo de operaciones. 00:46:38
Y lo mismo, importante es también operadores como que si hacemos número A++, ¿vale? Y aquí decimos que queremos ver número A, ¿vale? Pues no. No, no hace falta poner las Fs en los vectores. 00:46:50
Se entiende que son fluids, pero si se ponen directamente sin la F, no hay problema. 00:47:15
Otra cosa, por supuesto, es que quisiéramos que esto sea 2.5, ¿vale? 00:47:20
Hasta que no ponemos la F, este punto no lo considera como un decimal, ¿vale? 00:47:26
Pero veis que el resto no ponemos, nos ponemos el número entero sin la F, 00:47:30
como no tiene decimal, pues ahora mismo, simplemente para que veáis, 00:47:34
la operación sería un resultado... Bueno, vuelvo para atrás. 00:47:39
Si lo sumamos y lo ponemos aquí 2.5f, la sumada hará 4.5, 8 y 10. 00:47:44
4.5, 8 y 10, pero no es obligatorio ponerlo. 00:47:55
La f sobre todo es cuando ponemos los decimales. 00:47:59
Y ojo también que para que los decimales se guarden, aquí pueden ser floats. 00:48:05
He hecho un vector 3, si os fijáis en la definición pone que son 3 floats, lo veis. 00:48:09
Pero no se pueden meter floods dentro de un int. 00:48:14
Es una de las gracias de ese tipo de variable, ¿vale? 00:48:17
Entonces, si yo aquí pongo 2.5f, pues por mucha f que pongamos, 00:48:21
no cabe dentro de ese tipo de variable, ¿vale? 00:48:26
Esto ya lo vimos en su momento. 00:48:28
Entonces, eso. 00:48:30
Nada, estoy como repasando cosas que me importan, 00:48:32
porque son como esencia del módulo, vamos, de la programación. 00:48:34
Y lo mismo, número a, ¿vale? 00:48:41
Si ponemos más más y hacemos esta operación que vemos que no tiene asignada ningún igual para darle ningún valor, simplemente es operador, ¿qué resultado daría? 00:48:43
Si yo ahora lo muestro en la consola. Esto lo he dicho, ya lo vimos. Cuando ponemos este más más al lado de una variable lo que hace es sumarle uno. 00:48:55
Entonces, aquí, si vamos de arriba a abajo, vale 4, aquí le decimos a más 1, ¿vale? Y esto devolvería, como vais a ver, en vez de 4 ya 5, ¿vale? 5. O si hiciéramos este más igual 5, ¿vale? Esto es otro de los métodos abreviados que os he dicho antes. 00:49:12
¿Qué devolvería? Que es igual a, esto es lo mismo que escribir, en este caso, número A, número A, quito el cursor, número A, más 5. 00:49:33
Pero nada, esto, ¿vale? En vez de decir a número A, guárdale lo que ya valga en este momento número A, más 5, ¿vale? 00:49:49
que daría 9, ¿verdad? Se puede escribir de esta forma, ¿vale? Y entonces, número A, ahora el valor que devuelve es un 9, ¿vale? 00:49:57
Importante, todo ese tipo de cosas, recordad revisar esa tutoría si no lo tenéis muy claro, porque este tipo de cosas pasan, es decir, son básicas y es importante, vamos. 00:50:09
Es igual que cuando tenemos un booleano, que sus valores pueden ser true o false, si ponemos que posado pase a valer lo contrario, que es otro de los operadores, de lo que vale, si aquí pongo posado, por ejemplo, empieza siendo un true, pero aquí posado vale lo inverso a lo que valga en este punto. 00:50:19
Entonces posado pasa a valer false, ¿no? ¿Qué es lo que va a devolver? False, ¿no? Lo guardo y lo muestro. Ahí está. Y devuelve un false, ¿vale? Ojo porque si yo aquí pongo otro booleano que se llame salto, yo que sé, cualquier cosa y pongo otro también, ¿vale? 00:50:41
Y aquí le digo que esto sea salto, ojo, fijaos, aquí estoy guardando en posado lo contrario de lo que valga salto, por tanto, valdría false, mira, voy a poner aquí false para que sea diferente, aquí ahora mismo posado pasa a valer lo contrario a lo que valga false en ese punto, ¿no? 00:51:03
Entonces pasaría a valer true, ¿verdad? 00:51:23
¿Vale? Entonces, atención a todo. 00:51:25
Entiendo que esto, ya os digo, que esto pasaría a valer true, 00:51:28
que es lo contrario de lo que vale salto. 00:51:31
¿Vale? Bueno, estas operaciones son como ejemplos de cosas importantes. 00:51:34
Importantes, vamos, en esencia va a haber cosas de este tipo. 00:51:38
También es muy importante, porque se han usado mucho 00:51:42
estas formas simplificadas de escribir vectores 3, ¿vale? 00:51:44
Este 0, el up, right, aquí están todos. 00:51:48
Esto es importante, esto entrará. 00:51:50
los bucles for, bueno, voy a ir así más rápido 00:51:53
si no tenéis dudas, pero bueno, pues cómo se 00:51:57
cambian, cómo se mueven kinemáticamente, es decir, a través 00:52:00
de las coordenadas de posición del transform 00:52:03
los valores, pues aquí tenemos 00:52:06
distintas formas, en la clase 00:52:09
transform, que como veis es un tipo de variable 00:52:13
que es una clase en realidad que es referencia al componente 00:52:15
porque aunque estén todos también es un componente transform, ¿vale? 00:52:18
Y ahí es donde nos podemos dirigir a los distintos valores de transformación del objeto. 00:52:21
Y por eso existe ese transform con mayúscula y ese transform con minúscula. 00:52:27
Transform con mayúscula es la clase que se puede usar de tipo de variable, 00:52:32
que no es igual que este transform, que es como una forma ya simplificada 00:52:35
de aludir a valores de posición también, ¿vale? 00:52:40
Esto también lo vimos, la escala. 00:52:43
Bueno, aquí se habla de esto de los ángulos quaternion, ¿vale? 00:52:48
Su forma también de simplificarlo para, digamos, el método que usamos habitualmente de tres dimensiones, de tres ejes, 00:52:51
pero de manera interna el quaternion, como opera la rotación en Unity, es en un valor de cuatro dimensiones, ¿vale? 00:53:01
Esto sobre todo con hacerlo a nivel teórico, porque los quaternions, al final, bueno, que aquí se pone la explicación, 00:53:08
sirven para no tener problemas de bloqueos de ejes, ¿vale? 00:53:15
De hecho hay algún documental que va sobre problemas en el espacio, en naves espaciales, de que los ejes había que poner un cuarto para que no hubiera ciertos problemas, pero bueno, sobre todo saber cómo funciona la rotación. 00:53:18
Luego que tenemos también estos métodos, aquí más adelante, del translate, del rotate, que sí que funcionan en base a los tres ejes y son más fáciles de usar, de cara a que sea más comprensible para nosotros, que son las cuatro dimensiones que tiene un quaternion. 00:53:33
aquí me he saltado, bueno no, no me he saltado nada 00:53:51
crear movimiento, pues un poco eso 00:53:54
fijaos que ya estamos usando esos operadores 00:53:57
del más más, el menos menos, el más igual, etc 00:54:00
el rotate, el look at, pues estos son métodos importantes 00:54:03
luego estos por ejemplo son muy útiles 00:54:07
pero no son los que se van a usar 00:54:08
es cierto, por ejemplo este vector3.distancia 00:54:11
todos estos son métodos de vector3 o vector2 también 00:54:14
al menos de vector 3 seguro todos 00:54:18
esta distancia se usa 00:54:21
quien haya hecho la parte de la 00:54:24
tarea 6 de inteligencia artificial 00:54:26
pues de distancia 00:54:28
el vector 3 distancia nos permite 00:54:30
calcular la distancia entre un punto y otro 00:54:31
por ejemplo para cuando se va acercando 00:54:33
ese automata, etc. 00:54:36
pero aquí de momento no es 00:54:37
parte evaluable 00:54:40
del ejercicio 00:54:41
luego 00:54:43
sobre el tiempo pues también 00:54:44
importante, saber que existe 00:54:49
el time.time que es 00:54:51
la ejecución del tiempo y se puede cambiar 00:54:52
se puede hacer que el time 00:54:55
pase a hacer 00:54:57
con el timescale 00:54:57
pues 00:55:00
por ejemplo 00:55:01
detener el tiempo, si por ejemplo ponemos 00:55:04
timescale en 0 00:55:07
pues lo que estamos consiguiendo es parar el tiempo 00:55:09
pues por ejemplo eso también es 00:55:11
importante 00:55:13
creo que el ejemplo viene 00:55:13
a continuación, si no me equivoco 00:55:17
Time scale. A ver, a ver, a ver. Perdón. Tiempo. Aquí lo tenemos. Time scale. Ah, bueno, es que de eso hablamos en el tema 4, perdón. Pues eso, los tiempos de ejecución, el delta time, la importancia del delta time también es importante, que es una corrutina. 00:55:19
cómo es esta declaración del enumerator para abrir esa corrutina 00:55:39
el método digamos que abre esa corrutina 00:55:45
todo lo que pongamos en su interior 00:55:48
pues es importante saber cómo se ejecuta 00:55:49
y también es importante saber que los bucles son esenciales 00:55:53
para decir que luego con esta instrucción del gene return 00:55:58
wait for seconds y el número de tiempo que tiene que esperar 00:56:01
pues que el bucle se ejecute en todo momento 00:56:04
En todo momento hay que poner una instrucción para que hacer una corrutina que vaya iterando acciones, como por ejemplo un contador, que vayan apareciendo enemigos cada cierto tiempo si se hace a través de una corrutina. 00:56:07
Hay que poner un bucle que permita que se vaya ejecutando constantemente y lo bueno es que podemos pausarlo, se ejecuta y aquí llega. 00:56:20
Dice, ah, aquí cuando llego a esta línea tengo que esperar un segundo para seguir el for y otra vez, ¿vale? 00:56:28
Entonces los for en las corrutinas son muy importantes. 00:56:34
Bueno, como se declara también esta instrucción de que el tiempo de ejecución de la corrutina se detenga unos momentos. 00:56:38
Bueno, y ya de interactividad, todo lo que es la clase input, ¿vale? 00:56:48
Luego el input system, ya os dije en su momento que no va a entrar como tal, el nuevo método de Unity. 00:56:52
Entonces, la clase input sí es importante, incluidas todas las interacciones, por ejemplo, en la pregunta de prueba, pues aquí se habla de esto, ¿no? Esto es importante, ver cómo se declara el input punto y ya se pueden poner distintas órdenes, cómo funcionan. Esto sí que es importante, el input manager, cómo se controla, etcétera, ¿vale? 00:56:57
Bueno, esto en la tarea del tema 2 se vio, así que creo que no hay dudas. Sigo pasando eso. Lo que es el nuevo input system, este apartado y el siguiente de trasladar el input system a código para el examen no va a entrar. Os lo pongo de hecho en este de anexo no entra y en este os hablo un poco cómo se instala el paquete, etc. No va a entrar tampoco. Nada de lo relacionado con el input system. 00:57:21
Por supuesto, con el input tradicional, con el input manager, sí, ¿vale? Movimiento suavizado, pues también que os suene el move towards, el smooth down, que también para la cámara ya se ha usado en varios momentos del curso, pues sí, es importante saber cómo funciona, ¿vale? 00:57:47
Tema 2. Paso al 3. ¿Dudas hasta aquí o algo que queráis comentar? Venga, voy a ello. Bueno, aquí habla del movimiento, el RigidBody, muy muy importante saber qué es el RigidBody, qué son los colliders, ahora lo veremos, cómo funciona, los parámetros que podemos cambiar dentro del componente RigidBody, pues que es la masa, el drag, que se puede activar y desactivar la gravedad, los constraints, ¿vale? Esto, importante todo, ¿vale? 00:58:05
Y que el RigidBody activa la gravedad, también se puede desactivar si desmarcamos esta casilla de UGravity, pero por defecto genera gravedad, ¿no? Y es a través de la que accedemos a los métodos posteriores, ¿vale? Del AddForce o del AddTorque, por ejemplo. 00:58:37
Lo digo porque, por ejemplo, en esta línea que tenemos aquí, que os ponía, ¿vale? Si no aludimos al RigidBody de ese objeto, este método no va a funcionar, ¿vale? Entonces, digamos que el motor físico se basa todo en el RigidBody y estas operaciones que a veces he visto como confusión, los AdForce, etcétera, se ejecutan en base a que están actuando sobre un RigidBody, ¿vale? Entonces, es una parte importante. 00:58:59
Y luego en información ya lo vimos también que está lo relacionado con las velocidades, etcétera, que son las inercias que tienen esos objetos. 00:59:25
Vale, esta parte es importante. Aquí ya es la primera vez que vemos el GetComponent para coger este RigidBody, como acabo de decir, para poder actuar sobre él. 00:59:34
Pero bueno, este GetComponent luego ya se usará para, como hemos visto, acceder a cualquier tipo de componente aludiendo a la clase que se llama como el componente realmente. 00:59:42
Entonces es poner el nombre de ese componente, asignarlo a una variable y ya pues sí que hay que conectarlo de algún modo. Que a veces también veo que conectáis, aparte de con un GetComponent, ponéis este tipo de variable como pública o como un serialized field y la arrastráis al inspector. 00:59:54
Si hacéis eso ya no es necesario hacer el GetComponent, ¿vale? Estáis duplicando dos veces la captura, digamos, de ese componente, ¿vale? Simplemente para que lo sepáis. Es decir, se puede hacer como hacemos con este GameObject y arrastramos aquí en el inspector, ¿vale? 01:00:11
Vamos, lo voy a hacer aquí rápido. Si yo tengo un RigidBody aquí, un RigidBody que le llamo RB, o como lo llame, RB, y yo le digo que voy a aludir a qué RigidBody es mediante un SerializeField, aquí en el script me va a salir este campo esperando un RigidBody. 01:00:28
Si yo dentro de este objeto tengo un RigidBody, ahora mismo no hay nada que me diga que yo pueda acceder a las opciones de un RigidBody. 01:00:52
Es decir, si yo ahora, por ejemplo, pongo aquí un rb.addForce, el problema que va a haber es que, aunque yo aquí ponga bien lo que me pida, que es un vector3, por ejemplo, 01:01:03
si yo pongo un new vector 3 01:01:16
así a las bravas, ¿vale? como os he dicho 01:01:18
si ponemos los valores 01:01:19
tenemos que poner la palabra new 01:01:21
si yo pongo 1, 1, 1 01:01:23
¿vale? lo va a ir 01:01:25
ejecutando, le va a añadir 01:01:28
una fuerza, pero ¿a quién? 01:01:30
básicamente ahora no estamos diciendo 01:01:32
a qué rigidbody, para eso 01:01:34
habrá que 01:01:36
decirle 01:01:36
que este es el rigidbody 01:01:39
y por tanto hay que arrastrar este script 01:01:41
bueno, no voy a salir de tiempo de ejecución 01:01:43
hay que arrastrar aquí ese objeto 01:01:45
y genera el RigidBody 01:01:47
del objeto que acabamos de arrastrar 01:01:48
y ahora sabe que es este el RigidBody 01:01:51
o si 01:01:52
quitamos este SerializeField 01:01:54
para que se sepa sobre 01:01:57
que RigidBody actúa, hay que hacer 01:01:59
este, de este objeto 01:02:01
cogeme el componente 01:02:03
a ver, igual 01:02:07
getComponent 01:02:09
RigidBody, es el 01:02:11
nombre del componente 01:02:13
que está cogiendo y ahora sí vale pero son dos cosas es diferentes que se pueden sobrepasar lo 01:02:15
bueno de la primera forma vale también por por cosas que he visto en las tareas es que lo bueno 01:02:23
es que yo puedo arrastrando poner el ritmo de si éste también tuviera un ritmo de este objeto puedo 01:02:30
acceder al ritmo de otro objeto esto también lo vimos ya en la historia y ahora está cogiendo 01:02:38
y voy a ir a Directional Light. Entonces 01:02:42
podemos acceder, porque si no, mediante 01:02:44
código, se podría hacer, pero 01:02:46
ya hay que usar, pues, otro tipo 01:02:48
de métodos, ¿no? Como el Find, 01:02:50
¿no? Hay que poner un GameObject 01:02:52
aquí. 01:02:54
Vale, no me voy a extender 01:02:57
mucho, esto lo vimos un día, pero 01:02:58
Find, ¿vale? Y entonces 01:03:00
Find, y aquí le dice, pues, quiero 01:03:02
que sea el objeto que 01:03:04
se llama 01:03:06
Light. No sé, si hubiera un objeto llamado 01:03:07
light de ese objeto 01:03:10
cógeme el 01:03:12
componente 01:03:14
RigidBody 01:03:15
que tenga ese objeto llamado 01:03:19
light, y entonces ahora estoy guardando en este RB 01:03:21
y añadiré las fuerzas 01:03:23
al RigidBody de otro objeto que se llamara 01:03:24
light, que en este momento 01:03:27
no existe 01:03:28
pero si yo lo creara y tuviera un RigidBody 01:03:31
sería ese al que está 01:03:33
aludiendo, ¿vale? 01:03:35
bueno, esto ya 01:03:37
lo vimos en otro momento, pero eso 01:03:39
Todo lo de RigidBody, importante. Los métodos de fuerza y torsión, importante. Es decir, lo paso rápido porque todo es importante. Además se ha usado ya en distintos momentos y es importante. 01:03:41
Luego, para que los objetos choquen unos contra otros, recordad que tienen que tener colliders, es decir, hasta que no ponemos ya sea un box collider, un capsule collider, los diferentes que tenemos luego, que se ven luego, para que se detecten, por mucho rigidbody que tengan, por mucho rigidbody que yo le ponga aquí a un objeto, aunque tenga un plano y... 01:03:54
Y le pongo un RigidBody 01:04:24
¿Vale? 01:04:28
Por defecto tiene un Bosch Collider 01:04:32
Y este un Mesh Collider 01:04:33
Y se van a chocar, ¿vale? 01:04:35
Pero si lo hubiéramos creado de otra forma 01:04:36
O por ejemplo, yo digo, no, los Colliders no existen 01:04:37
Vamos, los borro 01:04:41
¿Vale? 01:04:43
Por mucho que haya gravedad, etcétera 01:04:44
Ten en cuenta que no hay nada que colisione 01:04:46
Importante, ¿vale? 01:04:48
Entonces, eso es importante 01:04:49
Tipos de colisionadores 01:04:51
También saber cómo funcionan 01:04:54
ajustarlos, el mesh collider 01:04:56
esto hubo una tarea que he hablado de esto 01:04:57
bastante, así que no más 01:05:00
no creo que sea importante 01:05:01
importantísimo, la diferencia entre el on collision 01:05:03
aquí pongo el enter 01:05:08
pero con on collision a secas 01:05:09
también, o on trigger, ¿qué diferencia 01:05:12
hay? esto me lo sabríais decir 01:05:14
porque ya os digo que es importante que lo sepáis 01:05:16
¿qué diferencia hay 01:05:18
entre un collision y un on trigger? 01:05:20
on trigger es un disparador 01:05:24
con colisiones que colisionan, que se golpea 01:05:25
contra algo y en la detecta 01:05:28
al chocar, ¿no? 01:05:29
¿y qué diferencia hay? 01:05:31
todos se basan en colliders 01:05:34
¿no? es decir 01:05:36
¿qué diferencia hay de funcionamiento entre uno y otro? 01:05:37
que el on trigger pasa a través 01:05:41
del objeto, ¿no? 01:05:44
sí, es decir 01:05:46
yo voy a borrar el plano 01:05:48
y voy a poner otro cubo para que no sea algo tan 01:05:50
vale, si yo a este 01:05:52
cubo, a ver, le voy a volver a poner el Bosch Collider. Sí, lo que habéis dicho es cierto y es verdad, pero quiero poner un ejemplo para que quede aún más claro. Tengo un colisionador, tal cual lo he puesto, y otro objeto, este cubo que está encima, con RigidBody y colisionador. ¿Qué es lo que va a pasar ahora? Que alguien me lo describa. El de arriba tiene Bosch Collider y RigidBody por defecto, y el de abajo solo el Bosch Collider por defecto. 01:05:54
el de abajo funciona como si fuera una pared 01:06:21
vale 01:06:28
pero descríbeme, yo le doy al play 01:06:30
¿qué va a pasar? 01:06:32
se va a chocar y se va a quedar pegado ahí contra él 01:06:34
no le va a traspasar ni nada 01:06:36
cae y se queda 01:06:38
el de abajo no se cae porque no tiene física, no tiene rigid body 01:06:39
solo tiene detección 01:06:43
y el de arriba sí tiene rigid body 01:06:45
vale, ahora mismo 01:06:46
esta colisión cuando chocan, no se traspasan 01:06:48
al otro 01:06:51
lo que podría desencadenar algo 01:06:52
sería un on collision 01:06:54
porque están colisionando 01:06:56
y no se traspasan pero 01:06:57
podría ejecutarse algo 01:06:59
¿qué diferencia hay con el onTrigger? 01:07:01
¿y por qué se usa? 01:07:04
¿y cómo hacemos para que aquí ocurra 01:07:06
un trigger? 01:07:08
con el onTrigger desencadena otra cosa 01:07:14
que le piras, por ejemplo que pasa 01:07:16
a la siguiente pantalla, por ejemplo que se destruya 01:07:18
cualquier cosa de esas 01:07:20
pero eso es a nivel de código ¿verdad? 01:07:21
¿pero no hay que cambiar alguna configuración 01:07:22
de los objetos para ello? 01:07:25
si, en el inspector no tienes que 01:07:30
lo tienes que cambiarte con el trigger vale si tenemos aquí la opción de is trigger si yo marco 01:07:31
el de abajo is trigger vale vais a ver que lo traspasa vale entonces diréis para qué sirve este 01:07:37
colisionado estos colliders pues cuando se pone que algo es trigger es porque va a ser se usa 01:07:42
mucho para por ejemplo el umbral de una puerta o porque vamos a pasar una área o porque cuando nos 01:07:48
metamos en un sitio con el personaje queremos que haya vale y aquí es importante tener en 01:07:54
cuenta que al final, a ver, escena, lo vuelvo a poner, cualquier Mesh Collider, como habréis 01:08:00
visto, tiene luego estas rayitas verdes que definen hasta dónde llega ese área, que 01:08:08
nosotros podemos cambiar, ¿vale? El área del Collider no tiene que ir con la geometría, 01:08:13
incluso se puede desactivar el Mesh Renderer que no se vea y ahora lo que podemos hacer 01:08:21
es que cuando este cubo traspasa al otro 01:08:25
con el onTrigger 01:08:26
al pasar se ejecute una acción 01:08:29
os acordáis en la tarea 3 01:08:31
por ejemplo, o en la 5 o en varias 01:08:33
que cuando se caía el personaje se podía poner 01:08:34
un objeto, un collider 01:08:36
vacío incluso, solo con el collider 01:08:39
y las áreas para que cuando la pelota 01:08:41
la bola cayera y chocara 01:08:42
con este elemento 01:08:45
la pelota seguirá cayendo 01:08:46
pero al tener el isTrigger marcado 01:08:48
con el onTrigger enter o cualquiera 01:08:50
del stay o el exit 01:08:52
Le decimos, vale, se ha metido en esta caja 01:08:55
Y se desencadena, pues, por ejemplo 01:08:57
Que se reinicie el nivel 01:08:59
Entonces los colliders no solo sirven para que colisionen objetos 01:09:00
Sino también para demarcar áreas 01:09:03
Que sirven, pues, que cuando un objeto 01:09:05
Con un collider, y a veces también 01:09:07
Definiendo un collider que sea de tal 01:09:09
Etiqueta o de tal layer 01:09:11
Al traspasar esa 01:09:12
Barrera, esa área 01:09:15
Tú lo cruzas, pero desencadena 01:09:17
Es una acción, por ejemplo, que se guarde el juego 01:09:19
O que se encienda la luz 01:09:21
Porque has pasado el umbral de una puerta 01:09:22
¿Vale? ¿Entendéis la diferencia, verdad? ¿Vale? Aquí la declaración se ve. Y bueno, esto lo hemos visto. Perfecto. Vamos para adelante. Quien haya hecho, por ejemplo, la tarea 3, yo creo que debería tenerlo muy claro. Esto es importante. ¿Vale? 01:09:24
Sigo, el Raycast para lanzar líneas imaginarias y que detecte cosas 01:09:41
Esto también es importante, saber lo que es 01:09:49
También saber que prácticamente todos los métodos de detección de físicas tienen su variable en 2D 01:09:50
El Raycast, también los colliders, se ve en el tema correspondiente, tienen sus propios colliders tipo 2D 01:09:56
Luego el checkSphere, que también es importante que lo conozcáis, que es una forma de captar colisiones sin usar colliders. 01:10:03
Hay que usar colliders porque para que haya detección ese objeto tiene que tener un collider, que es como acabamos de ver, la zona que delimita lo que es la zona comprobable de colisión. 01:10:18
Pero sin tener que hacer, por ejemplo, otros elementos que han chocado los elementos para que se vea que existe ese collider. Si aludimos a esta, por ejemplo, función de physics checkSphere, podemos ponerlo en un punto y que el objeto busque que colliders hay en ese punto. 01:10:27
Es decir, si yo pongo este cubo cerca del otro, quiero que se vea ahí. Yo cuando estoy aquí, voy a poner que se vea. En el fondo me da un poco igual. 01:10:51
Si yo a este cubo, que no tiene ahora el script, pero se lo voy a poner ahora mismo, si este cubo tiene en el script un, y voy a poner la condición al empezar, if physics check sphere, 01:11:13
Y me pedirá la posición de este objeto, de sí mismo, y de, es decir, transform position, donde estoy yo, y una cantidad de un float que sea el radio de detección. 01:11:33
Si yo, por ejemplo, pongo un radio de 1, de 1 metro, si esta condición sirve para comprobar cosas, que hay algo tocando con algo, si se cumple que hay una esfera, es decir, que hay un objeto, perdonad, que la esfera que hemos creado desde las coordenadas de posición de este objeto colisiona con algún objeto realmente, pues se desencadena algo. 01:11:53
Y en ese caso lo que vamos a hacer es, si eso ocurre, que en debug log ponga captado y lo ponemos como un string. 01:12:16
Anda, que se me están poniendo aquí dobles. 01:12:26
¿Vale? Entonces, si eso lo hacemos así, y aquí. 01:12:29
Vale. Entonces, ah, vale, que aquí falta otro paréntesis. 01:12:37
vale, esto que significa 01:12:43
y lo voy a poner en el update 01:12:45
para que no, a ver 01:12:46
para que lo vaya 01:12:48
mirando en cada momento 01:12:51
update, que se ha borrado 01:12:53
y lo pongo aquí, vale, y aquí hay 01:12:55
una llave que tiene que 01:12:56
sobrar, vale 01:12:59
ya está todo bien, vale 01:13:03
eso, si en cualquier momento 01:13:05
desde la posición del propio cubo 01:13:07
que es el que tiene el script 01:13:09
hay una esfera imaginaria, vale 01:13:10
bueno, hay un momento que al pasar 01:13:13
a detectar el captado. Le voy a quitar el Rigid Body para que no haya problema con eso. Si empezamos 01:13:15
el juego vemos que está cayendo por ahí. Si yo pongo esto lejos y le doy al play que algo está 01:13:24
pasando por ahí. 01:13:41
Cheques, filtros, position. 01:13:45
Del cubo. 01:13:48
Sí. 01:13:52
Tenemos aquí los colliders, etc. 01:13:55
¿Vale? Si tenemos 01:13:57
ese objeto ahí. A ver. 01:14:00
Cero, no, no, no, no. Vale. 01:14:03
Este objeto 01:14:06
tiene. ¿Y por qué 01:14:07
sale captado? Sí, lo detecta. 01:14:08
Sí, detecta. Vale. Voy a poner una 01:14:11
cantidad más pequeña. Cero, punto 01:14:13
Cero, punto F. 01:14:15
transfer position de sí mismo 01:14:15
esto es prueba 01:14:19
a ver, perdonad, que esto me está 01:14:20
diciendo algo que no sé qué es 01:14:25
vale, el captado solo debería 01:14:28
ah, vale, joder 01:14:32
es este error, si es que como tengo 01:14:41
cosas antes, hace este tipo de cosas 01:14:44
vale, transfer position 01:14:46
si tenemos aquí el vector 3 01:14:48
de la posición 01:14:51
que es donde está en todo momento 01:14:52
y ponemos este número 01:14:56
cuando lo detecte que ponga captado 01:14:58
pero lo está captando demasiado cerca 01:15:00
a ver, lo vamos a dejar incluso más 01:15:03
voy a limpiar 01:15:06
captado, pero bueno, ¿cómo que captado? 01:15:11
bueno, claro 01:15:25
es que hay una cosa 01:15:26
Que es que se está captando a sí mismo. Vale, vale, perdonad. Si decimos que si capta algún collider en esa esfera y está captándose a sí mismo, se capta, se capta. Entonces, por ese motivo es por el que hay, a ver, esperad aquí, otro de los factores que es poner una capa, ¿vale? Poner una layer. 01:15:28
Entonces aquí lo que podemos hacer es decir que si está dentro de esa layer, pues lo capte y si no, no. Entonces faltaría un tercer valor que es poner, por ejemplo, la layer 4 o la que sea. 01:15:52
Voy a poner la 8 porque así la genero yo. Si yo a este objeto le digo que tiene que estar en la capa 8, que la voy a generar aquí, y se la pongo a este objeto y es la 8, ahora cuando arranquemos como esta en la que está ahora mismo, no es del tipo 8, cuando yo me vaya acercando y lo pase, vais a ver que en cuanto se crucen o estén ya a 0,1 metros, 01:16:07
lo compruebe, que está ahí 01:16:35
alguien me acercando, acercando, acercando 01:16:38
vais a ver que sale 01:16:40
a ver 01:16:41
espera, porque aquí algo 01:16:44
no se ha guardado 01:16:46
es que ahí 01:16:47
hay una luz, ah bueno, para empezar 01:16:52
claro, es que tiene rigipodi esto 01:16:54
vale, y entonces 01:16:56
con esto, con esta 01:16:58
variable, si tenemos aquí 01:17:00
el isCollider y no es un trigger 01:17:02
vale, cuando 01:17:04
acerquemos esa 01:17:06
a ver, esa 01:17:09
a ese objeto 01:17:11
bueno, me la está cogiendo 01:17:15
pero no sé por qué 01:17:17
debería estar cogiéndose 01:17:18
esta layer que es de tipo 8 01:17:20
tal, ay Dios mío 01:17:23
a ver 01:17:25
ground layer, 0.3 01:17:28
layer más, vale, es que 01:17:31
hay que generar una layer más 01:17:33
esto lo pongo un poco a nivel teórico 01:17:36
pero básicamente capa 01:17:37
y que sea la 8 01:17:40
y aquí ahora sí que si ponemos 01:17:42
capa, ahora sí que 01:17:45
debería funcionar bien 01:17:48
vale, si ahora 01:17:49
movemos esta para abajo 01:17:55
pues no quiere 01:17:56
no quiere 01:18:00
y a lo mejor 01:18:00
no sé por qué no me está funcionando 01:18:07
esto, pero debería estar funcionando otra vez 01:18:11
a ver, un segundín 01:18:13
El problema viene del layer mask, que es complicado de configurar en el sentido de que hay que pasárselo, etc. 01:18:15
Simplemente que sepáis la función que tiene esto, pero tendría que estar funcionando. 01:18:31
Antes funcionaba porque se estaba detectando a sí mismo todo el rato, pero ahora si le decimos que es capa, ahora sí que va a funcionar. 01:18:39
Ahora lo cogemos. Bueno, no sé si guarde el script. Y para empezar esto lo debería borrar porque le estamos dando el valor por, nuevamente, en vez de por él declarando un valor, sino por el serialize field arrastrándoselo. 01:18:47
Bueno, aquí en vez de arrastrándoselo tiene un enumerador de posibles capas. Decimos que tiene que ser de tipo capa y ahora sí que cuando se acerque, pues nada, que no quiere. 01:19:04
La función es esa y debería estar funcionando. 01:19:17
A ver, vale, es que pone nothing, ¿cómo que nothing? 01:19:20
Capa, aquí. 01:19:23
Ahora, a ver, ahora sí. 01:19:26
Salgo, fijaos, lo limpio, lo limpio y me acerco. 01:19:29
Y cuando me acerco y me meto, y está a menos de 0,1 o dentro, ahí sí, captado. 01:19:33
¿Vale? Entonces, aunque sea peliagudo porque hay que hacer un filtrado para que no se detecte a sí mismo, 01:19:39
Tened en cuenta que aquí estoy poniendo la posición del propio objeto, pero podría ser un empty object que está en una posición, de hecho hubiera sido el ejemplo más claro en vez de ponerse a sí mismo para que se detecte, pero si vamos poniendo una posición de referencia y que desde esa posición haga una esfera que si se choca con un elemento que tenga un collider y esté dentro de esta capa, que si no hubiera otra cosa se podría quitar esto, 01:19:45
Es decir, si no queremos que filtre en función de la capa, se puede quitar, pues que haga una operación. Esa es la función del CheckSphere. Luego hay otros que funcionan igual, solo que podemos guardar valores con que está colisionando o cruzando. 01:20:12
Pueden ser triggers también. En estos casos lo que sirve es, por ejemplo, si estamos lanzando, voy a poner un ejemplo violento, una granada que tiene un radio de acción de 10 de radio, la esfera de acción, pues todos los objetos que detecte dentro se pueden guardar en una RAI y, por ejemplo, que le reste vida. 01:20:33
Entonces son otros elementos con formas de esfera, de cubo, de cápsula, que pueden detectar otros objetos para lanzarles un método o que hagan una acción. 01:20:54
Luego sobre los materiales, pues aquí se habla del mes-renderer, de los materiales físicos, es importante, de esto ya hablamos en una de las tutorías también. 01:21:06
Entonces, seguimos. Perdonad que esto luego lo recortaré, gracias por aguantarme el rato, ¿vale? De repensar cómo se hacían algunas cosas, pero básicamente, ¿algún problema de momento? Vale, pues sigo. 01:21:15
Vale, tema 4, sobre interfaces, el concepto de HUD, también importante que lo conozcáis, bueno, pues un poco saber, bueno, aquí habla de los packages, pues de las escenas que también se vio en la tarea 3, pero aquí se habla más de cómo se cargan las escenas, los niveles, el build settings, ¿vale? 01:21:36
Para configurar qué niveles hay en la escena y con este índex ir yendo de uno a otro. 01:21:58
No sé si tenemos dudas de eso. 01:22:03
Importante, esto también, porque es uno de los motivos también de errores que puede haber o de este tipo de cosas. 01:22:05
Recordad que hay métodos, por ejemplo, estos de SimManager, que no se cargan a menos que pongamos su librería, su namespace, ¿vale? 01:22:11
Los namespace, por ejemplo, si queremos en algún momento variar un texto, Eva ha puesto lo que ha querido, texto y aquí text, lo llamo variable, lo pongo así para que quede aún más claro, variable text. 01:22:18
Si yo quiero cambiar un texto de los que se pueden ir generando en un canvas, vamos, si usamos la UI y ponemos aquí texto para poder acceder al método texto y cambiar lo que pone aquí, pues tenemos que crear una variable de tipo texto que alude a la clase texto, como hemos hablado antes, que en realidad es un componente. 01:22:35
¿Veis que da fallo? Porque no existe 01:22:56
el nombre del tipo del espacio, no se encontró 01:22:58
¿Vale? Sí que se encuentra RigidBody 01:23:00
porque estará cargado en uno de estos 01:23:02
métodos, pero este no 01:23:04
Es importante, ¿vale? Esto pasa con 01:23:05
Cinemachine, pasa con Inteligencia Artificial 01:23:08
pasa con UI ahora mismo 01:23:10
que hay que añadir su método 01:23:12
¿Vale? Entonces en los puntos de 01:23:14
en los puntos de 01:23:16
del tema 01:23:18
que se dice, hay que usar esta librería 01:23:20
¿Vale? Pues 01:23:22
saber cuál es, esto saberlo 01:23:24
Veis que ahora ya no da error porque hemos cargado todo lo 01:23:26
relacionado con esa librería. 01:23:29
¿Vale? 01:23:31
Importante. 01:23:32
Eso, cuando veáis puntos que lo pone, 01:23:33
y este es uno de ellos, el Steam Management, 01:23:36
hasta que no lo tenemos, puede dar ese tipo de errores. 01:23:38
Pues esto es importante todo. 01:23:41
Cómo funciona lo que son las cargas de niveles, 01:23:42
que se puede conseguir. 01:23:46
Cógeme, esta instrucción también es importante, 01:23:48
el getActiveSteam y coger el número de index, 01:23:50
que sirve para guardar en una variable, por ejemplo, 01:23:53
un número int, ¿no? 01:23:55
que te diga el índex de la escena en la que estamos en ese momento. 01:23:56
Y a partir de ahí decirle, pues siguiente nivel, pues es la que yo tengo como el índex más uno. 01:23:59
Y luego cargo ese. 01:24:05
O tengo que reiniciar, pues reinicio usando el mismo build index en el que estoy. 01:24:06
¿Vale? 01:24:11
Luego, carga síncrona. Esto es interesante que sepáis que existe. 01:24:13
Para el examen no. Este apartado es ya más avanzado, pero bueno, es importante si habéis hecho pruebas. 01:24:18
Variables estáticas. Importante saber lo que son. 01:24:24
Ya he puesto antes el ejemplo de lo de la unidad 4, pues guardar el nombre del jugador. 01:24:26
Importante también, porque para no hacernos líos, pues por ejemplo, ¿qué significa este icono? 01:24:31
Bueno, todo es importante. 01:24:37
Por cierto, en el tema 3, me suena que me he saltado alguna cosa por ahí. 01:24:41
Espera un segundo. 01:24:45
Algo del invoke. 01:24:47
Vale, hay un método que se llama invoke, que es importante que también lo tengáis en cuenta, 01:24:49
porque es una forma de lanzar un método. 01:24:55
Espera, si no, de hecho estaba aquí, 01:24:59
si no me equivoco en lo del tiempo. 01:25:02
Bueno, pues esto del time delta time era importante 01:25:04
y en las corrutinas este método. 01:25:06
Este también es importante porque sirve para lanzar un método, 01:25:08
cualquiera, se llama en este caso launch projectile, 01:25:11
como se diga, que se ejecute a los dos segundos 01:25:15
y esto sirve mucho para demorar que algo ocurra pasado el tiempo. 01:25:18
Importante este método, que antes no lo he dicho. 01:25:22
Lo tenéis que conocer, ¿vale? Y estábamos en el tema 4, gestionar escenas, sí, ¿vale? Carga síncrona, no entra para el examen, yo no gastaría tiempo. Estas variables sí son importantes, estáticas. Bueno, pues todo lo que es el canvas también es importante que lo conozcáis. 01:25:24
También que es el método SetActive 01:25:47
Que sirve para encender y apagar GameObjects 01:25:49
¿Vale? Esto alguna vez hemos hecho algún ejemplillo 01:25:53
Pues esto, el RenderMode y el CanvasScaler que se desarrollan aquí 01:25:56
Pues a ver qué tipos hay 01:26:01
Importante, ¿para qué sirve? 01:26:03
Pues eso, si se pone encima de todo lo que hay en el juego 01:26:06
Como un overlay, ¿no? Como una superposición 01:26:09
Si ocupa un espacio relativo a la cámara 01:26:11
Pero siempre, como digamos, mirando a la cámara 01:26:15
como un menú o si directamente es un elemento en el juego que es como que se puede posicionar en 01:26:17
cualquier punto del espacio 3d también si tiene el canvas en el que no olvidemos que siempre que 01:26:22
al poner un elemento de texto por ejemplo aquí pues se ha generado el canvas del canvas es lo 01:26:29
que unifica toda la interfaz de una escena entonces también saber si ese canvas tiene 01:26:34
medidas constantes o se puede escalar con la pantalla si se hace más o menos grande vale 01:26:42
importante esto también es la disposición de elementos también es es algo importante vale 01:26:47
pues saber que también se pueden variar el espacio de visualización en la pantalla del juego no para 01:26:55
que ocupe toda esa ventana independientemente de a qué dispositivo o aspecto activa ya tener 01:27:01
la pantalla vale pues aquí podemos irlo definiendo vale más el event system bueno pues que os suene 01:27:09
tampoco es muy importante no es importante para el examen no tanto pero que sepáis que cuando 01:27:18
creamos un canvas también habrá este event system para poder navegar entre elementos y poder dar 01:27:25
opciones del primero que tiene que aparecer seleccionado que sea tal y se arrastra aquí 01:27:30
ese game object y esas opciones que se especifican un poquito más aquí vale pero bueno no es lo que 01:27:34
que más vueltas le daría. Luego, por supuesto, los tipos de, hay más, los tipos de elementos de UI que se pueden generar, ¿vale? Pues de estos, sobre todo, vamos, los que vienen mencionados aquí, los textos, las imágenes, los botones, los sliders, el campo de entrada, todo esto es importante que os suene, ¿vale? Aquí luego ya se habla de otro más como en plan mencionándolos, pues bueno, eso no es tan importante, pero esto sí. 01:27:40
Y luego los PlayerPrefs, que también son importantes para recuperar información entre partidas en un mismo ordenador. Por ejemplo, para guardar un valor y luego guardar un valor con el SetFloat. Y esto además ahora que ya hemos visto el Animator, los SetFloat de Animator funcionan de una forma similar. 01:28:06
podemos guardar bajo, digamos 01:28:28
la etiqueta 01:28:30
GameVolume un valor 01:28:32
para que luego en cualquier momento 01:28:34
en el ordenador se guarda, en el disco duro del ordenador 01:28:36
y en cualquier momento con un GetFloat 01:28:38
recuperar el valor que guardamos en esa clave 01:28:40
¿vale? entonces 01:28:42
esto también es importante que sepáis 01:28:44
cómo se usan y los 01:28:46
métodos que tienen 01:28:48
¿vale? dudas hasta aquí 01:28:49
esto de los PlayerPrefs en una de las tareas 01:28:52
bueno, en la del tema 4 01:28:54
se hablaba de ello 01:28:56
no sé si lo habéis probado 01:28:57
hacer, etcétera, pero básicamente es eso 01:29:01
que permite guardar claves que se pueden 01:29:04
recuperar luego, esto también es importante que 01:29:07
conozcáis cómo funciona 01:29:10
además eso, los métodos son muy parecidos a los del animator 01:29:12
luego el hashkey sirve para comprobar 01:29:16
si existe esa clave, pues me compruebas o haces 01:29:19
lo que tengas que hacer, si no existe esa clave, no se ha guardado en el disco duro 01:29:22
no hay ningún elemento llamado 01:29:25
GameVolume bajo esa clave 01:29:27
pues no, en este caso 01:29:29
condicional no se ejecutaría lo siguiente 01:29:31
o borrar claves que existen pues también 01:29:32
se pondría entre los paréntesis 01:29:35
el nombre de la clave y se borraría 01:29:36
¿vale? paso al siguiente tema 01:29:39
¿dudas que tengáis hasta aquí? 01:29:43
vale, pues sigo 01:29:52
no sé si seguís ahí 01:29:54
una cosa 01:29:55
entonces con lo que estoy viendo vas a 01:29:57
preguntar bastante del tema de scripts que están ahí 01:29:59
que están ejemplos de scripts que están puestos sí sí sí claro es la forma de poner como referencias 01:30:01
sirve a preguntar a estos scripts u otros pero parecidos en el sentido que juegan las mismas las 01:30:09
mismas instrucciones lo que se están explicando entonces aquí es como un ejemplo de de redacción 01:30:16
bueno de confección de un código que incluya en este caso pues es el apartado de los player press 01:30:22
Entonces sí, hombre, lo suyo es que los hubierais ido viendo a medida que se estudia e ir probándolos e ir viendo su uso. Pero sí, vale, sí, resuelta la duda de... no sé qué me la ha dicho, pero resuelta más o menos. 01:30:27
Pero sí, los scripts están puestos 01:30:44
De hecho en el tema 5, aparte de los scripts 01:30:46
Hay como descargables 01:30:48
Que están en azul o están como descargables 01:30:50
Para que probéis escenas 01:30:53
Que tienen cosas de las que se hablan 01:30:54
¿Vale? 01:30:56
Pues sí que sería recomendable 01:30:57
Luego, el panel animation, pues importante 01:30:59
El animator, bueno, se habla 01:31:03
Posteriormente, pero esto es importante 01:31:04
Que lo conozcáis, cómo se configura el animator 01:31:07
El panel de animation 01:31:09
Pues yo qué sé, por ejemplo, para qué sirve este botón rojo 01:31:10
Cómo se crea un evento 01:31:13
sí, esto es que es importante 01:31:14
como es un 01:31:19
un clip de animación 01:31:20
importante también 01:31:22
pues como para que 01:31:24
esa animación se haga 01:31:26
un bucle, pues habría que marcar el loop time 01:31:28
¿vale? pues esa opción por ejemplo 01:31:30
es importante, conocerla 01:31:32
¿vale? es que es importante 01:31:34
luego, como se establece 01:31:36
un método, ¿vale? 01:31:38
que luego se puede insertar 01:31:40
en la línea de tiempo para que cuando se ejecute una animación haya un punto que active un método, incluso pasando un parámetros, ¿vale? 01:31:43
Pues cómo se configuraría, ¿vale? Aquí os pongo un ejemplo, pues si he puesto un evento, ¿vale? Me dará la posibilidad de en ese objeto que tiene ese script, 01:31:51
si tiene un método llamado bote pelota en el que se puede especificar un fotograma, fijaos que yo aquí puedo poner fotograma un valor, ¿vale? 01:32:00
que es el que pasa a través de este argumento, y se puede hacer, por ejemplo, que al ejecutarse esta animación, 01:32:08
pues cuando llegue a este punto ponga, se acaba de ejecutar un evento en el fotograma y aquí porque hemos puesto 60, 01:32:18
pues pondrá 60 en la consola, pero claro, aquí estamos poniendo un ejemplo cualquiera, aquí se podría ejecutar cualquier acción, 01:32:25
cuando llegara a este evento 01:32:32
si yo tengo aquí puesto que es bote pelota 01:32:34
pues se ejecutaría lo que hay ahí dentro 01:32:37
entonces por ejemplo pues se podría 01:32:39
ejecutar el sonido 01:32:40
de bote, entonces lo que habría que 01:32:43
configurar es que cuando llegue a este momento 01:32:45
el método bote pelota 01:32:47
en este caso pues 01:32:49
lanzará un play one shot 01:32:50
un play, vale 01:32:53
del sonido de ese clip 01:32:54
vale, el animator controller 01:32:58
pues es importante, sabe 01:33:02
Cuando es naranja, cómo se hacen las transiciones. Cuando es naranja me refiero a que es el estado por defecto en el que se mete al ejecutarse el juego y cuando esté un elemento con animator, ¿no? También que significa que haya transiciones múltiples, ¿vale? Luego se pueden hacer varias condiciones para las transiciones, ¿vale? Ese tipo de cosas es importante que lo conozcáis. 01:33:04
pues cómo se lanzan las transiciones 01:33:28
saber los tipos de parámetros que puede haber 01:33:30
por ejemplo, una pregunta podría ser 01:33:32
¿de qué tipos pueden ser los parámetros? 01:33:34
pues pueden ser de tipo float, de tipo in 01:33:37
booleanas, triggers, pero 01:33:39
si lo pensáis también, no puede ser 01:33:40
un string, porque esto va 01:33:43
de que ocurra algo 01:33:45
que ejecute esto 01:33:47
entonces, normalmente cuando jugamos 01:33:49
no escribimos un texto para que ejecute una opción 01:33:50
de animación, entonces es la que no viene 01:33:53
por defecto, ¿vale? 01:33:55
Las condiciones, pues bueno, también importante. Y eso, luego, pues por ejemplo, aquí habla nuevamente cómo se puede captar el componente animator para poder acceder a luego todas las acciones de los setTrigger, setBulls, etcétera, que permiten ir de un estado, es decir, de uno de estos nodos de animación, que son animaciones que se han lanzado ahí, ¿vale? 01:33:56
Que se han arrastrado al animator, cómo se va pasando de uno a otro, ¿vale? 01:34:19
Pues estos métodos de setTrigger, setBull, ¿no? 01:34:23
Y luego los getBulls, los getTriggers, etcétera, son importantes, ¿vale? 01:34:26
Aquí, por ejemplo, se habla de algún para saber más, que es importante que conozcáis, 01:34:32
pero que no va a entrar en el examen como el que conozcáis, digo, para, pues, por ejemplo, 01:34:35
las tareas que habéis hecho, algunos habéis recurrido a estos, los getCurrentAnimatorSteedInfo, 01:34:39
que lo que hacen es, pues según el estado en el que estamos, pues estamos en uno concreto, pues podemos dar condiciones, etcétera, y que se ejecuten unos u otros. 01:34:45
Aquí por ejemplo hay un código, que de hecho lo tenéis aquí, que lo podéis descargar, de cómo realizar, a ver que me he ido en este tema, en este tema de cómo incluso ejecutar animaciones que no solo sean aparentes, sino que tengan giros, etc. 01:34:56
Que permita que se mueva el objeto con la propia animación. Con el click de animación tiene una animación guardada, unos keyframes que hacen rotar. Entonces vamos pasando uno a otro y se va moviendo este objeto no por fuerzas ni tampoco por kinemáticas. 01:35:20
Si lo hace por kinemáticas, en el sentido de que estamos en el panel de animación modificando o poniendo keyframes al valor posición del transform o a la rotación, pero no estamos cambiando la posición por código, sino porque la animación se ejecuta y se gira. 01:35:37
Esto es un ejemplo. Por ejemplo, aquí saltar lo que hace es ejecutar un parámetro float que hará que pasemos aquí al turn left o al turn right. 01:35:54
Aquí vamos consiguiendo mover el objeto de otra forma, de una nueva forma que no es ni las cinemáticas que hemos visto hasta este momento ni las físicas. 01:36:06
Luego, el 2D en Unity 01:36:16
¿Vale? Pues, importante 01:36:18
Aquí, por ejemplo, hay muchos 01:36:20
Muchas 01:36:22
Explicaciones de 01:36:24
Bueno, esto es importante 01:36:26
Esto de trabajando en 2D es importante 01:36:27
Saber que 01:36:30
Para trabajar en 2D hay que tener 01:36:31
Esto además lo vimos en la última tutoría 01:36:33
Hay que tener distintos paquetes instalados 01:36:35
Que si alguna vez no salen 01:36:37
¿Vale? Es porque hay que instalar 01:36:39
Paquetes, ¿no? 01:36:41
Por ejemplo, cuando 01:36:43
tenemos aquí los proyectos, al crear un nuevo proyecto, tenemos el de crear 2D o 3D y cada 01:36:45
uno, ya vimos el otro día, tiene unos packages instalados y hay algunos relativos al 2D 01:36:53
específicamente. Hay opciones que no funcionan de 2D si hemos creado el 3D, el Core 3D. Habrá 01:36:58
que instalar los paquetes que faltaban de ahí. El otro día vimos eso que pasaba con 01:37:05
la UI, si no me equivoco, y con el gestor de los sprites, para recortar sprites, etc. 01:37:09
Lo que vamos a ver aquí, en el punto 2.2. 01:37:20
Bueno, pues eso, que hay paquetes, de hecho aquí lo pone, que hay que tener instalados 01:37:24
para que se ejecuten acciones propias del 2D. 01:37:27
Esto también es importante, las físicas en 2D, pues bueno, que también hay métodos 01:37:31
Como el Rigidbody, que son 2D, son subversiones 2D y no son exactamente iguales, ¿vale? 01:37:36
Aquí, por ejemplo, no está el Use Gravity que había en el Rigidbody normal de 3D, ¿vale? 01:37:42
Hay otras opciones similares, pero, bueno, como no son los tres ejes, pues sucede lo mismo. 01:37:48
Los tipos de colliders 2D que hay, bueno, pues también tienen el East Trigger, 01:37:54
pero, por ejemplo, aquí se pueden usar efectores, ¿no? 01:37:59
Que se habla de ello más abajo, ¿vale? 01:38:01
Esto en 3D no existe como tal, pero sí en 2D. 01:38:04
Por ejemplo, en la práctica 5 se usaba el platform effector 2D 01:38:07
para que al subir a una plataforma solo pudiéramos subir por un lado 01:38:11
y cuando subiéramos la plataforma, al caer sobre la plataforma no la volviéramos a cruzar. 01:38:18
Entonces se hace, digamos, traspasable solo por un lado. 01:38:22
Cada una tiene sus funciones. Importante también. 01:38:26
sobre sprites, pues bueno, el vídeo se explica bastante bien 01:38:30
cómo se importan sprites, que hay que decirle que es de tipo 01:38:33
sprite 2D, las opciones 01:38:37
también deberías conocerlas, cómo funciona 01:38:39
el sprite renderer, etcétera, esto es importante 01:38:42
¿vale? para una hoja de sprites poder dividirla 01:38:45
pues hay que ponerlo en modo múltiple, que es el que activa 01:38:49
las funciones de slice y trim 01:38:51
¿vale? pues ese tipo de cosas 01:38:53
importante, de hecho si habéis hecho la práctica 01:38:58
nuevamente lo habréis 01:39:01
hecho, y luego como 01:39:02
hacer una animación basada 01:39:04
en distintos sprites 01:39:07
que bueno 01:39:08
al final cada fotograma se corresponderá 01:39:10
con una imagen de ese sprite 01:39:13
que se haya arrastrado, luego se pueden 01:39:15
extender o 01:39:17
variar la duración moviendo los keyframes 01:39:19
pero al final lo que hará será poner 01:39:21
espacios o que 01:39:23
una imagen de estos sprites 01:39:24
pues dure más o menos, para que una de las poses de ese 2D se mueva más o menos rápido. 01:39:27
No hay que olvidar que este tipo de animaciones 2D son fotogramas, al final, dibujado me refiero. 01:39:33
No es como en 3D que pueda haber interpolaciones intermedias. 01:39:39
Aquí se puede mover la posición del objeto, pero en este caso este personaje está así 01:39:41
hasta que el siguiente fotograma vaya moviéndose, vaya haciendo esa acción. 01:39:48
Otra que está pintada con otra pose, el siguiente. 01:39:52
luego los layers para ir poniendo 01:39:55
la profundidad en la que está cada objeto en 2D 01:40:00
pues también es importante 01:40:03
también las tags y layers que ya se han visto 01:40:04
se ven en otros puntos, aquí se introducen 01:40:07
dirigidas a la posición que tienen 01:40:10
de renderizado en el 2D 01:40:14
y luego aquí este apartado 01:40:15
es una especie de cara que hiciera luego la tarea 01:40:19
es un apartado que va hablando de muchos puntos 01:40:22
como operaciones concretas 01:40:24
crear el efecto para las 01:40:27
como añadir físicas 01:40:28
en el 2D, que aquí es donde se menciona 01:40:30
están los métodos 2D 01:40:32
de Long Collision 01:40:34
y Long Trigger en su versión 2D 01:40:37
para que se detecte, porque tened en cuenta que al final 01:40:38
un plano 2D no tiene por qué 01:40:40
colisionar con otro objeto 01:40:42
como en 3D, porque no 01:40:44
ocupa las tres dimensiones, entonces para que 01:40:46
este personaje al caer choque 01:40:48
con otro objeto, al final 01:40:50
todo se tiene que basar en el punto de vista 01:40:52
en el que estemos viendo el juego 01:40:54
porque al final el límite 01:40:56
evidentemente tendrán un collider 2D 01:40:57
pero puede estar por detrás 01:41:00
en el eje Z 01:41:03
lo que hace que colisionen será 01:41:04
que desde el punto de vista 2D 01:41:06
pues sí que coinciden 01:41:08
cambia un poco 01:41:10
la perspectiva de cómo se generan 01:41:11
las colisiones 01:41:14
como añadir obstáculos, etc. 01:41:15
entonces aquí se van hablando 01:41:18
de ciertas operaciones que es importante 01:41:20
que conozcáis y algunas de hecho 01:41:22
que podíais copiar directamente de la práctica, ¿no? 01:41:23
Y por eso se ponen estos fragmentos de código. 01:41:26
Entonces, bueno, pues un poco esto, aquí se hablan de los tags 01:41:29
como forma de discriminar que si hay una colisión de otro objeto, 01:41:31
si el objeto con el que se está colisionando, ¿vale? 01:41:36
El objeto con el que se está colisionando, el otro objeto, ¿vale? 01:41:39
Es el que va siempre en los argumentos. 01:41:43
Pues cuando ese objeto tiene un tag que se llama plataforma, ¿vale? 01:41:45
Tag, me refiero al tag que tenemos aquí, ¿vale? 01:41:49
De estos que tenemos aquí y podemos ir, perdón, tags son estos, ¿vale? Tags que podemos ir añadiendo más, podemos ir generando más. Bueno, he creado uno muy descriptivo que se llama new tag. Pues si yo, este objeto es contra el que choca el otro que tiene el collider, pues va a hacer una condición primero de, oye, ¿este objeto se llama de este modo? Vamos, no se llama, porque otra de las formas de discriminar es poner name aquí, que es el nombre del game object, ¿vale? 01:41:52
Pero aquí, por ejemplo, vemos que el tag, si es plataforma, pues isGrounded es true. 01:42:18
Si no se llamara así, aunque colisione, esta operación no se va a ejecutar, ¿vale? 01:42:22
Pues aquí hay distintas cosas, miren, el raycast para detectar suelos en 2D, ¿vale? 01:42:27
Pues que en vez de hacer con un onCollision que está un objeto chocando con otro, 01:42:32
también se puede lanzar un rayo hacia abajo en este caso, ¿vale? 01:42:40
Que lo que haga es 01:42:43
Si está chocando, si está devolviendo 01:42:45
Algo, este valor, raycast 01:42:47
Hit, vale, pues que entonces 01:42:49
Y aparte, bueno, en esta condición 01:42:51
Pone que el tag del otro objeto es una 01:42:53
Plataforma, pues en ese caso isGranded 01:42:55
Es true, que ese booleano se puede usar para 01:42:57
Luego otros condicionales de 01:42:59
Pues si es false, porque no detecta 01:43:01
Nada, será que no está en el suelo, entonces si no es false 01:43:03
No puedo saltar, no puedo hacer 01:43:05
No se puede ejecutar la opción de salto 01:43:07
Si no me equivoco 01:43:09
pues aquí tenemos 01:43:11
a ver, un segundín 01:43:13
aquí os dejé 01:43:15
el proyecto 01:43:17
¿vale? nuevamente que os podéis bajar 01:43:19
con la mayoría 01:43:22
si no todas de las 01:43:24
cosas que se van hablando aquí 01:43:25
¿vale? para que lo veáis aplicado y lo veáis 01:43:27
usado ¿vale? 01:43:30
aunque esto esté para saber 01:43:32
más ¿vale? esto es 01:43:34
de apoyo, lo que me importa es que veáis esto 01:43:36
pero realmente es interesante que carguéis 01:43:38
este paquete 01:43:40
vamos, este 01:43:43
sí, es un package, si no me equivoco 01:43:45
no sé si es una secuencia 01:43:47
no, es un zip, bueno, seguramente era 01:43:48
era la 01:43:50
ya se me está yendo un poco 01:43:52
la cabeza de tanto rato hablando, el paquete 01:43:55
el proyecto, ¿vale? 01:43:57
de Unity, como lo que me entreguéis vosotros en las tareas 01:43:58
normalmente, entonces todo esto 01:44:01
también es importante que os suene, ¿vale? 01:44:02
por ejemplo, una pregunta puede ser 01:44:04
que esto se veía 01:44:06
Cuando estamos moviendo un personaje 01:44:08
Por 01:44:11
Fuerzas 01:44:12
¿Vale? 01:44:14
Y le ponemos encima de una plataforma 01:44:16
Que se mueve por kinemáticas 01:44:18
Es decir, por un animation clip 01:44:20
O porque estamos diciendo que vaya izquierda o derecha 01:44:22
En su posición del transform 01:44:23
No se pega una cosa a la otra 01:44:25
¿Vale? Porque como uno se mueve por fuerzas 01:44:28
Y está todo el rato cayendo hacia abajo 01:44:30
Y la plataforma se mueve hacia izquierda o derecha 01:44:32
Como la plataforma no se mueve por fuerzas 01:44:34
paradójicamente el personaje 01:44:37
no se va a mover con la plataforma 01:44:39
entonces hay que hacer este tipo de 01:44:41
truquis para que 01:44:43
truquis, bueno, perdonad 01:44:45
por el coloquialismo, para que 01:44:47
el personaje 01:44:49
al caer sobre una plataforma 01:44:51
se mueva, adquiera la posición 01:44:52
del transform de esa plataforma para que se mueva con ella 01:44:55
pues esto también es importante 01:44:57
de hecho en el enunciado del tema 5 01:44:59
salía más desarrollado para 01:45:01
aplicarlo, cambiar el 01:45:03
tamaño de los colliders, pues por si por ejemplo 01:45:05
la animación de agacharse del personaje, el personaje se agacha, pues verticalmente 01:45:07
ocupa menos espacio. Para que el collider se refleje en ello, pues se tiene que agachar 01:45:12
también. ¿Qué es lo que hacemos? Variar la posición del collider. Por ejemplo, hemos 01:45:16
capturado aquí primero, estamos yendo a un boss collider 2D que está en el objeto como 01:45:21
componente y luego lo podemos variar para que tenga unas nuevas dimensiones. ¿Qué 01:45:26
¿Qué tal? ¿Sigo o alguna duda? Vamos ya al tema 6. Sigo. Si no, seguís ahí conmigo, ¿verdad? Vale. 01:45:34
Tema 6. Por lo de siempre, los vídeos, etcétera, ¿vale? Componente Terrain. Se hablaba de ello, hay vídeos sobre ello. 01:45:50
Voy rápido, ¿vale? Importante saber cómo funcionan los terrenos. Este paquete extra, que si ya usáis nuevas versiones de Unity, 01:45:58
ya viene integrado, pero este paquete 01:46:06
nuevo que, eso, en las versiones 01:46:08
que usamos estaba como preview, pero 01:46:10
que ya está, ya las ha asumido 01:46:12
porque funciona bien y en las nuevas versiones ya la han 01:46:16
integrado, pero en la versión que usábamos 01:46:18
había que activar, también 01:46:20
servía para explicar esto, los paquetes, 01:46:22
la opción de paquetes en preview, ¿vale? que está en 01:46:24
los project settings, ¿vale? 01:46:26
Lo vimos en la última tutoría que un compañero 01:46:28
tenía una duda relacionada, ¿vale? 01:46:30
Pues en el package manager 01:46:33
hay que activar los paquetes que 01:46:34
Están todavía en estado de previews para que luego salgan en el Package Manager y se puedan usar, ¿vale? 01:46:36
Entonces, eso me servía para hablar de esto. 01:46:41
Pues los Terrain Tools, que, bueno, pues se habla más en el siguiente apartado, ¿vale? 01:46:43
Todo esto es de las Terrain Tools. 01:46:48
Importante, ¿vale? 01:46:51
Luego, cómo se hace un Height Map, etcétera, pues no me es muy importante. 01:46:52
Es importante saberlo por si lo queréis importar uno que ya está basado en un mapa 2D, ¿vale? 01:46:57
De escala de grises. 01:47:03
bueno, no es tan importante, pero como se genera 01:47:04
el terreno, las dimensiones, etc 01:47:07
bueno, yo sí que le daría un ojo e intentaría 01:47:09
saberlo, pero bueno 01:47:11
como me ha pasado antes también 01:47:12
al hacerlo del check sphere 01:47:15
para que cargue 01:47:17
esta imagen como un head map 01:47:19
y de esta imagen pasemos a tener 01:47:20
un terreno con este detalle, pues tiene que ser 01:47:23
de un tipo de Photoshop RAW, hay que configurar 01:47:25
por eso lo puse aquí, pero bueno, de cara al examen 01:47:27
es demasiado importante esto 01:47:29
de cómo configurar 01:47:31
el archivo RAW para que lo coja, ¿vale? 01:47:32
Luego, pues 01:47:36
cómo se hace el terreno, todo esto es importante, 01:47:37
se ve en el vídeo de Álvaro bastante bien, 01:47:39
los atajos que se usan 01:47:41
cuando instalamos las Terrain Tools, 01:47:43
ahora vienen por defecto las nuevas versiones, 01:47:45
pero cómo son los atajos 01:47:47
para el modelado de 01:47:49
el esculpido del terreno. 01:47:50
Y estas herramientas, pues cuál es 01:47:53
la que sirve y cómo se llama la que sirve 01:47:55
para subir-bajar terrenos, para dar 01:47:56
una forma de meseta, 01:47:59
para suamizar, para estampar, 01:48:01
Digamos también un mapa de grises, ¿vale? Pues el noise, el bridge, esto es importante que os suene, ¿vale? La erosión, etc. Bueno, están todos explicados y en el vídeo de Álvaro también vienen vistos. 01:48:02
Luego, cómo pintar, ¿vale? Lo mismo, si habéis hecho las dos últimas tareas, pues lo habréis practicado. 01:48:18
En el vídeo de Álvaro viene cómo añadir árboles, que está la posibilidad de añadirles viento, ¿vale? 01:48:25
A ver, perdonad, lo del viento debería estar por aquí. 01:48:34
Ah, sí, aquí. Bueno, con la hierba, ¿vale? La hierba tiene el wind area, o debería estar. Bueno, pues no está. Eso no lo voy a preguntar porque no está. Pero tiene que estar en algún lado. 01:48:38
Supongo que es escupir terreno, añadir árboles 01:48:57
A ver, bueno, sí que tiene que haber algo relacionado con el viento 01:49:02
Pero bueno, tampoco nos preguntaréis sobre el viento 01:49:06
En el vídeo de Álvaro sí se hablaba, pero aquí no está 01:49:09
Vale, entonces, los niveles de detalle también 01:49:13
Ya cuando vamos pintando geometría con más detalle 01:49:16
Pues como por ejemplo esos árboles o cualquier objeto 01:49:19
Está este componente que es el lot group 01:49:21
El grupo de niveles de detalle 01:49:23
que podemos ir definiendo a distintas distancias varias geometrías para ver cómo se ven, ¿no? 01:49:25
Porque aquí en el ejemplo creo que es bastante ilustrativo, aquí se ve que es una esfera, 01:49:30
pero cuando se ve tan pequeñito, con cargar una malla mucho menos pesada, 01:49:34
porque tenga menos geometría, pues parece lo mismo. 01:49:37
Entonces con esto vamos simplificando los modelos. 01:49:41
Vale, ¿cómo importar el personaje? Pues lo mismo. 01:49:45
Esto se ve también en el vídeo de Álvaro y lo hemos ido viendo en la penúltima tarea, la del tema 6. Os dejé un vídeo yo también de cómo configurar, si no me equivoco, en la parte de Mixamo. 01:49:48
y que sean 01:50:18
tridimensionales, vamos, básicamente porque 01:50:20
no es para objetos 2D 01:50:23
ni 1D, entonces 01:50:25
aquí podemos riegar objetos 01:50:27
darle animaciones por defecto, Mixamo la verdad es que está 01:50:29
muy bien y también en este vídeo os comento 01:50:31
cómo 01:50:33
luego configurar para que 01:50:34
las animaciones se interponen 01:50:37
de una manera más correcta 01:50:39
para que hagan lo que buscamos 01:50:40
básicamente, eso, pues saber 01:50:43
el concepto de que es el avatar, que es esta 01:50:45
estructura de huesos que tiene y luego como dentro de un fx en las cuatro secciones que hay de 01:50:47
configuración del fx de lo que hay dentro pues eso lo referido al modelo sobre todo lo del scale 01:50:53
factor bueno esto tampoco es especialmente importante el rig sí que es importante y en 01:51:00
el vídeo habló bastante de cómo hay que configurar en base a sobre todas los a los 01:51:06
Los rigs que nos vienen de Mixamo, que son como los más asequibles porque ya vienen muy configurados, pues cómo se configuran. 01:51:11
Básicamente que sepáis que es una armatura y un avatar, un avatar mejor dicho, que es esta estructura ya vinculado todo, pero bueno, tampoco sería lo que más estudiaría más allá del concepto. 01:51:21
Pero eso, que los personajes tienen que tener un rig. 01:51:33
Luego, en la animación, esto es importante, pues si queremos que una animación de un objeto 3D, pues hay que marcar el loop time para que sea un bucle, ¿vale? Y bueno, esto sí que es más o menos importante. También copiar el avatar de otro objeto, ¿vale? Para ir referenciando a la misma estructura de huesos todas las animaciones, ¿vale? Entonces, en el vídeo os explico, en el de Mixamo, os explico un poco sobre ello. 01:51:36
y los materiales pues también hablo algo en el vídeo 01:52:02
esto pues es un poco la traslación de la panel animator al mundo 3D 01:52:07
en el anterior tema se veía en el 2D, pues en el 3D es importante 01:52:16
y el blend tree que es un método que permite hacer 01:52:20
aquí se habla del 1D, del de una dimensión 01:52:23
que es que puede ir de un valor a otro cruzando varios umbrales 01:52:27
Por ejemplo, aquí si tenemos un joystick que tenemos un axis en positivo que va de 0 a 1, a medida que vayamos subiendo el joystick hacia el 1 puede ir pasando por distintas animaciones. 01:52:31
Empieza parado y a medida que voy subiendo se van interpolando las dos animaciones para que se vayan desencadenando hasta que si le damos al máximo al joystick al 1, por ejemplo, pues ya se pone a correr. 01:52:43
entonces esto nos permite ir combinando en distintas animaciones en distintas digamos 01:52:53
coordenadas si fueran dos dimensiones o en este caso una distintas distintos valores entre uno 01:53:00
y otro vale pues esto también es importante saber que existen los blend trees y cómo se configuran 01:53:06
luego bueno el room motion esto se lo vimos en que si ya en el vídeo se explica en el que yo 01:53:13
dejó, que si 01:53:20
la animación ya tiene una animación 01:53:21
intrínseca, es decir, el personaje ya en la animación 01:53:24
avanza hacia adelante y se desplaza en el espacio 01:53:26
eso nos puede perjudicar 01:53:28
en el sentido de que 01:53:30
normalmente queremos que el personaje 01:53:31
se mueva en base a que 01:53:34
nosotros le demos una fuerza o con el 01:53:36
carácter controller le digamos adelante 01:53:38
pero solo hace la animación 01:53:40
de andar sobre el suelo, no que se desplace 01:53:42
también, eso se le da, pues ya os digo 01:53:44
por código, entonces 01:53:45
si no queremos que esa animación 01:53:47
que trae ya en sí misma 01:53:50
de desplazamiento, la animación que estamos 01:53:52
importando, vale, pues quitamos 01:53:54
esto de la Playroom Root Motion 01:53:56
ya os digo, lo explico más en este vídeo 01:53:57
así que 01:53:59
os remito a él 01:54:00
luego el Character Controller, pues en la tarea se hablaba de ello 01:54:03
vale, os remito 01:54:06
a que leáis un poco la tarea 01:54:08
de cómo se usaba 01:54:09
este tipo de 01:54:10
peculiaridades que tiene el Character Controller 01:54:13
Ya en la tutoría del tema 6 se habló de que el carácter controller sirve sobre todo para añadir elementos como que se puedan subir en terrenos las cuestas, las pendientes, se puedan subir escaleras, algo que si no con las físicas o con el kinemáticos, etc. es muy complicado de conseguir porque no hay acciones. 01:54:16
Entonces, para mover personajes que se van a mover por espacios complicados, simplifica ciertas cosas. Es verdad que tiene embrollos a la hora de configurarlo con estos métodos y que uno sí que, digamos, aunque no sea la gravedad como tal del Rigid Body, no tiene fuerzas físicas, pero el método Simple Move sí que está todo el rato desplazando para abajo. 01:54:36
entonces el simple move 01:54:57
la diferencia 01:54:58
lo pone en algún punto 01:54:59
es que si el personaje no va a saltar 01:55:02
para movernos lateralmente 01:55:05
o en profundidad 01:55:07
simplifica mucho porque 01:55:08
digamos que está todo el momento 01:55:10
llevando al personaje 01:55:12
o al objeto que lo tenga hacia el suelo 01:55:15
hasta algo que lo pare 01:55:16
pero el eje Y 01:55:17
de su movimiento no lo va a considerar 01:55:20
no lo tiene en cuenta 01:55:22
entonces si no va a saltar está perfecto 01:55:23
Pero si queremos que salte y que considere ese eje, sí que tenemos que usar ya el método move. 01:55:26
Básicamente el Character Controller se basa en estos dos métodos para los desplazamientos. 01:55:32
El problema es que cuando usamos move, y como pone aquí, no hay fuerzas físicas que se... 01:55:38
No sé si lo pone ahí, pero bueno, lo pone en algún punto. 01:55:46
Las fuerzas físicas no existen por defecto para el Character Controller. 01:55:48
Y no deberíamos usar un RigidBody para no alterar el comportamiento del CharacterController, ¿vale? Entonces, el move, como pone en los ejemplos de uso, hay que ponerle una gravedad, digamos, artificial mediante código, ¿vale? Entonces, hay que falsear esa gravedad. Entonces, cuando el personaje salta, etc., es un poco más complicado. 01:55:53
bueno, pues eso, que tiene también como un 01:56:15
capsule collider que detecta 01:56:18
los límites de 01:56:21
este personaje que tiene el carácter controller 01:56:22
y como no es un collider 01:56:25
en sí, sino que pertenece al carácter 01:56:27
controller, esta cápsula para que 01:56:29
detecte colisiones hay que usar un método propio 01:56:30
que es este onControllerColliderHit 01:56:32
¿vale? bueno, aquí pone un poco todas 01:56:34
esas cosas, pues a ver 01:56:36
pues la gracia de este 01:56:39
script de carácter 01:56:41
controller, pues eso, que se puede definir pendientes 01:56:43
escaleras, etc. y simplifica mucho algunas opciones 01:56:44
aquí hablo de un poco de esto que he hablado 01:56:48
de movernos o si queremos hacer un salto 01:56:50
etc. ¿vale? bueno, el long control 01:56:54
el collider hill, lo que os he dicho, pues es el método que sirve para 01:56:59
detectar colisiones con otro objeto que sí tenga un collider 01:57:02
¿vale? pero como el nuestro no lo tiene, pues hay que usar este método 01:57:04
¿vale? 01:57:08
¿dudas hasta aquí? 01:57:11
Cinemachine 01:57:12
Para simplificar 01:57:18
El seguimiento de nuestro personaje 01:57:20
O los movimientos de cámara 01:57:22
Sobre todo, está muy bien para 01:57:24
Que la cámara pueda 01:57:26
Seguir al personaje y podamos 01:57:28
Rotar con ella o que 01:57:30
Digamos, hacer distintos 01:57:32
Rigs, distintas posiciones según movamos 01:57:34
Algún parámetro 01:57:36
Por ejemplo, para en un juego 3D 01:57:38
Irnos moviendo con el personaje 01:57:40
Y si hacemos un movimiento vertical 01:57:41
Con el ratón, pues sirva 01:57:44
para subir o bajar la cámara y según 01:57:46
cuanto nos alejemos al subir 01:57:48
pues enfoque hacia la cabeza 01:57:50
al bajar a la espalda 01:57:52
bueno, se pueden hacer muchas configuraciones 01:57:54
en el vídeo de Álvaro, que es el que más 01:57:56
me importa, ya se introduce 01:57:58
aquí os dejé una playlist hablando de 01:57:59
Cinemachine, más avanzada 01:58:02
eso ya para vosotros, no para el examen 01:58:04
pero bueno, pues hay 01:58:06
distintos 01:58:08
distintos tipos 01:58:08
de cámaras, cómo funciona 01:58:12
el Cinemachine Brain 01:58:13
importante saberlo, también saber que tiene 01:58:15
su propia librería onmspace 01:58:18
como os he dicho antes, fijaos 01:58:20
para que cargue sus clases 01:58:21
bueno, pues 01:58:24
un poco que hayáis probado la tarea 01:58:26
cómo funciona esto, los que me la entregaste 01:58:28
y me consta que lo habéis hecho 01:58:30
y bueno, ya tiene 01:58:32
tantas opciones que lo que más me importa es eso 01:58:34
que sepáis un poco la base 01:58:36
entonces, pues bueno, aquí se habla un poco de ello 01:58:38
y cómo alternar 01:58:40
entre cámaras, aquí se pone 01:58:42
juego del setup tics que os he dicho antes para activar o desactivar cámaras también se puede 01:58:44
usar la prioridad vale para ello de cada cámara eso si no me equivoco lo cuento aquí aquí con la 01:58:48
prioridad si por aquí lo tenemos aquí podemos ir cambiando la prioridad para ir cambiando de una 01:58:58
cámara a otra vale pues eso sí es interesante vale y luego el nas mes que es para hacer pequeñas 01:59:04
autómatas que se muevan con inteligencia artificial, bueno, hasta cierto punto, por ciertas superficies, ¿vale? 01:59:12
Pues como se crea el NATMES, pues habrá que darle que tenga cierto valor de static, ese static que os he comentado 01:59:20
antes que hay aquí, ¿vale? Pues de todos los que se pueden activar, aunque si se activan todos, pues todos aparecen 01:59:26
marcados. Hay dos, que son estos dos, que se refieren a que pueda ser una superficie que considere a ese autómata 01:59:32
como navegable vale y aparte otra que sirve para unir distintas superficies y no está si no son 01:59:40
contiguas para que puedan saltar entre unos y otros vale pues eso también se puede configurar 01:59:47
desde el propio panel de navigation que tenemos aquí bueno pues eso hay que ir definiendo el 01:59:51
espacio para que haga las zonas navegables que son estas que aparecen azul si tenemos 01:59:57
of mes pues podemos conseguir que el personaje pueda saltar y perseguirnos incluso entre estas 02:00:02
islas que hay, que no están conectadas 02:00:09
y bueno, cómo se vaquea ese 02:00:12
Nazmesh, bueno, de eso habla Álvaro 02:00:13
el icono del 02:00:15
Nazmesh vaqueado, las áreas 02:00:17
para que caminen y luego los agentes 02:00:19
que se aplican para 02:00:21
a los objetos que nos tienen que perseguir 02:00:22
porque igual que he dicho antes que el carácter 02:00:25
controller no se mueve ni por físicas ni por 02:00:27
kinemáticas, los 02:00:30
los autómatas, los 02:00:33
enemigos, la inteligencia artificial de este Nazmesh 02:00:35
que sean los agentes, que sean un NATMESH agent, que se aplica luego con estos métodos. 02:00:38
Aquí os hablo de nuevas versiones de Unity, que tienen más funcionalidades, 02:00:44
pero básicamente esos personajes se van a mover, y pasa un momento el NATMESH agent, 02:00:49
se van a mover en base a estas funciones. 02:00:57
Es decir, no va a haber físicas, no va a haber nada que mueva el personaje por código 02:00:59
más allá de lo referente 02:01:05
a las funciones del NATMES 02:01:08
¿vale? y por eso en este tipo de 02:01:09
en este componente 02:01:11
pues es donde se configura la velocidad 02:01:13
¿vale? también cuánto 02:01:15
tarda en parar, si acelera muy rápido 02:01:17
o no, ¿vale? incluso 02:01:19
pues eso 02:01:21
y también, bueno, si es muy grande 02:01:22
o no, es decir, que digamos que 02:01:25
lo relativo a cómo se mueven 02:01:27
esos autómatas no se define 02:01:30
por código en plan Translate 02:01:31
ni AdForce ni nada 02:01:33
sino que tienen sus propios parámetros. 02:01:35
Entonces, vuelvo aquí, bueno, pues básicamente lo que hemos hablado, 02:01:41
luego se habla de cómo se vaquea ese espacio para que salga qué zonas son navegables por el personaje, 02:01:47
automata, es decir, el automata cuando se definen cuáles son las pendientes que puede subir 02:01:52
o los peldaños, como pasa con el Character Controller, hasta que no vaqueemos, 02:01:59
no se van a coger todas esas áreas que hemos hecho estáticas 02:02:04
y las incluirá como zonas que ese personaje puede ir. 02:02:07
Por ejemplo, nuestro personaje, nuestro carácter controller, 02:02:10
puede decir que pudiera subir esta pendiente hasta aquí, 02:02:13
pero el enemigo o el autómata de inteligencia artificial 02:02:16
que tengamos aquí y que vaya persiguiendo al personaje, 02:02:20
en este punto ya, si lo hemos configurado para que ese agente 02:02:23
no pueda subir cierta pendiente, pues no podría subir. 02:02:26
Entonces, esto marca las zonas por las que puede navegar 02:02:31
la inteligencia artificial. 02:02:33
Es verdad que en la versión que usamos 02:02:38
todavía había ciertas cosas en desarrollo 02:02:40
y son las que me importan, porque si no es aún más complejo, 02:02:42
pero en nuevas versiones ya se pueden generar 02:02:45
distintos tipos de agentes para que puedan 02:02:49
ir por distintas mallas de navegación, 02:02:51
en distintos NATMES, que es lo que significa 02:02:54
malla de navegación, porque ahora sí que es verdad 02:02:56
que solo se puede generar una por escenario, 02:02:59
A menos que instalemos esos paquetes de los que se hablan aquí, que tienen más funcionalidades, o ya las nuevas versiones de Unity, eso lo pongo por aquí, pues ya tienen más implementadas, pero se basan todas en esto. 02:03:03
Luego, pues eso, al personaje automata hay que añadirle este componente en AddMessage, que es el que configura sus comportamientos. 02:03:16
Y luego, nuevamente, hay una librería que es esta unityengine.ai, que es la que sirve, por ejemplo, para luego poder poner este método importante, setDestination, que sirve para decir automata, desde donde estés y yendo por la malla de navegación que hayas baqueado anteriormente, tienes que ir yendo a esta posición, que se puede ir variando en cada momento, ¿vale? 02:03:25
bueno, pues aquí habla también eso 02:03:48
de las funcionalidades adicionales 02:03:51
que ya hay nuevas versiones o que se pueden instalar 02:03:54
con más paquetes 02:03:55
y luego pues, bueno 02:03:56
lo que es una máquina 02:03:59
de estado finito que básicamente es 02:04:01
hacer mediante código que vayamos poniendo 02:04:03
condicionales para que vaya 02:04:05
de un estado a otro 02:04:07
os lo hablé en una tutoría de que 02:04:08
se puede hacer el estado número 0, el 1 02:04:11
2, 3 con ints, que fuera 02:04:13
el 0 el de reposo, el 1 02:04:15
el de patrulla, el 2 el de atacar 02:04:17
y luego por ejemplo con un switch case 02:04:19
o con condicionales 02:04:21
se puede hacer que vaya 02:04:23
entre un punto y otro 02:04:24
ya se irán generando 02:04:26
esas condiciones según 02:04:29
vayamos poniendo condicionales nosotros 02:04:30
aquí se habla también 02:04:33
esta parte 02:04:35
de cara al examen, pues es importante 02:04:37
que la sepáis, no es lo que más me interesa 02:04:39
era más para la tarea, todo esto del crono de visión 02:04:41
etcétera, pero bueno, se ponen en juego 02:04:43
algunos de las 02:04:45
Algunos métodos interesantes 02:04:46
Pero bueno, no es lo que más atención le daría 02:04:49
Set destinations, a ver qué es 02:04:52
Con lo que se marcan los destinos 02:04:54
Y lo anterior sí, pero bueno 02:04:55
Ya... 02:04:57
Es importante, bueno, sí 02:04:58
¿Puede entrar alguna cosa? Sí 02:05:00
Pero bueno, no es lo que más énfasis le daría 02:05:02
Vale 02:05:05
Tema 7, hasta aquí, ¿qué tal? 02:05:06
¿Alguna duda? 02:05:09
Vale, continuamos 02:05:14
Espero que sigáis ahí 02:05:15
Tema 7. Materiales. Tema de materiales, pues importante. Aquí se habla en este vídeo de lo relacionado con materiales. Pues bueno, el saber más no es importante porque aquí sobre todo para hablar de offset, etc. Bueno, es importante para vosotros, pero no. 02:05:17
Saber qué es un shader, ¿vale? Luego además se hablará del shader graph, pues saber qué es un shader, la diferencia entre shader y material, ¿vale? Shader es básicamente la configuración que permite que luego el material pueda acceder a distintos valores, distintos elementos, ¿vale? 02:05:36
Todo está configurado, digamos, en un código que es este shader y luego el material es la aplicación concreta y cómo configuramos y es lo que arrastramos a la malla, ¿vale? De cada objeto. Bueno, esto es importante. Saber los mapas de los shaders por defecto que tiene Unity, ¿vale? Esto es importante. 02:05:59
El video player, bueno, no le daría muchas vueltas de cara al examen 02:06:20
Sabéis lo que es, pero no le daría muchas vueltas 02:06:29
El skybox sí, que es esa cúpula, esa esfera que rodea al entorno 02:06:31
Y que nos permite, bueno, portar la iluminación, ¿no? 02:06:36
De hecho cuando creamos una nueva escena ya tenemos un skybox aplicado por defecto 02:06:38
Y básicamente eso se viene definido porque por defecto en el panel de lighting 02:06:43
ya hay un skybox por defecto 02:06:50
que se puede cambiar 02:06:52
pues eso es importante 02:06:53
hay shaders específicos 02:06:55
para meter distintos tipos de skybox 02:07:00
vale 02:07:02
sigo 02:07:03
luego, los render pipelines, pues saber que existen 02:07:05
en el último 02:07:08
en la última tarea ya se trabajaba en 02:07:09
URP, saber que aparte del 02:07:12
que hemos trabajado durante todo el curso 02:07:14
que es el basiquillo, el estándar 02:07:16
Este built-in render pipeline existe, por ejemplo, aparte de los que alguien puede programar, porque a medida, a partir de este que está muy cerrado, estándar, estos dos que tenemos aquí tienen esto de RP, de render pipeline, siendo scriptable render pipeline. 02:07:17
De hecho, si os fijáis, cuando generamos una con el Unity Hub, que lo tengo aquí guardado, con el Unity Hub, cuando vamos a generar secuencias de Universal Render Pipeline o el URP, pone esto de Scriptable Render Pipeline. 02:07:35
Eso básicamente lo que indica es que son más abiertos porque se puede hacer scripting de ellos, es decir, se puede cambiar el código de forma más abierta. 02:07:52
Tenemos, así por defecto, el Universal Render Pipeline y el High Definition Render Pipeline. 02:08:06
Este sirve sobre todo para tener más calidad, pero para juegos 2D y móviles de alta calidad es importante. 02:08:13
Si queremos un juego de última generación con los mejores gráficos, este permite optimizar. Tiene una calidad intermedia. Si queremos hacer un juego, por ejemplo, para PlayStation 5 o uno de muchísima calidad, habría que ir a High Definition Render Pipeline de estas opciones. 02:08:18
Es el que más calidad tiene, el que más rendimiento y más opciones gráficas, etcétera, tiene, ¿vale? Uy, más tipos de luces, más tipos de efectos de posprocesado, etcétera, ¿vale? Entonces, si queremos un juego para móvil o un juego 2D basiquete, pues el render, el URP sería lo óptimo para no sobrecargar, ¿vale? Esto es lo de siempre. 02:08:39
Si no necesitamos de más, no hay por qué ir a algo más alto, pero si queremos juegos AAA o juegos con muchas prestaciones gráficas, o en consolas de última generación, etc., el High Definition Render Pipeline. Esto me parece importante que lo sepáis. 02:09:01
Bueno, aquí habla de cómo actualizar el render pipeline, etcétera, de que en la sección de cualidad hay que meterle un render pipeline asset, porque si no, no funciona, que los materiales hay que actualizarlos. 02:09:15
Bueno, esto es la tarea salida. El shader graph también es que sepáis para qué sirve. Es un tema muy denso este, pero que a nivel general sepáis que el shader graph sirve para, mediante estructuras nodales, poder hacer cambios y configuraciones de los materiales, de shaders que luego se traducen en materiales. 02:09:28
Esta es una de las gracias de trabajar en un sistema 02:09:49
Scriptable Render Pipeline 02:09:52
Que permite más funcionalidades 02:09:54
Bueno, descubrí 02:09:56
Bueno, esto que sepáis que es el Shader Graph 02:09:58
Sobre todo, un poco el concepto 02:10:00
Luego ya en la práctica 02:10:03
7 se ha 02:10:04
Hecho cosas, se os ha pedido cosas 02:10:06
De cara al examen, bueno 02:10:08
Es importante, sí, pero no lo que más 02:10:09
Enfasitaría. ¿Qué es el Shader Graph? 02:10:12
Sí, el concepto sí 02:10:14
Ya hay nodos concretos o qué es exponer 02:10:15
Pues lo veo, no va a dar tiempo a tanto. Sobre luces, a ver, aquí no ponía nada, bueno, aquí está la sección de lighting. Pues los tipos de luces, muy importante, saber cuáles son, ¿vale? Eso es importante. 02:10:18
¿Qué son el concepto de las light proofs y reflexion proofs? 02:10:34
Es importante que sepáis qué es el concepto para no tener luces en tiempo real todo el rato 02:10:37
o reflexiones que gastan mucho tiempo. 02:10:45
Se hacen estas sondas que lo que hacen es, en esos puntos que vamos marcando, 02:10:48
ir guardando la información para que directamente el objeto se ilumine a través de ello. 02:10:53
Pero bueno, más allá de saber esto, no enfatizaría, no indagaría mucho más. Los parámetros de las luces, pues bueno, un poco que sepáis qué parámetros tienen, ¿vale? Aquí sobre todo se habla de la luz de spot, que es la que más tiene, pero bueno, saber que tienen color, intensidad, etc. 02:10:58
Luego, lo del skybox, por lo que acabo de decir, importante también saberlo. La iluminación global, bueno, esto ya son cosas para que sepáis vosotros de cara a si trabajáis o para la tarea, ¿no? Me parece muy importante saber que hay un tipo de static para que los objetos lancen emisiones de su propia luz, ¿vale? Y los reflejos, etc. 02:11:15
Bueno, es importante saber cómo generar este line map, sí, que lo explica Álvaro en el vídeo, pero tampoco iría mucho más allá. Los postprocesos también, saber que existen, pero el sistema de volume se ve en la tarea que hemos visto, pues bueno, sí es importante, pero tampoco esencial. 02:11:37
Con las partículas un poco lo mismo, que sepáis que existen, etc. Pero tampoco es lo más importante, más allá del concepto, que existe un visual effect graph. Por lo mismo, que sepáis que existe, pero esto ni hemos indagado, así que no le daría muchas vueltas. 02:11:58
Sobre sonido, esto sí me parece importante 02:12:16
Porque hasta este punto no se ha visto nada 02:12:19
Esto de aquí, saber la configuración 02:12:22
Pues bueno, saber que hay opciones 02:12:25
Que sirven para 02:12:28
Bueno, pues que según el tipo de sonido 02:12:30
Pues pueden afectar a que carguen más o menos rápido 02:12:33
O estén más o menos optimizados 02:12:37
Pues bueno, sí 02:12:38
Tampoco lo veo tan importante 02:12:39
Pero esto sí es importante 02:12:41
El componente AudioSource, el AudioListener 02:12:43
cómo funcionan, qué opciones tienen, esto de que pueda ser 2D o 3D, se ve más en los 02:12:46
siguientes apartados. Y en lo que explica Álvaro, los efectos de sonido, los filtros, 02:12:51
bueno, también que sepáis que existan, esto importante del audio source, pues para que 02:12:57
el sonido pues tenga una espacialidad. Esto es importante, ¿no? Esto sí que yo creo 02:13:03
que es importante, ¿no? Que se puede definir hasta dónde se escucha y cómo a medida que 02:13:11
nos acercamos o alejamos, se va escuchando más o menos o más por uno de los dos canales estéreo más o menos 02:13:14
y nos pide a la izquierda o a la derecha, pues este tipo de cosas es interesante que lo sepáis. 02:13:21
Esto sí es importante, que existen también variables con estas clases, de audio source, etc., 02:13:27
pues habrá que capturarlo para el componente. Bueno, pues esto es importante. 02:13:36
también saber, que no lo he dicho antes 02:13:41
pero está explicado en algún sitio 02:13:43
y lo hemos visto en la tarea, por ejemplo, que hacíamos 02:13:44
instancias de los pivotes en este de la nave 02:13:47
que nos movíamos, el método 02:13:49
destroy, para qué se usa 02:13:51
y cómo se usa, importante, ¿vale? 02:13:53
si no lo he dicho antes 02:13:55
vale, bueno pues eso 02:13:56
los audio clips, la diferencia 02:14:02
de play one shot para poder ejecutar con el mismo 02:14:04
audio source varios sonidos sin que 02:14:06
se interrumpa el anterior, importante 02:14:08
el audio mixer, pues también que 02:14:10
sepáis lo que es, que tiene su propia clase, etc. Eso sí. Bueno, el otro día vimos, lo 02:14:12
expliqué también, cómo exponer algunos de los valores del mixer. Por tanto, podría 02:14:21
ser. Esto no, esto es un saber más. ¿Optimización del juego? Interesante es, pero no creo que 02:14:28
Pregunte nada en el examen concreto, más allá de que pueda haber distintos niveles de calidad, que se veía antes, si no me equivoco, en la sección de materiales. Sobre estadísticas y profiler, no creo que haya nada. 02:14:38
¿Vale? Sobre compilar el juego 02:14:54
Esto sí es importante 02:14:58
¿Vale? Que sepáis las plataformas 02:15:02
Que hay a nivel genérico 02:15:04
Y importante, y esto es 02:15:05
Un poco para el que vea 02:15:08
Para el que vea la 02:15:09
Tutoría, probablemente pregunte 02:15:10
Sobre cómo exportar 02:15:14
Para web, ¿vale? Que es este apartado 02:15:15
Y de hecho es el último examinable 02:15:18
A partir de aquí, no me voy a meter ahora 02:15:19
Porque esto, las Oculus, etc 02:15:21
de realidad virtual, como es complicado que lo pongamos en práctica y no tenemos en casa, 02:15:23
ya os puse al presentar el tema que desde este punto 9 del tema 7 en adelante no entra. 02:15:29
Pero esto de exportar para web sí, y veis este icono de HTML5, que es una de las plataformas 02:15:36
que aparecen aquí. Cuando compilamos el juego hay que definir para qué plataforma se genera. 02:15:45
Y habla de esta, de HTML5, si queremos exportar un juego para una web, para subirlo a una web, en código, etc., tenemos que exportarlo como WebGL. Esto apuntarlo. Se habla aquí de ello, de HTML5, de la plantilla de WebGL, etc., pero puede que caiga algo de eso. 02:15:50
Si queremos hacer una aplicación para un ordenador, pues usaremos este. Para móviles usaremos Android. Y luego ya veis que cada plataforma puede tener su propio tipo de configuración. 02:16:13
Por defecto, cuando los Build Settings, para exportar en una plataforma que sea diferente en este caso a la que tenemos configurada de PC o Mac o Linux, si queremos que sea para web, habrá que cambiar la plataforma. 02:16:28
Y ahora al exportar, al generar esta build, pues se generará para web, ¿vale? Que será de, con unas, no será un ejecutable, sino que será un código para web, ¿vale? Que estará preparado para que pueda ser subida a web, mejor dicho. 02:16:50
Vale, pues eso de la configuración, esto sí que se habla y creo que es importante. Para crear la build hay que poner la plataforma adecuada para dispositivos móviles. 02:17:08
De esto también puede que haya alguna pregunta. Básicamente, aquí habla de que si vamos a exportar para móvil, pues la plataforma que habrá que usar es Android. Pero lo que me importa más de esto, si vamos a sacar para móvil Android, pues la plataforma habría que ponerla en Android. 02:17:25
pero me importa que sepáis para qué sirve 02:17:47
y que es el Device Simulator 02:17:49
que es un paquete también en Preview 02:17:51
que ya lo han puesto en las nuevas 02:17:53
versiones como por defecto para sacar 02:17:55
esta ventana de Simulator 02:17:57
que sirve para poner como un dispositivo 02:17:58
hay muchos presets 02:18:01
un iPhone 13 02:18:02
con las medidas, etcétera, para ver 02:18:05
cómo quedaría el juego y las interfaces 02:18:07
de los canvas, etcétera 02:18:09
en ciertos modelos de móvil 02:18:11
y luego otro 02:18:13
o una aplicación para dispositivos móviles que se instala, ¿vale? Esto es importante, lo podéis probar y es parte del temario. 02:18:15
Una aplicación que se llama Unity Remote, que sirve para poder ejecutar el juego sin hacer una build, sin sacar el ejecutable, 02:18:22
sino simplemente dándola al play, ¿vale? A reproducir, ¿vale? También se puede hacer con un VLAN RAM, ¿vale? 02:18:32
Pero para poder probar el juego, por ejemplo, con entradas táctiles. 02:18:39
Hay otros tipos de inputs, que os dejo por aquí más documentación, ¿vale? 02:18:44
Que se pueden testar, no se pueden testar en un ordenador, no tenemos inputs. 02:18:49
Entonces, para testarlos existen aplicaciones como este Unity Remote, 02:18:52
que además implica que tenemos que conectar por cable USB al ordenador el dispositivo móvil 02:18:56
en el que vamos a testear. 02:19:01
Y hay que ponerlo en modo desarrollador, ¿vale? 02:19:03
Aquí hay más instrucciones de cómo se hace. 02:19:05
Aquí lo tenemos. Os he dejado varios para saber más, porque, bueno, es todo lo suyo es que lo probarais, pero sobre todo que sepáis que existe esta aplicación para hacer estos testeos. 02:19:09
¿Vale? Y ya el último punto, eso, cómo exportar y algunas configuraciones para exportar para web, ¿vale? Para lenguajes HTML5, CSS, pues el build habría que hacerlo con esa plataforma de WebGL que he comentado antes. 02:19:19
y poco más, es decir 02:19:34
mirad también lo de las tareas 02:19:37
los enunciados de las tareas muchas veces 02:19:39
salen más desarrolladas cosas y por supuesto 02:19:41
si habéis hecho las tareas lo tenéis 02:19:44
infinitamente más fácil 02:19:45
para superar el examen 02:19:47
lo de siempre, no son obligatorias 02:19:49
en el sentido de que podéis superar el curso aprobando solo el examen 02:19:51
pero eso no significa 02:19:54
que no sean también la aplicación 02:19:55
práctica de lo que estamos viendo aquí 02:19:57
y es importante hacerlo 02:19:59
al menos, más o menos 02:20:00
echarle un ojo y saber cómo se resolvería 02:20:03
ya os digo, os lo dije desde el primer día 02:20:05
es un módulo 02:20:07
complejo y práctico 02:20:09
y bueno, lo suyo es que se hubiera hecho un seguimiento 02:20:11
desde el primer día 02:20:13
llegados a este punto, pues cada uno 02:20:14
lo que pueda hacer, pues bienvenida será 02:20:16
por supuesto, os animo mucho a que 02:20:19
os presentéis, claro 02:20:21
nada 02:20:22
¿alguna duda? ¿algo que queráis que 02:20:24
veamos? 02:20:27
lo último es lo más complicado, lo último que se ha dado 02:20:31
así un poco más deprisa, pero bueno 02:20:33
los últimos dos temas 02:20:35
es que ya, bueno 02:20:36
el tiempo es el que es y al final 02:20:38
pero 02:20:40
eso, los últimos 02:20:41
algo habrá de los últimos temas 02:20:44
no va a ser lo más prioritario, no voy a decir que no os pregunte 02:20:46
no estoy diciendo eso 02:20:49
pero bueno, los dos últimos temas 02:20:50
son los que menos peso le daría 02:20:53
va a haber preguntas de esos temas pero 02:20:54
bueno, pues 02:20:56
quizás son más 02:20:58
son menos de aplicación práctica 02:21:00
de que entiendo que no habéis trasteado tanto con ello. 02:21:02
Entonces, bueno, en ese sentido, pues entiendo que lo estoy intentando hacer 02:21:05
para que sea así, ¿vale? 02:21:09
Que no significa que lo que hemos visto ahora no sea materia de examen, ¿vale? 02:21:11
Que es prácticamente todo, ¿no? 02:21:15
Como os voy a ir diciendo, esto es importante, esto es tal. 02:21:16
Pero eso, para optimizar, eso es lo que os diría. 02:21:19
Que estos temas os quedéis más por... 02:21:24
Bueno, es que no quiero deciros más. 02:21:27
creo que ya os he dirigido 02:21:29
un poco la mirada 02:21:32
pues nada más, muchas gracias 02:21:32
si no hay más dudas 02:21:35
y ánimo con ello 02:21:37
muchas gracias, un saludo 02:21:38
hasta luego, gracias 02:21:42
Subido por:
Daniel M.
Licencia:
Todos los derechos reservados
Visualizaciones:
39
Fecha:
18 de mayo de 2024 - 2:53
Visibilidad:
Clave
Centro:
IES CIFP a Distancia Ignacio Ellacuría
Duración:
2h′ 21′ 53″
Relación de aspecto:
1.78:1
Resolución:
1920x1080 píxeles
Tamaño:
919.39 MBytes

Del mismo autor…

Ver más del mismo autor


EducaMadrid, Plataforma Educativa de la Comunidad de Madrid

Plataforma Educativa EducaMadrid