Tutoría 13 - DEIM - Examen Ev. Ordinaria - Curso 23·24 - 17 Mayo - Contenido educativo
Ajuste de pantallaEl ajuste de pantalla se aprecia al ver el vídeo en pantalla completa. Elige la presentación que más te guste:
Grabación de tutoría de DEIM
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
sí
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
Si
00:44:15
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
F.
01:14:15
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
si
01:32:56
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