1 00:00:01,710 --> 00:00:07,490 Pues lo he dicho, bienvenidos a la tutoría número 7, si no me equivoco, sí, de Deim. 2 00:00:08,750 --> 00:00:11,849 A ver, que esté bien grabando bien esto... Vale. 3 00:00:12,710 --> 00:00:15,130 ¿Me oís? ¿Me habéis dicho? Ahí está. 4 00:00:16,269 --> 00:00:22,710 Vale, bueno, pues nada, ya hay feedback y corrección de las tareas, 5 00:00:23,309 --> 00:00:26,550 quien la entregaréis la 0 y la 2, quien la entregaréis en plazo. 6 00:00:26,550 --> 00:00:49,990 Creo que más o menos ya os habéis golpeado todos con una tarea ya que incluye interacciones. Bueno, en general veo que están resueltas bastante bien. Las tareas son lo de siempre. Cada uno tenéis un bagaje previo y unos conocimientos previos. Algunos incluso ya veníais sabiendo programar. 7 00:00:49,990 --> 00:00:52,630 aquellos que percibo 8 00:00:52,630 --> 00:00:54,509 que es vuestra primera vez 9 00:00:54,509 --> 00:00:55,770 que os enfrentáis a esto 10 00:00:55,770 --> 00:00:58,929 que sepáis que es un proceso 11 00:00:58,929 --> 00:01:00,909 lento 12 00:01:00,909 --> 00:01:02,170 como aprender un idioma que 13 00:01:02,170 --> 00:01:04,030 lleva un tiempo 14 00:01:04,030 --> 00:01:05,969 y ponerlo en práctica 15 00:01:05,969 --> 00:01:07,290 así que 16 00:01:07,290 --> 00:01:10,750 simplemente deciros que intentéis 17 00:01:10,750 --> 00:01:12,489 a todos en general 18 00:01:12,489 --> 00:01:14,650 intentéis ceñiros al máximo 19 00:01:14,650 --> 00:01:15,170 posible 20 00:01:15,170 --> 00:01:18,969 al enunciado 21 00:01:18,969 --> 00:01:23,609 en sí lo que se pide en los enunciados de las tareas. Más que nada porque si empezáis a trastear 22 00:01:23,609 --> 00:01:31,670 con otras facetas, otros aspectos y otras herramientas, perdemos un poco el sentido de curso 23 00:01:31,670 --> 00:01:38,090 en conjunto para intentar avanzar todos hacia un mismo destino. Más que nada por eso, 24 00:01:38,329 --> 00:01:43,209 que como hay distintos bagajes, hay compañeros que entregan tareas mucho más avanzadas, 25 00:01:43,209 --> 00:01:52,450 que por mí genial, y de hecho para vuestras Reels y CVs y currículos, ahora que muchos de vosotros estáis en condiciones para empezar prácticas 26 00:01:52,450 --> 00:01:59,549 y que las empresas sin CV y sin Reel de nuestro sector no suelen coger a nadie, entre paréntesis, 27 00:01:59,969 --> 00:02:06,189 ir preparando estos materiales para cuando os lo pida mi compañero Juan José, porque si no, no va a ser posible encontrar prácticas. 28 00:02:06,189 --> 00:02:09,250 bueno, pues 29 00:02:09,250 --> 00:02:11,590 podéis usar estos videojuegos como base 30 00:02:11,590 --> 00:02:13,150 para luego avanzar más allá 31 00:02:13,150 --> 00:02:15,449 pero el objetivo didáctico, que es el que yo busco 32 00:02:15,449 --> 00:02:17,569 en estas tareas, es el que quiero 33 00:02:17,569 --> 00:02:19,110 que se cubra, no mucho más allá 34 00:02:19,110 --> 00:02:21,069 si queréis cubrirlo más, vale 35 00:02:21,069 --> 00:02:22,810 no hay problema, pero bueno 36 00:02:22,810 --> 00:02:25,330 que en cierto modo hay que poner unos límites 37 00:02:25,330 --> 00:02:27,289 porque si no, cada uno hacéis unas tareas 38 00:02:27,289 --> 00:02:28,229 y vais por un lado 39 00:02:28,229 --> 00:02:31,469 vale, lo dicho 40 00:02:31,469 --> 00:02:33,530 bueno, lo de la RIL y el currículum 41 00:02:33,530 --> 00:02:34,949 ya que ha salido, pues eso 42 00:02:34,949 --> 00:02:36,909 Incido, ya os hablaré de esto 43 00:02:36,909 --> 00:02:39,030 La semana que viene, aunque no venga ahora el caso 44 00:02:39,030 --> 00:02:41,330 Habrá una reunión para los que estéis 45 00:02:41,330 --> 00:02:43,729 En posibilidad de realizar el proyecto final 46 00:02:43,729 --> 00:02:45,569 Y hablaremos más de esto 47 00:02:45,569 --> 00:02:46,469 Me escriben 48 00:02:46,469 --> 00:02:48,090 Daniel, tengo una dudilla 49 00:02:48,090 --> 00:02:50,150 Cuando me pongo a escribir código con Visual Studio 50 00:02:50,150 --> 00:02:51,629 El PC se me reinicia 51 00:02:51,629 --> 00:02:55,210 No me pasa cuando juego a juegos que exigen bastante gráfica 52 00:02:55,210 --> 00:02:56,889 Pero con Unity Visual Studio sí he intentado 53 00:02:56,889 --> 00:02:58,530 Buscar la solución, pero no doy con la tecla 54 00:02:58,530 --> 00:03:04,150 Pues es algo que la verdad es que no lo sé 55 00:03:04,150 --> 00:03:14,289 Y es algo que es de tu ordenador, porque no es normal que se te reinicie el ordenador al abrir ninguno de los dos softwares. 56 00:03:16,469 --> 00:03:19,969 Si eso es algo que un informático te lo va a poder mirar, yo no lo sé. 57 00:03:20,069 --> 00:03:27,849 Lo único que te podría decir para que igual hay algún problema de instalación o algo que crea conflicto, quizá que vuelvas a instalar todo. 58 00:03:27,849 --> 00:03:44,990 Es decir, que elimines tanto Unity Hub como el editor y Visual Studio y lo reinstales. A ver si es que en el proceso de instalación algo pasó, porque ya te digo que desde luego no es el comportamiento habitual en el software. 59 00:03:44,990 --> 00:03:53,530 Ah, bueno, perdona que no te pueda decir más, pero es que sinceramente no lo sé, no sé por qué puede ser 60 00:03:53,530 --> 00:04:00,469 Hay algo que está haciendo que en el arranque cortocircuite, por eso así lo primero que me viene es eso 61 00:04:00,469 --> 00:04:07,030 Un error en la instalación, que aunque parezca que sí, hay algo que no esté funcionando correctamente 62 00:04:07,030 --> 00:04:13,409 Voy a compartir pantalla, y así me confirmáis también que lo veis, dame un segundillo 63 00:04:13,409 --> 00:04:14,969 compartir. 64 00:04:15,750 --> 00:04:16,529 ¿Veis la pantalla, verdad? 65 00:04:21,769 --> 00:04:23,889 También, viendo que hay dudas 66 00:04:23,889 --> 00:04:25,529 que sobrepasan lo tratado 67 00:04:25,529 --> 00:04:27,490 en ocasiones, o que quieren 68 00:04:27,490 --> 00:04:28,550 ir más allá de 69 00:04:28,550 --> 00:04:31,550 las tareas y los 70 00:04:31,550 --> 00:04:33,569 contenidos, he abierto otro foro 71 00:04:33,569 --> 00:04:35,490 también para que lo uséis vosotros, 72 00:04:35,750 --> 00:04:37,089 entre vosotros, y sea un 73 00:04:37,089 --> 00:04:39,370 lugar donde centralizar estas 74 00:04:39,370 --> 00:04:41,509 labores que, digamos, sobrepasan 75 00:04:41,509 --> 00:04:43,050 los contenidos, porque 76 00:04:43,050 --> 00:04:45,009 los foros de cada unidad 77 00:04:45,009 --> 00:04:51,550 Mi propósito y creo que lo óptimo es que se ocupen de hablar sobre los contenidos o la tarea de esa unidad 78 00:04:51,550 --> 00:04:56,250 Pero es verdad que en ocasiones, y sobre todo alumnos que vayáis más avanzados 79 00:04:56,250 --> 00:05:00,389 Podéis tener inquietudes de conocer más 80 00:05:00,389 --> 00:05:05,529 Entonces he creado este foro de cafetería para que lo podáis usar 81 00:05:05,529 --> 00:05:08,170 Yo ahí tendré un papel en ocasiones más testimonial 82 00:05:08,170 --> 00:05:11,430 Me voy a centrar en lo que es el curso y lo que hay que dar en este curso 83 00:05:11,430 --> 00:05:18,290 pero que eso no frene de que podáis ir avanzando o ir proponiendo cosas o ir hablando de cosas, ¿vale? 84 00:05:18,290 --> 00:05:21,509 Por mí ningún problema y por eso he generado ese espacio, ¿vale? 85 00:05:22,810 --> 00:05:32,389 Vale, aparte de eso, sobre mi idea hoy, mi propósito es hablar sobre la tarea de la unidad 3. 86 00:05:32,750 --> 00:05:40,029 Ya más o menos hemos estado viendo en varias tutorías el comportamiento de estos inputs, de los axes, 87 00:05:40,029 --> 00:05:44,230 bueno, ya los métodos de movimiento mediante el transform, ¿vale? 88 00:05:44,889 --> 00:05:53,149 Entonces, bueno, hoy vamos a empezar a hablar o vamos a enfocar más en lo relativo al motor de físicas 89 00:05:53,149 --> 00:06:01,149 y, bueno, pues ya importar alguna geometría, digamos, con más detalles relacionados, por ejemplo, 90 00:06:01,209 --> 00:06:06,930 con los colliders para que haya colisiones y se encuentren los objetos entre sí a nivel físico, etcétera, ¿vale? 91 00:06:06,930 --> 00:06:09,870 no sé, lo de siempre 92 00:06:09,870 --> 00:06:11,430 quiero que quede claro, estas tutorías 93 00:06:11,430 --> 00:06:13,870 las doy en formato clase un poco 94 00:06:13,870 --> 00:06:15,569 para, pues para 95 00:06:15,569 --> 00:06:17,730 ahondar, pero lo suyo es que vosotros 96 00:06:17,730 --> 00:06:19,889 me planteéis las dudas de los contenidos y las tareas 97 00:06:19,889 --> 00:06:21,870 por eso, la primera cuestión 98 00:06:21,870 --> 00:06:23,829 que os hago es, ¿cómo vais con 99 00:06:23,829 --> 00:06:25,389 los contenidos de esta unidad 3? 100 00:06:25,550 --> 00:06:27,370 y sobre todo, bueno, sobre todo no, pero 101 00:06:27,370 --> 00:06:29,730 como aplicación práctica, ¿qué tal también con 102 00:06:29,730 --> 00:06:31,709 la tarea de esa unidad 3? 103 00:06:32,490 --> 00:06:33,990 ¿Cómo la lleváis? ¿Habéis empezado? 104 00:06:34,209 --> 00:06:35,709 ¿Por ver problemas que os estéis 105 00:06:35,709 --> 00:06:38,290 encontrando así de primeras 106 00:06:38,290 --> 00:06:41,620 vale 107 00:06:41,620 --> 00:06:44,180 temario acabado, la tarea 108 00:06:44,180 --> 00:06:46,279 la quiero empezar, la tarea me ha abrumado 109 00:06:46,279 --> 00:06:48,139 un poquillo, estoy con la tarea 3 110 00:06:48,139 --> 00:06:49,899 vale, ahí dame un segundo que 111 00:06:49,899 --> 00:06:52,519 vale, me dicen incluso 112 00:06:52,519 --> 00:06:54,519 que me he puesto con ella pero de manera accidental 113 00:06:54,519 --> 00:06:55,579 creé una metralleta 114 00:06:55,579 --> 00:06:58,379 bueno, no sé 115 00:06:58,379 --> 00:07:00,319 cómo se crea una metralleta con esta 116 00:07:00,319 --> 00:07:02,420 tarea pero oye, que me alegro que investiguéis 117 00:07:02,420 --> 00:07:04,180 vamos a centrarnos en la tarea 118 00:07:04,180 --> 00:07:08,019 me interesa de los comentarios que estoy leyendo 119 00:07:08,019 --> 00:07:12,579 El temario ha acabado, pero la tarea la quiero empezar y con la tarea me he abrumado un poquillo. 120 00:07:13,399 --> 00:07:20,680 Esto va a pasar y, bueno, en cierto modo está pensado así para que ocurra siempre. 121 00:07:20,899 --> 00:07:21,399 Me explico. 122 00:07:23,199 --> 00:07:28,040 Y perdona que haya tanta introducción, pero así me sirve porque a partir de ahora las dinámicas, 123 00:07:28,620 --> 00:07:30,540 las tareas cada vez se van a ir haciendo más complejas. 124 00:07:32,079 --> 00:07:36,220 Las tareas no están pensadas para que sean un sigue pasos y ya está. 125 00:07:36,220 --> 00:07:49,279 Y esto lo digo por experiencia propia, cuando sigues un tutorial o un PDF con pasos uno tras otro de haces tal cosa y al final ves que ha pasado algo pero no sabes que has hecho nada en media, no se aprende absolutamente nada. 126 00:07:49,279 --> 00:08:13,480 Y las tareas yo me las tomo en ambas módulos que imparto este año como procesos de un poco experimentar y de asentar conocimientos, no de seguir pasos. Por eso es normal que si nunca os habéis enfrentado y cada tema vais a ver que tiene unos propósitos diferentes, la primera vez os va a sobrepasar un poco y es lógico. 127 00:08:13,480 --> 00:08:22,500 Entonces, bueno, para eso están las tutorías, por eso intento yo dar un primer enfoque o orientar, o que me planteéis las dudas, pero es normal. 128 00:08:24,379 --> 00:08:33,879 Hay otra cuestión que ha surgido en la corrección de las tareas, que es que hay compañeros, y además me lo han dicho explícitamente, que se ayudan de IaaS en plan chat GPT, etc. 129 00:08:33,879 --> 00:08:50,299 Ya lo comenté en su momento, para mí no hay problema en sí, en que uséis un chat GPT, etc., cuando bloqueéis o, en ocasiones, para coger un código e insertarlo y decirle, explícamelo línea en línea como si no tuviera ni idea o lo que os corresponda. 130 00:08:50,299 --> 00:09:05,139 Es una herramienta, ¿vale? Y además, dentro de lo que cabe, en otro módulo más de escribir, no es tan así, pero en este sé que si no se entiende o más o menos se sabe aplicar, por mucho código que te escupa una IA, luego no se llega a nada, ¿vale? 131 00:09:05,139 --> 00:09:24,980 Entonces, dicho esto, igual que en el examen no va a haber una IA que os ayude porque tenéis que saberlo vosotros, sí que os recomiendo que cuando busquéis estas soluciones, deis contexto en vuestros prompts, en vuestros textos que introduzcáis, de estamos hablando ahora del motor de físicas y los métodos que conocemos son tal, tal y tal, ¿vale? 132 00:09:24,980 --> 00:09:36,379 Porque si no es verdad, y es lo que quiero evitar también, hay muchísimas formas de resolver las tareas, ¿vale? Y algunas muy complejas, a veces demasiado complejas incluso para resolver cuestiones. 133 00:09:36,379 --> 00:09:48,059 Entonces, lo importante es que aunque uséis, incluso aunque peguéis partes, fragmentos de código, ¿vale? Lo importante es que aunque lo estéis pegando, que entendáis por qué se está usando. 134 00:09:48,059 --> 00:10:09,019 Y en los temas creo que se da material suficiente y las indicaciones suficientes para irlo entendiendo, ¿vale? Entonces, de verdad, no... Y esto yo sé como alumno qué pasa, ¿vale? Está por un lado la tarea como herramienta didáctica y luego está la preocupación, que la entiendo también, de que puede subir nota. 135 00:10:09,360 --> 00:10:18,179 Sinceramente, la nota que suben las tareas es bastante testimonial, pero bueno, entiendo que es importante y además es una extra la nota de aprobar el examen, ¿vale? 136 00:10:18,179 --> 00:10:30,980 Pero tomarlo más como un método para asentar conocimiento, ¿vale? Bueno, dicho esto, creo que queda claro. Ponerla ahí a la uso, sobre todo si hay algún concepto que no he entendido, aparte del manual. 137 00:10:30,980 --> 00:10:34,360 Exactamente, es un apoyo, es otra herramienta 138 00:10:34,360 --> 00:10:35,039 Yo también la uso 139 00:10:35,039 --> 00:10:36,980 Cada vez la usaremos más todo el mundo 140 00:10:36,980 --> 00:10:39,340 Pero de lo que va es de que os ayude 141 00:10:39,340 --> 00:10:41,139 Pero que los conocimientos los tenéis que tener 142 00:10:41,139 --> 00:10:42,659 En el examen no va a habería 143 00:10:42,659 --> 00:10:46,139 Me ponen 144 00:10:46,139 --> 00:10:47,360 Yo he acabado el curso de Funders 145 00:10:47,360 --> 00:10:49,279 Que es uno que puse en el 146 00:10:49,279 --> 00:10:51,500 Si no me equivoco, en el aula virtual 147 00:10:51,500 --> 00:10:52,919 De información tutorial 148 00:10:52,919 --> 00:10:55,679 Que es como de una semana de duración sobre inteligencia artificial 149 00:10:55,679 --> 00:10:57,580 Y dice, ayuda mucho a aprender a usar 150 00:10:57,580 --> 00:10:58,879 Los prompts, es decir 151 00:10:58,879 --> 00:11:02,740 las interacciones con estas inteligencias artificiales. 152 00:11:02,840 --> 00:11:04,519 Me escribe, tengo una duda de la tarea 3. 153 00:11:04,620 --> 00:11:06,460 Cuando la pelota se cae del suelo, 154 00:11:06,860 --> 00:11:09,240 he puesto un collider abajo para que se choque y vuelva al inicio, 155 00:11:09,320 --> 00:11:11,139 pero me sigue con la misma velocidad cuando se cae. 156 00:11:11,440 --> 00:11:12,759 No sé cómo arreglarlo. 157 00:11:12,840 --> 00:11:13,360 ¿Me puedes ayudar? 158 00:11:13,620 --> 00:11:16,220 Vale, ahora vemos ese tipo de cosas. 159 00:11:17,500 --> 00:11:20,379 Vale, dicho esto, me la guardo la duda, 160 00:11:20,379 --> 00:11:22,419 no estoy obviándote, pero es que lo vamos a ver. 161 00:11:22,559 --> 00:11:26,620 Así que cuando llegue el caso, si hay dudas, me lo sigue diciendo. 162 00:11:26,620 --> 00:11:33,740 alguna duda más así de cara a la tarea 3 si hay de las previas es verdad que intentaré resolver 163 00:11:33,740 --> 00:11:38,960 las dudas pero hay que ir avanzando vale entonces bueno dudas que haya también eso en los foros me 164 00:11:38,960 --> 00:11:44,679 las podéis decir pero en las tutorías voy intentando enfocarme en la tarea en que haya 165 00:11:44,679 --> 00:11:52,460 en cada momento vale para que no sé para que no nos quedemos atascados en una y un poco que haya 166 00:11:52,460 --> 00:11:58,720 movimiento. Vale, nos ponemos a ello. Bueno, como pone en el propio enunciado, que lo tengo 167 00:11:58,720 --> 00:12:03,700 por aquí, ahí está, hay que conseguir el objetivo, y a veces los juegos son un poco 168 00:12:03,700 --> 00:12:09,179 simples, pero de lo que se trata es de poneros en tesituras. Consiste en un juego, que no 169 00:12:09,179 --> 00:12:15,480 son las más obvias, pero que si sabéis implementar en un juego simple, sabéis extrapolarlo 170 00:12:15,480 --> 00:12:20,240 a otros. Vale, bueno, consiste en que con físicas movamos una pelota que se va a ir 171 00:12:20,240 --> 00:12:27,139 metiendo en estos agujeros, objetivos, y que si la pelota se cae de esta, dependiendo del nivel, 172 00:12:27,240 --> 00:12:33,159 será de una forma u otra, si se va cayendo la bola de la plataforma, pues se pierde y se reinicia el 173 00:12:33,159 --> 00:12:38,179 nivel. Cada vez que llegamos a uno de estos objetivos, se pasa a otro nivel, a un nivel 174 00:12:38,179 --> 00:12:44,139 siguiente. Esto ya implica, y lo veis aquí, que tiene que haber diferentes escenas que corresponden 175 00:12:44,139 --> 00:12:51,559 con cada uno de los niveles. En la unidad 4 se habla más sobre las escenas o la gestión entre escenas 176 00:12:51,559 --> 00:13:00,399 y en el enunciado ya de este tema se esboza un poco cómo hacerlo. Por tanto, no es mala idea que en cierto momento 177 00:13:00,399 --> 00:13:07,440 también empecéis a leer la unidad 4 antes de entregar esta, pero yo creo que se explica más o menos adecuadamente 178 00:13:07,440 --> 00:13:12,940 o se da la introducción necesaria para hablar de estos cambios de tareas en esta sección de aquí 179 00:13:12,940 --> 00:13:14,500 que habla del scene management 180 00:13:14,500 --> 00:13:15,860 y de los build settings 181 00:13:15,860 --> 00:13:18,639 lo mismo, leeros los enunciados 182 00:13:18,639 --> 00:13:19,759 siempre del tirón 183 00:13:19,759 --> 00:13:21,240 hacéis una primera lectura 184 00:13:21,240 --> 00:13:24,679 aunque os suene un poco extraño a veces 185 00:13:24,679 --> 00:13:26,159 lo que se está hablando 186 00:13:26,159 --> 00:13:27,220 tener una idea general 187 00:13:27,220 --> 00:13:29,720 y luego ya se va desglosando y avanzando 188 00:13:29,720 --> 00:13:30,940 poco a poco 189 00:13:30,940 --> 00:13:33,120 entonces el juego consiste en eso 190 00:13:33,120 --> 00:13:35,740 para la tarea se os aportaban unos FBX 191 00:13:35,740 --> 00:13:38,139 entiendo que ya 192 00:13:38,139 --> 00:13:39,600 en módulos como 193 00:13:39,600 --> 00:13:41,139 en el de animación 194 00:13:41,139 --> 00:13:42,820 o en el de modelado 195 00:13:42,820 --> 00:13:58,279 o incluso en el de color. Habréis visto formatos de exportación y uno de ellos es el FBX, pero básicamente los FBX son paquetes de distintos componentes, 196 00:13:58,379 --> 00:14:08,279 es decir, pueden incluir luces, pueden incluir mallas, pueden incluir los materiales, no es como el OBJ que está destinado solo a guardar una geometría, 197 00:14:08,279 --> 00:14:20,480 Sin más, aquí, bueno, vais a ver que cuando importáis, es decir, cuando arrastráis esos FBX y los arrastráis, se van a ver así con este triangulito que permite desplegar qué contiene ese FBX, ¿vale? 198 00:14:21,039 --> 00:14:28,240 Y veis que hay diversas cosas y en algunos ahí puede haber más que en otras, ¿vale? Eso dependerá de cómo se haya creado y se haya guardado ese FBX. 199 00:14:28,240 --> 00:14:31,700 esto significa que cuando arrastramos 200 00:14:31,700 --> 00:14:33,580 lo normal es, tengo una geometría 201 00:14:33,580 --> 00:14:35,700 y la arrastro a nuestra jerarquía 202 00:14:35,700 --> 00:14:37,220 ¿vale? vais a ver 203 00:14:37,220 --> 00:14:39,299 una cosa que al principio 204 00:14:39,299 --> 00:14:41,399 molesto, pero que es que dices, ah, tengo varios 205 00:14:41,399 --> 00:14:43,600 bueno, vais a ver que aquí tengo 206 00:14:43,600 --> 00:14:45,679 el collider como game object 207 00:14:45,679 --> 00:14:47,360 ¿vale? y luego hay otra malla que es este 208 00:14:47,360 --> 00:14:48,879 terreno 1 collider, veis que 209 00:14:48,879 --> 00:14:51,419 está el propio game object, que es el que agrupa 210 00:14:51,419 --> 00:14:53,059 SFBX, más luego 211 00:14:53,059 --> 00:14:55,620 si clicamos, la propia malla 212 00:14:55,620 --> 00:14:57,919 que tiene dentro SFBX 213 00:14:57,919 --> 00:15:09,740 que puede ir de manera independiente. Y cuando tenéis una geometría de este tipo, como es de X, tiene este simbolito de cajita, que no es exactamente igual que el de los prefabs, 214 00:15:09,860 --> 00:15:18,100 que era completamente azul, sino que tiene este precintillo. Y el problema está en que por defecto no se pueden separar los elementos. 215 00:15:18,100 --> 00:15:33,519 Yo quiero poner solo un material y no me deja aplicarlo en ocasiones. Pero hay una forma de, una vez arrastrado a la jerarquía, desempaquetar para usar independientemente los distintos elementos de un FBX. 216 00:15:33,519 --> 00:15:52,000 En este caso, si fueran otros contenedores de geometría 3D como hay, que también admiten más elementos, sería similar. Pero con clic derecho en una de estas cajitas, si vamos a prefab, porque en realidad es un prefab, aunque esté compuesto de una malla, está la opción de desempaquetar. 217 00:15:52,000 --> 00:15:59,220 Y la de desempaquetar completamente, que como dice su nombre, si os fijáis lo que hace es disgregar los elementos que tenga. 218 00:15:59,500 --> 00:16:06,299 Voy a borrar esto, porque a lo mejor en ocasiones lo que queremos es solo eso, tener uno de los elementos. 219 00:16:06,759 --> 00:16:10,259 Hasta que no se desempaqueta en ocasiones, esto no se puede hacer. 220 00:16:11,120 --> 00:16:14,039 Aquí está apareciendo que sí, pero en ocasiones puede dar problemas. 221 00:16:14,600 --> 00:16:18,820 Hay una forma, y esto adelanta algo que veremos en el tema 5 sobre animaciones, 222 00:16:18,820 --> 00:16:37,039 Que es que si yo quiero tener uno de los elementos del interior de un FBX, por ejemplo, independientemente, completamente independiente, antes de llegar a la jerarquía, si seleccionáis a uno y lo duplicáis, que es con control D, al dar a control D, ¿vale? Se hace ese duplicado y ya es independiente, ¿vale? 223 00:16:37,039 --> 00:16:50,159 Entonces, bueno, pues lo tenéis. Para ciertos usos que ya iremos viendo y que podrían ser interesantes, desempaquetados tanto ya en la jerarquía o en el propio origen, desde el panel proyecto. 224 00:16:53,379 --> 00:17:04,000 Una cosa importante cuando vais clicando en cada uno de estos elementos es que en el inspector, como siempre sucede realmente, os va enseñando las propiedades de cada elemento y os da pista de qué es cada cosa. 225 00:17:04,000 --> 00:17:20,299 Igual que, por ejemplo, un material. Se ha introducido un poquito los materiales cuando también se habla de materiales físicos en este tema, aunque los materiales físicos habréis visto que van de otro modo, no son exactamente lo mismo, ¿vale? Podéis ir viendo qué tiene cada elemento. 226 00:17:20,299 --> 00:17:40,119 Y hay una opción importante que en ocasiones puede parecer que no está en el inspector porque puede estar recogido como ahora, que es esta parte inferior donde podéis previsualizar, por ejemplo, los modelos 3D, ¿vale? Y es muy útil, si no, desplegad estas dos líneas para arriba y es que está encogido, ¿vale? Si arrastráis veréis representaciones de las geometrías. 227 00:17:40,119 --> 00:18:01,519 Y esto es útil, por ejemplo, en esta tarea para ver por qué o qué diferencia hay aparentemente entre los dos terrenos 1, que son para el primer nivel, en el que digamos que la plataforma no se mueve en sí misma, sino que está fija, pero bueno, pues si la tenéis aquí, decir, si es lo mismo, aparentemente parece lo mismo. 228 00:18:01,519 --> 00:18:18,839 Pero si os fijáis luego, por ejemplo, en la malla que tiene cada uno, hay una versión importante, y es por lo que está hecho a propósito en esta tarea, contiene un agujero, ¿vale? Que en uno está simplificado y en otro tiene una geometría bastante más compleja, ¿vale? 229 00:18:18,839 --> 00:18:26,740 Entonces, bueno, alguna diferencia habrá para que estén estos dos elementos por separado. 230 00:18:29,079 --> 00:18:45,200 Si vais viendo el tema, y voy a hablar un poco de la duda que tenía la compañera sobre por qué atraviesa, por qué no elementos y cuándo se frena o no, esto está iniciado en el vídeo de Álvaro Holguera, que habla de estos asuntos. 231 00:18:45,200 --> 00:18:57,500 Pero muy rápido voy a hacer un repaso a qué son las físicas en Unity, que son los componentes RigidBody, los colliders y cuáles son sus funciones, porque es esencial conocerlo. 232 00:18:58,039 --> 00:19:02,220 Voy a ir rápido porque entiendo que en ese vídeo queda claro, si no me paráis. 233 00:19:02,220 --> 00:19:18,759 Pero cuando creamos una de estas primitivas, por ejemplo el cubo, por defecto vais a ver que tienen ya agregado, aparte de un mesh renderer que lo que hace es, y se asocia con este mesh que tenemos aquí, por ejemplo en este elemento, 234 00:19:18,759 --> 00:19:34,440 Un mesh renderer que está mostrando la geometría y el mesh filter que está mostrando cuál es la geometría y cómo está texturizada o qué textura, qué material tiene la geometría. 235 00:19:34,640 --> 00:19:43,839 También viene un tercer componente, dependiendo de la primitiva, será uno u otro, que es un collider de los distintos tipos que hay y que se ven en el tema. 236 00:19:43,839 --> 00:20:03,759 En los contenidos los tenéis. Si, por ejemplo, creáramos una esfera, como sucederá con la bola, pues viene con su sphere collider. Y en principio, lo borro, ¿vale? Tengo aquí una esfera que lo único que he hecho, bueno, no es lo único, voy a eliminar. Así es como vendría por defecto. Bueno, no, voy a crear otra porque si no, esta avanza demasiadas cosas. 237 00:20:04,599 --> 00:20:11,000 Cuando creo esta bola, y digo esto es una bola, creo la esfera, viene con ese Sphere Collider. 238 00:20:13,099 --> 00:20:19,759 Y fijaos, cuando tenemos Colliders, que en general, hay alguna excepción, pero en general, imagino que lo veis bien, 239 00:20:20,339 --> 00:20:30,900 viene, aparte de que se vea la representación de esa malla, se ve como un sólido, se ve esta mallita verde que representa lo que es el Collider. 240 00:20:30,900 --> 00:20:45,599 De hecho, si activo y desactivo el collider, veis que se marca y se desmarca, ¿vale? Bueno, no llega a desaparecer, pero veréis que se atenúa un poco el color. De hecho, si quito por completo ese collider, pues desaparece, ¿vale? 241 00:20:45,599 --> 00:21:09,880 Esto lo que significa o lo que persigue es delimitar, y son independientes, de hecho se puede mover aquí el center y veis que son independientes, es representar por un lado los límites de la geometría, que es lo que se ve mediante el mesh renderer, que es la parte visual, y luego está lo que es la parte de cómo tienen que colisionar y comportarse físicamente los objetos. 242 00:21:09,880 --> 00:21:27,400 ¿Sí? Es decir, por mucho que se vea aquí la bola, realmente no se va a sostener sobre este suelo porque la parte que es, digamos, sólida, la que percibe las colisiones, ahora mismo la tengo aquí ubicada. 243 00:21:27,400 --> 00:21:33,940 Las dos se mueven en conjunto, pero veis que en uno de los parámetros del collider hay un cierto desfase que le he puesto. 244 00:21:34,579 --> 00:21:42,019 Porque así no me puede interesar que sea más grande, que ocupe más la parte de la colisión más allá de lo que es la geometría en sí. 245 00:21:42,980 --> 00:21:51,339 Entonces, si yo por ejemplo, ahora esta bola, y esto es algo importante, que además viene como dos veces o más como destacado en el tema, 246 00:21:51,339 --> 00:22:11,640 Para que funcionen las colisiones en sí, tiene que haber un objeto que se mueva o que tenga comportamiento físico. Ahora mismo en esta esfera solo tenemos que recibir las colisiones, pero si no hay nada que se mueva y llega a este punto, pues nada se percibe como que colisiona. 247 00:22:11,640 --> 00:22:14,799 tengo aquí el terreno que lo he importado 248 00:22:14,799 --> 00:22:16,039 ahora si queréis vemos también 249 00:22:16,039 --> 00:22:17,200 cómo funciona 250 00:22:17,200 --> 00:22:20,000 tengo este 251 00:22:20,000 --> 00:22:22,339 que tiene otro tipo, que ahora veremos, de collider 252 00:22:22,339 --> 00:22:24,119 que es este mesh collider 253 00:22:24,119 --> 00:22:25,079 que es más avanzado 254 00:22:25,079 --> 00:22:27,680 ahora vemos eso, la esfera 255 00:22:27,680 --> 00:22:30,640 para que tenga sus comportamientos físicos 256 00:22:30,640 --> 00:22:32,339 está ese componente que se llama 257 00:22:32,339 --> 00:22:32,980 rigidbody 258 00:22:32,980 --> 00:22:35,980 y que por defecto 259 00:22:35,980 --> 00:22:38,319 y por eso parece además que se mueve por sí solo 260 00:22:38,319 --> 00:22:39,559 cuando reproduzcamos el juego 261 00:22:39,559 --> 00:22:43,539 tiene marcada la gravedad para que se use. 262 00:22:44,680 --> 00:22:50,559 Hay una sección en los Project Settings, igual que veíamos el Input Manager, por ejemplo, 263 00:22:51,059 --> 00:22:55,380 que es el de físicas. Está la física 2D, que ahora mismo no se interesa, y las físicas. 264 00:22:56,400 --> 00:23:01,759 Aquí es donde se establece, y por defecto viene la gravedad, que en la física existe, 265 00:23:01,759 --> 00:23:06,440 o es el convenio que hay, sobrepasa un poco mis conocimientos, pero que yo sé, 266 00:23:06,940 --> 00:23:09,140 y esto lo veremos en más temas porque es importante este número, 267 00:23:09,559 --> 00:23:12,640 que corresponde con el menos 9,81, ¿vale? 268 00:23:12,940 --> 00:23:16,900 Si buscáis en internet veréis que este número, por lo que sea, que no conozco, 269 00:23:17,839 --> 00:23:20,220 está relacionado con la fuerza gravitatoria, ¿vale? 270 00:23:20,220 --> 00:23:24,359 Si en algún momento iniciáramos un juego en el que estamos en la Luna 271 00:23:24,359 --> 00:23:28,460 y queremos que la gravedad se disminuya, aquí podríamos poner el valor de gravedad de la Luna. 272 00:23:28,960 --> 00:23:31,759 Es decir, esto se puede ajustar aquí, ¿vale? 273 00:23:31,759 --> 00:23:36,559 Entre otros factores que también se habla en el tema, como este layer collision, 274 00:23:36,559 --> 00:23:42,799 para determinar qué capas colisionan con otras independientemente vale las layers son estas lo 275 00:23:42,799 --> 00:23:49,160 veremos también más adelante diferentes digamos separaciones o segmentaciones que podemos hacer 276 00:23:49,160 --> 00:23:53,720 por elementos y bueno aquí podemos hacer que unos elementos colisionan con otros pero otros no y así 277 00:23:53,720 --> 00:24:05,619 y eso discriminando quién lo hace con qué vale igualmente ahí otro factor que es importante 278 00:24:05,619 --> 00:24:29,640 Cuando ahora hablemos, que es, si os recordáis el último día, dijimos, los movimientos por el transform se hacen en el método update, pero los de física lo haremos con el fix update que no necesita ese time delta time del que hablábamos para regular la velocidad o la potencia de reproducción del ordenador. 279 00:24:29,640 --> 00:24:51,500 Porque aquí ya está establecido que el intervalo de ese tiempo de ejecución sea este. Son distintos elementos, aparte de otros muchos que hay sobre física, pero que en principio no hay que tocar porque ya viene configurado para que funcione correctamente. 280 00:24:51,500 --> 00:25:07,619 Hay algunos que sí son interesantes, pero bueno, son más avanzados, como este, la velocidad de penetración, que permite, bueno, porque si una colisión es muy rápida, pues haya un tiempo de detección para que evite que traspase elementos por ser muy rápido, ¿vale? 281 00:25:07,619 --> 00:25:17,619 Pero bueno, vamos con lo básico. Cuando ponemos este RigidBody, como usa la gravedad, si le damos a play, a la reproducción, vais a ver que la bola cae y atraviesa. 282 00:25:18,279 --> 00:25:25,680 Veis que está la bola, cae y hay un collider, ¿vale? Importante, porque si no hay colliders, tampoco se detectan, pero hay un collider en la esfera y otro en el terreno. 283 00:25:26,019 --> 00:25:35,579 Y veis que se visualiza, ¿vale? ¿Por qué no lo hace? Muy simple, importante. Quizá es el problema que está diciendo la compañía, no creo, sé cuál va a ser. 284 00:25:35,579 --> 00:25:47,460 Pero importante, que porque veamos aquí un elemento y parezca que el elemento está aquí, realmente el que regula y ajusta todo lo relacionado con esas colisiones es esta malla verde que está relacionada con el collider. 285 00:25:47,940 --> 00:25:55,200 Por tanto, si la he movido y deja de estar asociada a ese elemento, pues veis que la colisión no se da como lo esperable. 286 00:25:55,420 --> 00:26:05,359 Ahora sí, ahora tanto la malla visual como la de colisión se ajusta y veréis que ahora cae por fuerza de la gravedad, no hay ningún código de momento que mueva esta bola y se queda ahí plantada. 287 00:26:05,579 --> 00:26:18,519 La velocidad de cómo cae, igual que sucede en el mundo, se regula, de momento el collider me quedo ahí, se regula con parámetros del RigidBody. 288 00:26:18,519 --> 00:26:20,960 y lo más importante 289 00:26:20,960 --> 00:26:22,880 aparte de que se puede desactivar la gravedad 290 00:26:22,880 --> 00:26:24,339 si yo la desactivo pues le doy a play 291 00:26:24,339 --> 00:26:26,680 y como no hay gravedad pues este objeto 292 00:26:26,680 --> 00:26:28,859 si hubiera otra bola o choco 293 00:26:28,859 --> 00:26:29,440 hacia abajo 294 00:26:29,440 --> 00:26:34,359 habría una colisión 295 00:26:34,359 --> 00:26:36,299 pero en sí no hay fuerza de la gravedad 296 00:26:36,299 --> 00:26:37,200 por eso no cae 297 00:26:37,200 --> 00:26:40,339 luego también veremos que hay otro que es para 298 00:26:40,339 --> 00:26:42,940 aunque tengan gravedad 299 00:26:42,940 --> 00:26:46,720 se queden fijos a la espera 300 00:26:46,720 --> 00:26:48,599 de que a lo mejor por código digamos 301 00:26:48,599 --> 00:26:50,180 ya no es kinemático y se active 302 00:26:50,180 --> 00:26:51,880 por ejemplo en Angry Birds 303 00:26:51,880 --> 00:26:54,599 por decir un ejemplo, no es exactamente esto pero creo que 304 00:26:54,599 --> 00:26:56,819 ayuda a entenderlo, cuando tenemos un pájaro 305 00:26:56,819 --> 00:26:58,380 en el tirachín de Angry Birds 306 00:26:58,380 --> 00:26:59,900 hasta que no soltamos 307 00:26:59,900 --> 00:27:02,579 no se aplica la fuerza, vale, pues a lo mejor 308 00:27:02,579 --> 00:27:04,319 está en kinemático hasta que de pronto decimos 309 00:27:04,319 --> 00:27:05,980 vale, ya, deja de ser kinemático 310 00:27:05,980 --> 00:27:08,480 y usando la gravedad y todas las fuerzas que tengamos 311 00:27:08,480 --> 00:27:10,000 pues ya sueltas y 312 00:27:10,000 --> 00:27:11,859 adquiere la fuerza 313 00:27:11,859 --> 00:27:13,839 física que se esté 314 00:27:13,839 --> 00:27:15,720 otorgando, vale 315 00:27:15,720 --> 00:27:37,859 Vale, entonces el Rigid Body, voy a dejarlo como viene por defecto, que es que funcione con normalidad y con gravedad, están estos tres parámetros, bien explicados en el tema, pero que bueno, la masa probablemente a nivel físico pues tiene muchos peros lo que digo, pero sería el peso, vale, pues si algo tiene una masa grande pues tiene un peso elevado y caerá más rápido. 316 00:27:37,859 --> 00:27:54,190 De hecho, fijaos, lo voy a levantar un poco, que si yo tiro la bola y vale 1, cae así de rápido y si le pusiera 1000, ¿vale? Pues veréis que cae más rápido, debería caer más rápido. 317 00:27:54,190 --> 00:28:07,730 A ver, voy a poner un valor más alto. Y esto también tiene influencia. Hasta que coge la aceleración, pues no lo está haciendo, pero sí que debería estar influyendo. 318 00:28:07,730 --> 00:28:20,390 A ver, LegitBody, bla, bla, bla. Ah, sí, voy a ponerlo más arriba. Vais a ver que caerá de distintos modos, ¿vale? Y esto también aplicará fuerzas en los otros elementos. 319 00:28:21,150 --> 00:28:33,930 La clave en esto, y lo que a veces provoca irritación para calcular, es que aparte de que tenga esta masa hay otro parámetro, otros dos, que son el drag y el angular drag, ¿vale? 320 00:28:33,930 --> 00:28:50,789 La masa es influyente también, por ejemplo, cuando vayamos a aplicar fuerzas por código, como hacíamos con la nave al darle a la W que vaya hacia adelante, según esta masa la fuerza costará más que empuje o no, como si nosotros estuviéramos aplicando la fuerza. 321 00:28:50,789 --> 00:29:16,670 Pero hay otros dos variables, que son este drag y este angular drag, que son las resistencias, por un lado, al aire y la resistencia a los giros, a las rotaciones, que dependiendo de qué valores pongamos, si no tienen ninguna resistencia, y hay vídeos que hablan de esto en el tema, que independientemente del peso o de la masa, mejor dicho, que tenga un material, lo importante es la resistencia que tenga al aire, y está el experimento, supongo que lo habéis visto, del martillo y la pluma, 322 00:29:16,670 --> 00:29:39,970 En una sala en la que ninguno de los dos elementos tiene resistencia al aire, o tienen la misma, caen a la misma velocidad, aunque tengan distintas masas, ¿vale? Pues está este parámetro que lo que hace es, digamos, la resistencia al aire en el sentido de este aire que tenemos aquí en medio y que es invisible, cuánta resistencia, cuánta oposición al movimiento va proporcionando y por eso lo va frenando, ¿vale? 323 00:29:39,970 --> 00:29:51,250 ¿Veis que, aunque está la masa de 1, cae mucho más despacio y si empieza a subirlo incluso se detiene porque hay un aire aquí, hay una fuerza en el ambiente que lo detiene. 324 00:29:51,869 --> 00:30:00,829 Lo mismo sucederá con el angular drag. Esto lo veremos cuando esta bola la rotemos y esto va a suponer que la bola se detenga antes o no. 325 00:30:01,130 --> 00:30:08,009 No es la fricción de los materiales, que esos son los materiales físicos que también influyen, sino la resistencia, digamos, del ambiente, del aire. 326 00:30:08,009 --> 00:30:11,730 que no solo por subir la masa 327 00:30:11,730 --> 00:30:13,430 va a caer más rápido 328 00:30:13,430 --> 00:30:15,589 como hemos visto, todo es en conjunción 329 00:30:15,589 --> 00:30:17,769 con la resistencia que también hay en el aire 330 00:30:17,769 --> 00:30:19,289 pero sí que es importante 331 00:30:19,289 --> 00:30:21,369 por ejemplo, para aplicarle fuerza a más masa 332 00:30:21,369 --> 00:30:22,650 más cuesta mover un elemento 333 00:30:22,650 --> 00:30:25,190 a lo mejor luego se detiene antes o no 334 00:30:25,190 --> 00:30:26,589 según esta resistencia, pero también 335 00:30:26,589 --> 00:30:28,269 influye en las masas 336 00:30:28,269 --> 00:30:30,890 entonces bueno 337 00:30:30,890 --> 00:30:32,609 por defecto vais a ver que una bola 338 00:30:32,609 --> 00:30:34,450 puede caer tal que así 339 00:30:34,450 --> 00:30:37,289 ¿vale? hasta aquí ¿qué tal? 340 00:30:38,009 --> 00:31:02,740 Dame un segundo que me quito la sudadera mientras me escribís algo o me decís. Vale, bien. Además, esto también es interesante porque ya vais viendo también motores de físicas, etc. 341 00:31:02,740 --> 00:31:17,900 Los software de modelado 3D tienen simuladores de física para aplicar fuerzas, etc., pero la interactividad que tenemos en Unity no es algo que teníamos en esos software, por tanto, oye, se abre el abanico de opciones, ¿verdad? 342 00:31:20,240 --> 00:31:22,960 Esto es más complicado de lo que parecía en un momento, pero mola. 343 00:31:22,960 --> 00:31:45,400 Bueno, en realidad, si os fijáis, lo único que hemos hecho, digo sí, si no ceñimos a lo que estoy diciendo, la tarea tiene más intíngulis, pero es entender que hay que añadir colliders, tiene que haber un collider para que se colisionen, para que se detecten los objetos entre sí, 344 00:31:45,400 --> 00:31:51,559 y aquel que vayamos a dar queremos que se comporte con fuerzas físicas que se mueva etcétera tiene 345 00:31:51,559 --> 00:31:56,460 que tener este rigi body y ojo y esto lo hablamos el otro día rigi body va a ser el componente sobre 346 00:31:56,460 --> 00:32:01,740 el que aplicamos las fuerzas es decir si queremos que un objeto al darle a una tecla se le aplique 347 00:32:01,740 --> 00:32:06,339 una fuerza vale que no es lo mismo mover con el transforme como hacíamos el otro día con el 348 00:32:06,339 --> 00:32:10,900 transporte late que es que vamos cambiando los parámetros como hacemos aquí vale esto es lo que 349 00:32:10,900 --> 00:32:16,059 hacemos con transform translate básicamente por código pero hacemos esto o cambiamos la escala 350 00:32:16,059 --> 00:32:21,880 o cambiamos la rotación vale pero estamos cambiándolo en este un componente transformó 351 00:32:21,880 --> 00:32:26,720 con el ritmo de lo que se trata es un poco diferente que es aplicar fuerzas que simulan 352 00:32:26,720 --> 00:32:38,099 la realidad vale vamos a ello hay otro otro elemento muy importante y quizá esto sí diría 353 00:32:38,099 --> 00:32:39,940 que es lo que la compañera me ha dicho, que es que 354 00:32:39,940 --> 00:32:41,480 aunque está todo como configurado 355 00:32:41,480 --> 00:32:43,839 y vais a ver que cae la bola y choca 356 00:32:43,839 --> 00:32:46,059 y se queda ahí, porque no hay nada más que está ocurriendo 357 00:32:46,059 --> 00:32:47,799 no estamos dando más fuerza, entonces 358 00:32:47,799 --> 00:32:49,920 la bola sigue teniendo gravedad, le detiene 359 00:32:49,920 --> 00:32:51,940 esta tabla, porque 360 00:32:51,940 --> 00:32:53,759 la tabla aunque tenga un MES Collider 361 00:32:53,759 --> 00:32:56,279 no tiene 362 00:32:56,279 --> 00:32:56,900 un Rigid Body 363 00:32:56,900 --> 00:32:59,359 y también esto lo pone mucho en el tema 364 00:32:59,359 --> 00:33:02,160 si hay un Collider, un Gain Object 365 00:33:02,160 --> 00:33:03,759 que tiene un Collider pero no un Rigid Body 366 00:33:03,759 --> 00:33:05,960 pues es una pared, es estático, no tiene 367 00:33:05,960 --> 00:33:12,140 comportamientos físicos detecta colisiones y está ahí para detenerlo vale entonces por defecto pues 368 00:33:12,140 --> 00:33:19,680 esto funciona como un suelo inamovible vale si lo hacemos rápido si yo le dijera que esto tenga un 369 00:33:19,680 --> 00:33:24,960 rigid body vale bueno se han añadido durante el play ya sabéis que durante el play lo que 370 00:33:24,960 --> 00:33:32,339 añadamos no funciona pero si le doy a este rigid body simplemente vais a ver que se caen tanto 371 00:33:32,339 --> 00:33:37,940 bola como tabla, porque tienen la gravedad. Si yo desactivo esta gravedad, y aquí vienen 372 00:33:37,940 --> 00:33:45,480 cosas divertidas, la tabla no tiene gravedad, llega la bola y la sobrepasa por algo que 373 00:33:45,480 --> 00:33:49,980 es un poco más intrincado, perdona, porque esto, el Mesh Collider ahora hablamos, voy 374 00:33:49,980 --> 00:33:56,220 a poner un Bosch Collider, ¿vale? Y ahora veis que tiene esa caja, y ahora sí que, 375 00:33:56,220 --> 00:34:00,140 cuando llegue, estamos usando el Bosch Collider, cuando llegue la bola, la empuja, como si 376 00:34:00,140 --> 00:34:08,739 fuera un bolo. Lo habéis visto, ¿no? Empuja y la choca y le da, ¿vale? No hay gravedad, 377 00:34:08,900 --> 00:34:15,840 pero se mueve por fuerza del impacto y la fuerza que le ha transferido la bola. Entonces 378 00:34:15,840 --> 00:34:21,300 aquí ya podemos ir pensando en juegos de bolos, en juegos de lo que implique físicas. 379 00:34:21,300 --> 00:34:27,099 vale, lo dicho 380 00:34:27,099 --> 00:34:29,099 voy a dejar aquí un poco aparcado 381 00:34:29,099 --> 00:34:30,860 esto del Maze Collider, que es el 382 00:34:30,860 --> 00:34:32,940 Collider que viene por defecto en estos 383 00:34:32,940 --> 00:34:35,079 FBX cuando lo arrastremos, porque es 384 00:34:35,079 --> 00:34:37,239 un poco más complejo y probablemente la parte más difícil 385 00:34:37,239 --> 00:34:39,000 de entender de la tarea, pero 386 00:34:39,000 --> 00:34:40,699 vamos a ello, ¿qué problema hay? 387 00:34:40,880 --> 00:34:42,960 ¿y por qué no puedo 388 00:34:42,960 --> 00:34:45,199 digamos con el propósito del juego que tenemos 389 00:34:45,199 --> 00:34:47,000 y voy a decirle que esto 390 00:34:47,000 --> 00:34:48,500 sí, está bien 391 00:34:48,500 --> 00:34:50,880 ¿qué problema hay? 392 00:34:51,300 --> 00:35:02,400 Que yo tengo aquí un agujerillo que voy a usar para que se meta la bola, como si fuera un campo de golf, y cuando se meta, pues ahí ha ganado la tarea, el nivel. 393 00:35:02,780 --> 00:35:09,679 ¿Qué pasa? Que los colliders por defecto son formas primitivas, pues una caja, una esfera, una cápsula, y ¿qué ocurre? 394 00:35:09,679 --> 00:35:21,619 Que si tengo un hueco, ahora mismo, si os fijáis, tengo una caja, pero volvemos a recordar que es independiente lo que vemos visualmente con la forma de esa caja. 395 00:35:21,619 --> 00:35:28,079 Entonces, ahora mismo, por mucho que me empeñe, y lo vamos a hacer, la bola jamás se va a meter en ese... 396 00:35:28,079 --> 00:35:35,000 ¡Uy va! A ver, voy a quitarle el Rigid Body, ¿vale? Porque no quiero que el terreno se mueva, entonces me está molestando más que otra cosa. 397 00:35:35,400 --> 00:35:38,820 Quiero que teste la colisión y la bola, pues, choque con ello o no. 398 00:35:39,420 --> 00:35:43,619 Cuando llega la bola, se posa ahí, y bueno, aparte de que la bola no la ajusta de tamaño y no va a entrar, 399 00:35:43,619 --> 00:35:50,340 pues porque es un poquito grande, ¿vale? Voy a cambiar la escala, vinculo todo para que se escale proporcional, 400 00:35:50,780 --> 00:35:56,260 0,2, y ahora, a ver, voy a hacerla un poquito más, la voy a ajustar más, ¿vale? 401 00:35:56,260 --> 00:36:00,480 Ahora ya sí tiene un tamaño para que se pueda introducir, ¿vale? 402 00:36:00,500 --> 00:36:03,380 Si yo meto esta bola, y estamos en reproducción, ¿eh? 403 00:36:03,380 --> 00:36:21,820 Podemos comprobar las simulaciones de físicas moviendo los elementos. Cuando soltemos o vayamos operando, subo la bola y cuando suelto, como tiene gravedad, baja. Esto en tiempo real, en el panel escena, podemos siempre ir testeando. 404 00:36:21,820 --> 00:36:42,579 Y fijaos que cuando se cae, suelto y se cae, porque ahí no hay nada. Reseteo otra vez. ¿Qué sucede si os fijáis? Primer problema, que cuando yo me pongo encima de este agujero, digo, pero si hay un agujero, pero lo he dicho, no se está metiendo, que lo ponga ahí, se queda flotando, porque el collider del terreno es un cubo. 405 00:36:42,579 --> 00:37:00,179 Entonces, por eso esta tarea, para huecos, vacíos, geometrías complejas, si queremos que se adapte completamente, existe este otro tipo de collider, que es el que suele venir con los FBX, porque se entiende en geometrías más complejas, que se adaptan a mallas. 406 00:37:00,179 --> 00:37:29,300 Ah, vale. Entonces, bueno, ahí pues hay un elemento extra que tener en juego, que es que los colliders también se van, hay distintas tipologías y unos son más complejos que otros, y el BOS Collider a nivel de recursos, además, consume muy poco, y el MES Collider, pues si metemos geometrías, consume más, y de hecho, lo pone en el tema, si tiene una geometría vinculada, o esa malla, ese collider consistente en malla, tiene más de un número de polígonos, 256, 407 00:37:29,300 --> 00:37:50,980 De hecho, pues esta malla se simplifica o empieza a tener comportamientos no deseados. Por eso también, quizá, es la razón por la que os he proporcionado una malla que veis que tiene pocos triángulos con respecto a la de alto poligonaje, que es la que queremos que se vea, que sobrepasa ese número de triángulos. 408 00:37:50,980 --> 00:38:07,739 Y en realidad, cuando tenemos un collider, ¿qué más me da que haya toda esta geometría? Si lo que quiero es que detecte, pues oye, que hay un agujero. Tampoco tiene que ser 100% realista, es decir, no se va a percibir cuando la gambola se cae si hay un poquito. 409 00:38:08,039 --> 00:38:14,000 Visualmente sí, porque los acabados son más finos, las curvas, los biseles, pero a nivel de Collider, no. 410 00:38:14,159 --> 00:38:21,480 Por eso se sacan estas versiones de más bajo poligonaje, para no sobrecargar, porque al final las físicas tienen muchos cálculos detrás 411 00:38:21,480 --> 00:38:25,480 y para no sobrecargar la máquina, pues se optimiza de este modo, ¿vale? 412 00:38:26,699 --> 00:38:30,059 Entonces, nos hemos quedado en la bola. 413 00:38:30,780 --> 00:38:35,460 Y hay otro comportamiento muy importante, muy, muy, muy, muy, muy, muy importante, ¿vale? 414 00:38:35,460 --> 00:38:57,019 Digo muchos muis, porque es uno de los quebraderos de cabeza que hay al principio cuando interactuamos a través de colliders, que es que un collider, digamos, y todos, sucede, bueno, en el mes collider, sí, también sucede, pero con asterisco, todos los colliders van a tener un parámetro desactivado por defecto, que es este de list trigger, ¿vale? 415 00:38:57,019 --> 00:39:05,539 están el modo colisión, que el collider funcione como un colisionador, que es lo que hay ahora mismo, 416 00:39:06,019 --> 00:39:12,139 y tenemos esta bola y choca con el terreno, que si os fijáis tampoco tiene marcado esto East Trigger. 417 00:39:13,460 --> 00:39:17,519 Pero hay que pensar que en ocasiones, y es otro de los usos que tiene los colliders, 418 00:39:17,519 --> 00:39:24,079 es que gracias a estas áreas verdes asociadas con el collider, estas áreas que tenemos aquí, 419 00:39:24,079 --> 00:39:26,980 Que no tienen ni por qué ir asociadas a una malla 420 00:39:26,980 --> 00:39:28,159 Yo puedo desactivar esta malla 421 00:39:28,159 --> 00:39:30,099 Y si este GameObject solo... 422 00:39:30,099 --> 00:39:33,719 De hecho, mirad, yo puedo añadir aquí un Entity 423 00:39:33,719 --> 00:39:34,639 No tiene nada 424 00:39:34,639 --> 00:39:36,679 Y decir, yo quiero que esto tenga un Boss Collider 425 00:39:36,679 --> 00:39:39,119 Aunque no se vea nada, aquí hay un Boss Collider 426 00:39:39,119 --> 00:39:41,000 Y fijaos que hay una caja ahí 427 00:39:41,000 --> 00:39:43,820 Voy a resetear la posición porque me la he llevado un poco lejos 428 00:39:43,820 --> 00:39:45,380 Tengo aquí un Boss Collider 429 00:39:45,380 --> 00:39:49,340 Y ahí está 430 00:39:49,340 --> 00:39:51,199 Un cubo que no se ve 431 00:39:51,199 --> 00:39:54,380 Pero hay un área que sirve para cosas 432 00:39:54,380 --> 00:39:56,320 O está ahí para algo 433 00:39:56,320 --> 00:39:58,139 Vale, como esto tiene un Bosch Collider 434 00:39:58,139 --> 00:39:59,619 No se ve ningún cubo 435 00:39:59,619 --> 00:40:01,219 Pero fijaos que cuando yo dé a la bola 436 00:40:01,219 --> 00:40:04,460 La bola se queda ahí encima 437 00:40:04,460 --> 00:40:08,500 Esto de primeras no es nada intuitivo 438 00:40:08,500 --> 00:40:09,940 Pero es lo que os he contado 439 00:40:09,940 --> 00:40:13,219 Un Collider sirve para detectar colisiones 440 00:40:13,219 --> 00:40:15,320 Y comportarse como un límite natural 441 00:40:15,320 --> 00:40:18,280 A lo que un Rigidbody se enfrenta 442 00:40:18,280 --> 00:40:21,880 Este Rigidbody está intentando seguir bajando por fuerza de la gravedad 443 00:40:21,880 --> 00:40:23,960 Y dices, si que ahí no hay nada 444 00:40:23,960 --> 00:40:42,559 Vale, efectivamente no hay nada, pero hay un collider y como tal se está detectando y está funcionando acorde a ello. ¿Qué sucede? Que los colliders tienen otro uso y este además me viene muy bien. Tienen otro uso que es delimitar áreas para que sucedan cosas. Y el ejemplo lo pongo ahora muy rápido. 445 00:40:42,559 --> 00:40:48,719 Imaginaos que yo quiero, y esta es la lógica que tenéis que meteros en la cabeza 446 00:40:48,719 --> 00:40:53,780 Que es cuando yo llegue con la pelota, consiga que la pelota se meta en este agujero 447 00:40:53,780 --> 00:40:58,719 Vamos a tener que decirle al programa de alguna forma que cuando la pelota se meta aquí 448 00:40:58,719 --> 00:41:02,960 Se active un código o sucede algo que nos pase al siguiente nivel 449 00:41:02,960 --> 00:41:08,179 O que saliera una pantalla que diga ha superado el nivel o lo que sea 450 00:41:08,179 --> 00:41:09,800 Pero que active algo, que detecte algo 451 00:41:09,800 --> 00:41:33,380 Para eso se usan los colliders también, solo que en vez de usarlo en modo colisión, porque aquí vamos a querer que la bola se meta y aunque haya un límite, imaginaos que este cubo lo muevo y lo meto aquí dentro, queremos que la bola se meta ahí, pero que haya un área definida que no sirva, que no funcione como un límite físico, 452 00:41:33,380 --> 00:41:35,460 Pero sí sirva para detectar que algo 453 00:41:35,460 --> 00:41:37,739 Cuando traspasa sus límites o se mete en su interior 454 00:41:37,739 --> 00:41:39,440 Pueda desencadenar eventos 455 00:41:39,440 --> 00:41:41,320 Puede desencadenar acciones 456 00:41:41,320 --> 00:41:43,500 Para eso está esto de Eastrigger 457 00:41:43,500 --> 00:41:45,260 Y son excluyentes 458 00:41:45,260 --> 00:41:47,340 Si yo tengo un non-collider 459 00:41:47,340 --> 00:41:48,639 Así 460 00:41:48,639 --> 00:41:51,780 El software sí va a detectar que está chocando 461 00:41:51,780 --> 00:41:53,980 Con los límites y entre otras cosas 462 00:41:53,980 --> 00:41:55,659 Lo que hace es que no permite que lo atraviese 463 00:41:55,659 --> 00:41:57,800 ¿Vale? Va a haber un método 464 00:41:57,800 --> 00:42:00,179 En código que permita detectar estas colisiones 465 00:42:00,179 --> 00:42:01,619 Físicas, digamos, yo lo llamo así 466 00:42:01,619 --> 00:42:19,400 En plan que respetan los límites físicos de este cubo, en este caso. Si yo en el cubo, no en la bola, en el cubo, porque yo la bola quiero que cuando siga, si yo la dejara aquí y la sacara de esta caja y le doy al play, yo quiero que se siga comportando con algo físico que tiene límites. 467 00:42:19,400 --> 00:42:27,000 Pero, sin embargo, este cubo ahora mismo yo no quiero que tenga un comportamiento físico 468 00:42:27,000 --> 00:42:30,880 Se podría buscar por algún motivo 469 00:42:30,880 --> 00:42:37,260 Pero este cubo lo que quiero es que cuando detecte que se ha metido una bola 470 00:42:37,260 --> 00:42:41,019 Puedan lanzarse estos sucesos 471 00:42:41,019 --> 00:42:44,860 Si yo a este cubo le digo, no, no, tú no vas a funcionar como un collider 472 00:42:44,860 --> 00:42:46,099 Vas a funcionar como un trigger 473 00:42:46,099 --> 00:42:48,619 Trigger en inglés significa disparador 474 00:42:48,619 --> 00:42:55,079 sirve para lanzar, para servir de excusa, digamos, de detector de acciones, ¿vale? 475 00:42:55,079 --> 00:43:02,820 Vais a ver que el primer efecto que tiene es que cuando doy a play, a nivel físico, ¿vale? 476 00:43:03,159 --> 00:43:08,579 No está ahí, es como si no existiera, lo ha atravesado, pero ojo, que el programa sí ha detectado 477 00:43:08,579 --> 00:43:12,460 a nivel interno, de momento, que esta bola ha entrado en esta área, ¿vale? 478 00:43:12,480 --> 00:43:18,480 Y eso es lo que haremos cuando, de hecho, cojamos y usemos un collider, en este caso un boss collider, 479 00:43:18,480 --> 00:43:20,460 porque de esta forma no viene bien 480 00:43:20,460 --> 00:43:22,860 que vamos a hacer más pequeñito 481 00:43:22,860 --> 00:43:25,440 vamos a decirle que esto sea de 0.1 482 00:43:25,440 --> 00:43:27,940 en todas las dimensiones 483 00:43:27,940 --> 00:43:28,519 un cubito 484 00:43:28,519 --> 00:43:31,239 que lo que vamos a hacer es meterlo aquí dentro 485 00:43:31,239 --> 00:43:32,420 y ahí va a estar 486 00:43:32,420 --> 00:43:34,860 lo vamos a llamar 487 00:43:34,860 --> 00:43:35,940 detector 488 00:43:35,940 --> 00:43:38,239 bueno 489 00:43:38,239 --> 00:43:41,579 trigger o como queramos 490 00:43:41,579 --> 00:43:44,119 o meta, vamos a decir que esto es meta 491 00:43:44,119 --> 00:43:45,920 y esto 492 00:43:45,920 --> 00:43:47,960 como trigger que es va a estar aquí 493 00:43:47,960 --> 00:43:50,139 esperando a que alguien lo atraviese o lo toque 494 00:43:50,139 --> 00:43:52,360 o lo que sea, pero en ningún momento 495 00:43:52,360 --> 00:43:53,920 va a suponer una resistencia 496 00:43:53,920 --> 00:43:56,239 física, simplemente va a servir 497 00:43:56,239 --> 00:43:57,619 de disparador, de trigger 498 00:43:57,619 --> 00:43:58,820 ¿vale? 499 00:44:00,579 --> 00:44:01,920 esto es lo que haremos, me han dicho 500 00:44:01,920 --> 00:44:03,599 una precarga de nivel, bueno no 501 00:44:03,599 --> 00:44:06,219 precarga no, sino detector de que cuando 502 00:44:06,219 --> 00:44:08,139 la bola llegue aquí y toque este trigger 503 00:44:08,139 --> 00:44:10,019 lance un nuevo nivel 504 00:44:10,019 --> 00:44:12,039 eso se lo diremos por código 505 00:44:12,039 --> 00:44:14,099 hasta aquí que tal 506 00:44:14,099 --> 00:44:16,159 ¿entendéis de momento la 507 00:44:16,159 --> 00:44:23,119 diferencia de East Trigger y no East Trigger, lo importante es, y es lo que decía la compañera, 508 00:44:23,239 --> 00:44:26,920 yo estoy detectando ya que la bola, y es lo que está haciendo, ella lo que ha hecho, 509 00:44:27,099 --> 00:44:33,739 entiendo, es poner debajo un cubo Collider, aquí debajo, para que cuando la bola caiga 510 00:44:33,739 --> 00:44:40,119 y toque ese cubo, reinicie el nivel. Si lo pones como East Collider, es decir, como viene 511 00:44:40,119 --> 00:44:45,340 por defecto, la bola cuando llega ahí abajo se queda ahí, suspendida, porque hay un límite 512 00:44:45,340 --> 00:44:47,159 Físicamente suspendiendo 513 00:44:47,159 --> 00:44:49,940 Si la opción, si lo que buscamos solo es 514 00:44:49,940 --> 00:44:51,739 Que desencadene, que se reinicie el nivel 515 00:44:51,739 --> 00:44:53,719 Se pondría Nice Trigger, ¿vale? 516 00:44:55,380 --> 00:44:56,719 Ese es el detalle 517 00:44:56,719 --> 00:44:58,300 Ahora vemos de todos modos 518 00:44:58,300 --> 00:44:59,420 Cómo se activan 519 00:44:59,420 --> 00:45:02,079 La función, por código lo que queremos 520 00:45:02,079 --> 00:45:04,179 Que suceda 521 00:45:04,179 --> 00:45:07,750 Al detectar 522 00:45:07,750 --> 00:45:08,809 Estas colisiones, ¿vale? 523 00:45:10,269 --> 00:45:11,909 Hasta aquí creo que me seguís, ¿no? 524 00:45:12,489 --> 00:45:13,690 Vale, y voy a llamarlo 525 00:45:13,690 --> 00:45:14,230 Ahora 526 00:45:14,230 --> 00:45:16,750 Disparador 527 00:45:16,750 --> 00:45:18,989 Bueno, no, disparador no 528 00:45:18,989 --> 00:45:24,440 Sucesos, collider, yo que sé 529 00:45:24,440 --> 00:45:26,420 Porque voy a enseñaros 530 00:45:26,420 --> 00:45:27,539 También viene el tema 531 00:45:27,539 --> 00:45:29,440 Que hay dos métodos 532 00:45:29,440 --> 00:45:31,679 Bueno, en realidad hay más, pero hay como dos métodos base 533 00:45:31,679 --> 00:45:34,139 Que sirven para trabajar con estas colisiones 534 00:45:34,139 --> 00:45:35,219 O con estos triggers 535 00:45:35,219 --> 00:45:37,099 Imaginaos 536 00:45:37,099 --> 00:45:39,019 Yo voy a generar un script 537 00:45:39,019 --> 00:45:40,920 Que se va a llamar 538 00:45:40,920 --> 00:45:42,139 Y lo hago aquí durante el tutorial 539 00:45:42,139 --> 00:45:43,500 Que se va a llamar 540 00:45:43,500 --> 00:45:46,820 Sucesos, también 541 00:45:46,820 --> 00:45:48,000 Collider, yo que sé 542 00:45:48,000 --> 00:45:56,940 que mata y lo voy a asociar a este cubo transparente visualmente pero que tiene este 543 00:45:56,940 --> 00:46:02,780 collider vale para que sucedan cosas abro este código y aquí está preparado para trabajar vale 544 00:46:03,760 --> 00:46:09,619 este es el objeto que yo quiero que capte lo que va a ocurrir también se podría poner a la bola lo 545 00:46:09,619 --> 00:46:14,920 que vamos a ir viendo pero hay que ir midiendo a quién se le pone según quién dispara que o 546 00:46:14,920 --> 00:46:17,079 O quién tiene ciertas acciones, ¿vale? 547 00:46:17,239 --> 00:46:19,019 Hay dos métodos, ¿vale? 548 00:46:19,039 --> 00:46:21,760 Y esto es importante con respecto a alguna de las tareas, 549 00:46:21,820 --> 00:46:23,159 no en general, pero de las tareas, 550 00:46:23,260 --> 00:46:28,159 que es que penséis siempre que estas llaves engloban, 551 00:46:28,199 --> 00:46:29,980 y hablábamos del encapsulamiento en su momento, 552 00:46:30,119 --> 00:46:32,260 engloban acciones que se dan en ciertos momentos 553 00:46:32,260 --> 00:46:34,619 o que recopilan acciones, ¿vale? 554 00:46:34,619 --> 00:46:35,960 Cuando creábamos un método, etcétera. 555 00:46:36,760 --> 00:46:39,119 Cuando vamos generando nuevas... 556 00:46:39,119 --> 00:46:43,840 Imaginaos que yo hago el método, voy a saltar o impacto, 557 00:46:43,840 --> 00:46:56,179 como en la tarea número 1, hay que tener bien en cuenta dónde lo declaramos, es decir, si lo declaramos dentro del update, realmente no se está llamando en ningún momento 558 00:46:56,179 --> 00:47:05,619 y se está ejecutando dentro del update, no es el punto, de hecho pone error, hay que hacerlo fuera de los tiempos de ejecución, que luego ya cada fotograma, 559 00:47:05,619 --> 00:47:11,760 Si lo metemos en el update, llamaremos a impacto y ahí buscará el método fuera de estas llaves. 560 00:47:12,119 --> 00:47:14,920 Es un método independiente que se llama impacto y hará lo que tenga que hacer. 561 00:47:15,699 --> 00:47:21,920 Lo mismo va a suceder con estos que voy a indicar ahora, que se declaran fuera de los tiempos de ejecución. 562 00:47:21,920 --> 00:47:25,639 Siempre dentro de la clase, pero como otro método aparte. 563 00:47:26,219 --> 00:47:34,519 Esos métodos son los onTrigger y vais a ver que luego tienen distintos apellidos, que son el enter, el exit, el stay. 564 00:47:34,519 --> 00:47:36,719 por ejemplo el enter voy a poner aquí 565 00:47:36,719 --> 00:47:38,519 y tiene muchas cosas 566 00:47:38,519 --> 00:47:40,659 mucha parafernalia ya escrita 567 00:47:40,659 --> 00:47:43,039 importante que esté esa parafernalia 568 00:47:43,039 --> 00:47:44,559 porque si no, no funciona bien, por tanto 569 00:47:44,559 --> 00:47:46,840 cuando pongáis un trigger, dadle 570 00:47:46,840 --> 00:47:48,579 a la que queráis, doble clic 571 00:47:48,579 --> 00:47:50,199 que se os crea ya ese método 572 00:47:50,199 --> 00:47:52,079 alguien ya lo ha creado por vosotros, ¿vale? 573 00:47:52,159 --> 00:47:54,840 alguna de estas librerías, bueno el MonoBehaviour 574 00:47:54,840 --> 00:47:55,780 está este 575 00:47:55,780 --> 00:48:00,679 este comportamiento de onTrigger 576 00:48:00,679 --> 00:48:03,019 ¿vale? y de hecho está en UnityEngine 577 00:48:03,019 --> 00:48:04,380 está dentro de esta biblioteca 578 00:48:04,380 --> 00:48:07,579 y por otro lado, lo pongo 579 00:48:07,579 --> 00:48:10,119 ahora vamos discriminando, están los onCollision 580 00:48:10,119 --> 00:48:11,480 que también tienen las mismas etiquetas 581 00:48:11,480 --> 00:48:12,960 enter, exit y stay 582 00:48:12,960 --> 00:48:16,219 la forma más rápida en este momento para asociarlo 583 00:48:16,219 --> 00:48:18,179 con que es esto de enter 584 00:48:18,179 --> 00:48:19,960 stay o exit es 585 00:48:19,960 --> 00:48:22,059 lo mismo que hablamos de cuando 586 00:48:22,059 --> 00:48:24,440 usábamos los input.getKey 587 00:48:24,440 --> 00:48:26,539 que estaba el getKeyDown, el getKeyUp 588 00:48:26,539 --> 00:48:27,699 o el getKeyAsecas 589 00:48:27,699 --> 00:48:30,219 que dependía de, en el momento en el que 590 00:48:30,219 --> 00:48:32,219 se pulsa, si se mantiene la tecla 591 00:48:32,219 --> 00:48:34,099 pulsada o si se suelta, y en ese 592 00:48:34,099 --> 00:48:39,539 momento es cuando se producía el efecto. Aquí es un poco igual. Nosotros, imaginaos 593 00:48:39,539 --> 00:48:43,940 que tengo el onTrigger, ¿vale? Porque esto es un trigger. Vamos a poder lanzar acciones 594 00:48:43,940 --> 00:48:50,679 según si un objeto, el que sea, ya veremos que luego, gracias a este parámetro, podremos 595 00:48:50,679 --> 00:48:55,659 incluso discriminar qué objeto lanza el trigger y qué objetos no, ¿vale? Pero vamos paso 596 00:48:55,659 --> 00:49:16,820 Cuando un objeto atraviesa, entra, mejor dicho, por eso es enter, este trigger, que es el que tiene este script, y por eso sucede, al tocarlo se activará o se hará lo que ponga aquí. 597 00:49:16,820 --> 00:49:46,440 Por ejemplo, si yo tuviera otro método aquí llamado impacto, lo pongo aquí, lo creo y le pongo el void pertinente y digo cuando un objeto, vamos a hacer la prueba inmediatamente de si esto funciona o no, si yo pongo que impacto, ahí está, preparado, aquí es como otro tiempo de ejecución, pero dependiente de, oye, esto ha entrado un elemento en el trigger. 598 00:49:46,820 --> 00:49:55,760 vale vamos a decirle que cuando entre por ejemplo esta bola en este en este cubo que tenemos aquí 599 00:49:55,760 --> 00:50:02,059 que es trigger que es de tipo trigger lo tenemos marcado si no fuera trigger estaríamos usando 600 00:50:02,059 --> 00:50:06,880 este otro vale son dos diferentes que se lance lo que pone el impacto y en impacto voy a poner 601 00:50:06,880 --> 00:50:13,820 un debate como siempre la forma más rápida de comprobar que sucede algo que es trigger activado 602 00:50:13,820 --> 00:50:23,000 activado vale lo guardo que sucederá vale que cuando este objeto detecte que le han entrado 603 00:50:23,000 --> 00:50:27,539 en su trigger pues va a ejecutar lo que hay dentro que en este caso nos lleva a que la 604 00:50:27,539 --> 00:50:34,380 consola muestre trigger en activado lo guardado le doy a play voy a poner la bolica un poco más 605 00:50:34,380 --> 00:50:41,920 arriba para que se vea que tarda un poco y que según entra en el trigger y una sola vez vale 606 00:50:41,920 --> 00:50:46,619 trigger activado. Esto imaginaos en la tarea 607 00:50:46,619 --> 00:50:50,179 de los obstáculos de la nave, que cuando la nave toque 608 00:50:50,179 --> 00:50:54,239 ese obstáculo, ya por código podríamos decir que la propia nave 609 00:50:54,239 --> 00:50:55,960 el propio 610 00:50:55,960 --> 00:51:02,780 pivote, el obstáculo, pues se destruya. En vez de hacerlo 611 00:51:02,780 --> 00:51:06,420 con esa condición de si sobrepasa 612 00:51:06,420 --> 00:51:10,500 tal profundidad, se desactive, etc. Ya se podría hacer directamente con el 613 00:51:10,500 --> 00:51:17,460 trigger y de hecho ahora en vez de aparte de que ponga debate log en impacto voy a hacer que se 614 00:51:17,460 --> 00:51:23,340 destruya a sí mismo vale cuando ponemos game object así con minúscula significa que estamos 615 00:51:23,340 --> 00:51:29,519 hablando del propio objeto que tiene este código vale vais a ver ahora que lo que va a conseguir 616 00:51:29,519 --> 00:51:36,840 es que cuando esta bola vale y veréis que en todo momento estaba atravesando la caja es un 617 00:51:36,840 --> 00:51:42,079 trigger recordad no hay límites físicos sirve para detectar que algo entra o permanece si 618 00:51:42,079 --> 00:51:48,059 sale state o sale si es el exit veis y no sé si os habéis fijado que lo que hace y fijaos en este 619 00:51:48,059 --> 00:51:52,920 que es el que tiene el script que dice destruyeme a mí si algo me entra en mi trigger al darle a 620 00:51:52,920 --> 00:52:00,659 play miraos fijaos que lo ha destruido el game object vale aquí ya es lo que queramos poner en 621 00:52:00,659 --> 00:52:12,440 en este interior, ya lo que vayamos sabiendo, ya vamos detectando acciones que se desencadenan 622 00:52:12,440 --> 00:52:15,619 con este evento. Voy a hacer otra cosa, voy a quitar esto del destroy que me servía de 623 00:52:15,619 --> 00:52:22,400 ejemplo, que en vez de poner onTriggerEnter, uso otro de los onTrigger que había, que 624 00:52:22,400 --> 00:52:28,739 es el onTriggerStay, es decir, stay de permanecer. Esto va a ser igual que cuando poníamos el 625 00:52:28,739 --> 00:52:37,599 getKey sin down o up, el onTriggerStay va a ir ejecutándose en cada fotograma que esté 626 00:52:37,599 --> 00:52:43,420 el objeto dentro, pues la orden, en un modo, una especie de update, pero relacionado con 627 00:52:43,420 --> 00:52:48,159 esto que estamos hablando hoy. Si yo aquí pongo stay, pues lo que vais a ver es que 628 00:52:48,159 --> 00:52:52,219 ahora impacto he puesto muestra este mensaje de trigger activado. Ahora en vez de solo 629 00:52:52,219 --> 00:52:53,679 mostrarlo cada vez 630 00:52:53,679 --> 00:52:55,599 y solo ese fotograma que se mete 631 00:52:55,599 --> 00:52:58,239 el otro elemento 632 00:52:58,239 --> 00:52:59,639 en ese 633 00:52:59,639 --> 00:53:02,019 GameObject, vais a ver 634 00:53:02,019 --> 00:53:03,840 que va a lanzar ese mensaje múltiples veces 635 00:53:03,840 --> 00:53:05,400 porque en todo rato 636 00:53:05,400 --> 00:53:08,500 que se esté 637 00:53:08,500 --> 00:53:10,659 ese elemento 638 00:53:10,659 --> 00:53:11,260 dentro 639 00:53:11,260 --> 00:53:14,280 de la caja, se va a seguir 640 00:53:14,280 --> 00:53:15,400 y aquí sigue contando 641 00:53:15,400 --> 00:53:17,579 lanzando ese mensaje 642 00:53:17,579 --> 00:53:19,760 si yo muevo la bola y la saco 643 00:53:19,760 --> 00:53:20,980 fijaos que ahora la he sacado 644 00:53:20,980 --> 00:53:24,320 en el momento en el que no está adentro, ya no se está lanzando, ¿vale? 645 00:53:24,400 --> 00:53:31,360 Fijaos que en cuanto vuelvo a entrar aquí, otra vez se activa, porque estamos dentro, un trigger state. 646 00:53:32,039 --> 00:53:37,739 Esto imaginaos que entráis en un área de un juego en el que cuando entras en una habitación 647 00:53:37,739 --> 00:53:42,719 tiene que haber un peligro y se activa una luz y el enemigo es más fiero, ¿vale? 648 00:53:43,119 --> 00:53:49,039 Pues se podría delimitar que haya un trigger, un collider, como East Trigger, dentro de esa área 649 00:53:49,039 --> 00:53:53,039 y que detecte que cuando entra tal personaje y esté dentro, pues está en ese modo alerta. 650 00:53:53,420 --> 00:53:58,079 Cuando sale, es decir, cuando ya no está dentro, pues se desactiva. 651 00:53:58,820 --> 00:54:02,420 Existe otro que es el exit, que es un poco lo mismo, ¿vale? 652 00:54:03,280 --> 00:54:07,000 Está ahí, es el tercero, que es cuando sale, ¿vale? 653 00:54:07,119 --> 00:54:11,039 No pone nada, a ver, vale, bueno, hay un problema aquí seguramente, 654 00:54:11,800 --> 00:54:14,739 que es que, y esto cuidado también porque es importante, 655 00:54:14,739 --> 00:54:23,800 que es que los triggers, atención, que si yo lo metiera aquí, pues básicamente está todo el rato tocando a otro elemento, ¿vale? 656 00:54:24,000 --> 00:54:29,900 Que estamos hablando todo el rato de la bola, pero si esto también tiene un collider, y por eso está lo de la matriz que os hablé antes, ¿vale? 657 00:54:30,800 --> 00:54:34,880 También entre otras herramientas, pues estaría todo el rato detectando algo. 658 00:54:34,880 --> 00:54:36,159 si yo 659 00:54:36,159 --> 00:54:40,280 vamos a ver 660 00:54:40,280 --> 00:54:42,980 si yo dejo la caja bien ajustadica 661 00:54:42,980 --> 00:54:44,079 para que no toque nada 662 00:54:44,079 --> 00:54:46,739 y pongo la bola que cuando entre 663 00:54:46,739 --> 00:54:50,929 vale, es que está detectando 664 00:54:50,929 --> 00:54:52,710 que sale en todo momento y de todos modos 665 00:54:52,710 --> 00:54:54,789 a ver, porque no está haciendo 666 00:54:54,789 --> 00:54:57,130 el comportamiento, vale, es que no había guardado 667 00:54:57,130 --> 00:54:58,989 que eso, tened en cuenta 668 00:54:58,989 --> 00:55:00,269 que hay muchos tipos de triggers 669 00:55:00,269 --> 00:55:03,050 que no solo es uno, hay que discriminarlo 670 00:55:03,050 --> 00:55:04,690 cuál sería, ahora, la bola 671 00:55:04,690 --> 00:55:06,989 no se lanza ningún mensaje 672 00:55:06,989 --> 00:55:08,829 hasta que la esfera sale 673 00:55:08,829 --> 00:55:27,070 Ha salido y trigger activado. Se ha lanzado el mensaje cuando ha salido la instrucción que estamos dando. Esos solo son triggers. Pensad que son, por ejemplo, ponerlo para cuando atravesamos una puerta que detecte que pasamos esa puerta o cualquier cosa. 674 00:55:27,070 --> 00:55:51,030 Gracias a los colliders podemos ir determinando áreas y dibujando áreas. ¿Qué sucede con el otro que tenemos por aquí? Que existe otro método, que también es versátil, que es este onCollision, que también la lógica no la voy a explicar porque es la misma, 675 00:55:51,030 --> 00:55:53,650 Enter, Stay o Exit 676 00:55:53,650 --> 00:55:55,769 Que es cuando choque con ese objeto 677 00:55:55,769 --> 00:55:57,730 Es decir, yo ahora mismo 678 00:55:57,730 --> 00:55:59,670 Vais a ver que la bola 679 00:55:59,670 --> 00:56:00,710 Se queda suspendida 680 00:56:00,710 --> 00:56:02,590 Bueno, espera, porque igual la he movido 681 00:56:02,590 --> 00:56:05,289 Vale, lo primero 682 00:56:05,289 --> 00:56:07,429 Es que para que suceda esto del 683 00:56:07,429 --> 00:56:08,849 On Collision, Enter 684 00:56:08,849 --> 00:56:10,670 Como hemos dicho 685 00:56:10,670 --> 00:56:13,329 No puede ser modo East Trigger 686 00:56:13,329 --> 00:56:15,489 ¿Vale? Son excluyentes 687 00:56:15,489 --> 00:56:17,389 ¿Vale? O puede ser o modo Collider 688 00:56:17,389 --> 00:56:19,250 Físico o modo East Trigger Disparador 689 00:56:19,250 --> 00:56:20,949 Si lo quito 690 00:56:21,030 --> 00:56:24,570 vais a ver que la bola ahora sí se queda suspendida, ¿vale? 691 00:56:25,510 --> 00:56:29,489 Lanzará un mensaje, y ahora mismo no lo hace porque nuevamente no ha guardado, 692 00:56:29,789 --> 00:56:34,590 pero si ponemos onCollisionEnter significa que en cuanto otro objeto colisione, 693 00:56:34,769 --> 00:56:38,030 no trigger, colisione, tiene que estar sin el trigger activado, 694 00:56:38,349 --> 00:56:41,309 colisione con este objeto, ese fotograma de contacto, el primero, 695 00:56:42,030 --> 00:56:44,289 se lanzará el mensaje, vais a ver que en cuanto choque, 696 00:56:44,289 --> 00:57:03,590 Plas. Bueno, pues Plas no. Esperad un segundo. OnCollisionEnter, impacto, trigger activado. ¿Por qué no lo hace? A ver, no he guardado y seguramente sea eso. En cuanto choque, trigger activado. ¿Vale? 697 00:57:03,590 --> 00:57:25,909 Bueno, pero veis que sigue manteniendo la lógica de contacto físico, ¿no? Si aquí en vez de decirle collision enter, digo on collision stay, es todo momento, digamos, que esté tocando, que estén contactando, colisionando los dos objetos, se lanzará el mensaje, ¿vale? 698 00:57:25,909 --> 00:57:50,630 Ya veis que en cuanto está ahí, aquí, trigger activado, por algún momento está dejando de detectarlo, en algún momento, ¿vale? Porque también tener en cuenta, y esto también es importante, a ver, tú, tú, vale, que aparte de que se pueden limitar los contactos, etc., cuando tienes geometrías irregulares, y una esfera en cierto modo lo es, 699 00:57:50,630 --> 00:57:54,110 Puede que haya momentos que se 700 00:57:54,110 --> 00:57:56,070 Digamos, se mueva por física 701 00:57:56,070 --> 00:57:57,829 Alguna de las geometrías 702 00:57:57,829 --> 00:57:59,670 De estos detectores y ya no esté rozando 703 00:57:59,670 --> 00:58:01,210 Pero bueno, veis que 704 00:58:01,210 --> 00:58:03,710 Va lanzando distintos mensajes 705 00:58:03,710 --> 00:58:05,730 Mientras nota que está colisionando 706 00:58:05,730 --> 00:58:08,050 Como las colisiones se entiende que se colisionan 707 00:58:08,050 --> 00:58:10,150 Chocan y no suelen quedarse pegados 708 00:58:10,150 --> 00:58:11,869 Pues no 709 00:58:11,869 --> 00:58:13,550 No funciona tan bien 710 00:58:13,550 --> 00:58:14,929 Pero también se podría hacer 711 00:58:14,929 --> 00:58:17,429 También es verdad que hay ocasiones 712 00:58:17,429 --> 00:58:18,429 Que la gravedad 713 00:58:18,429 --> 00:58:21,030 cuando choca en el rebote 714 00:58:21,030 --> 00:58:22,909 pues ya deja de estar como completamente 715 00:58:22,909 --> 00:58:24,510 alineado, pero bueno, la lógica es esa 716 00:58:24,510 --> 00:58:26,510 y el exit es 717 00:58:26,510 --> 00:58:28,789 lo mismo, pero cuando 718 00:58:28,789 --> 00:58:30,329 deja de colisionar, ¿de acuerdo? 719 00:58:31,050 --> 00:58:32,670 vais a ver que no se lanza mensaje 720 00:58:32,670 --> 00:58:37,000 hasta que lo mueva 721 00:58:37,000 --> 00:58:38,920 y se deja de colisionar, ¿vale? 722 00:58:39,000 --> 00:58:40,679 otro, muevo, ¿vale? 723 00:58:41,599 --> 00:58:42,420 lo veis, ¿no? 724 00:58:42,760 --> 00:58:45,500 esto ya abre, creo, un mundo de posibilidades 725 00:58:45,500 --> 00:58:48,659 ¿me seguís hasta aquí? 726 00:58:53,989 --> 00:58:54,190 vale 727 00:58:54,190 --> 00:59:10,690 Bueno, problemas, he contado cosas creo atractivas, problemas que tiene esto o conflictos que puede surgir. Si estamos usando estos colliders que se forman dentro del ámbito de la física, ¿vale? 728 00:59:10,690 --> 00:59:14,469 se puede hacer, pero existirán 729 00:59:14,469 --> 00:59:16,510 problemas si los objetos 730 00:59:16,510 --> 00:59:17,989 los movemos mediante el transform 731 00:59:17,989 --> 00:59:18,909 como sabemos ahora 732 00:59:18,909 --> 00:59:20,789 y queremos que 733 00:59:20,789 --> 00:59:23,929 también reaccionen a las leyes de la física 734 00:59:23,929 --> 00:59:25,409 y a los colliders, ¿esto qué significa? 735 00:59:25,769 --> 00:59:27,849 igual que hemos visto ese problema de que la bola 736 00:59:27,849 --> 00:59:30,130 se posa y en cierto momento deja de detectar 737 00:59:30,130 --> 00:59:31,349 ese contacto 738 00:59:31,349 --> 00:59:33,989 si yo la bola, aunque ahora lo estoy haciendo así 739 00:59:33,989 --> 00:59:35,570 a la brava con el transform, por tanto 740 00:59:35,570 --> 00:59:37,809 me desdigo un poco, puede haber problemas 741 00:59:37,809 --> 00:59:39,869 porque cuando movemos los objetos 742 00:59:39,869 --> 00:59:45,369 mediante el transform pueden no estar, ahora hay una inercia, por eso se está moviendo la bola, 743 00:59:45,570 --> 00:59:50,389 porque empuja y ha mantenido la inercia, ahí es donde el angular drag podría haber detenido la bola, 744 00:59:50,389 --> 00:59:55,389 esto ahora lo vemos, pero digamos que hay que discriminar los objetos que vamos a usar 745 00:59:55,389 --> 01:00:01,090 mediante lógicas de físicas y los que vamos a mover por lógicas de transform. 746 01:00:01,710 --> 01:00:06,409 Para que funcione lo más correctamente posible lo relacionado con las físicas, 747 01:00:06,409 --> 01:00:08,449 como son estas colisiones, lo suyo es 748 01:00:08,449 --> 01:00:10,309 usar métodos físicos 749 01:00:10,309 --> 01:00:12,289 también para aplicar fuerzas al RigidBody 750 01:00:12,289 --> 01:00:13,329 que se muevan los objetos 751 01:00:13,329 --> 01:00:14,449 ¿vale? 752 01:00:15,170 --> 01:00:19,929 como va a ser un poco 753 01:00:19,929 --> 01:00:21,730 largo que escriba todo el código 754 01:00:21,730 --> 01:00:23,690 os voy a enseñar, aquí tenía la otra esfera 755 01:00:23,690 --> 01:00:26,269 preparada, y la activo 756 01:00:26,269 --> 01:00:27,389 y ahí está 757 01:00:27,389 --> 01:00:30,329 ¿vale? ahí está, es muy parecida 758 01:00:30,329 --> 01:00:30,909 a la que teníamos 759 01:00:30,909 --> 01:00:33,690 y lo único, le he subido un poco la masa 760 01:00:33,690 --> 01:00:35,909 no es un trigger, porque no queremos 761 01:00:35,909 --> 01:00:40,449 Queremos que se comporte de manera física, ¿no? Es decir, que choque, ¿vale? 762 01:00:40,610 --> 01:00:44,929 Y he añadido un script que se llama PlayerManager, que os voy a enseñar ahora mismo, ¿vale? 763 01:00:45,590 --> 01:00:50,829 Este PlayerManager, y vais a ver que la lógica es muy parecida a lo que ya hemos visto en la tarea 2 764 01:00:50,829 --> 01:00:56,989 y a lo que hablamos en la última tarea, en la última tutoría, que es esto del GetComponent, 765 01:00:57,349 --> 01:01:01,989 esencial ahora mismo para poder afectar a este componente de RigidBody, 766 01:01:01,989 --> 01:01:09,469 porque recordad que menos el transform a todos los componentes que queramos acceder tendremos que llegar de alguna forma, ¿vale? 767 01:01:10,489 --> 01:01:20,289 Recordad que esto lo vimos el otro día, pero nada, este es el código, ¿vale? Habrá que hacer este GetComponent del RigidBody del objeto que tiene este script, ¿vale? 768 01:01:20,289 --> 01:01:23,969 fijaos, aquí están creados 769 01:01:23,969 --> 01:01:27,510 dos floats que básicamente en el update 770 01:01:27,510 --> 01:01:29,769 igual que hacéis el otro día, lo que hace es capturar 771 01:01:29,769 --> 01:01:34,150 dos axes que se llaman vertical bola y horizontal bola 772 01:01:34,150 --> 01:01:37,070 estos axes los he creado yo 773 01:01:37,070 --> 01:01:39,510 como ya hemos visto en la anterior tarea 774 01:01:39,510 --> 01:01:42,630 los project settings, input manager 775 01:01:42,630 --> 01:01:45,650 y ahí horizontal bola, horizontal terreno, vertical bola 776 01:01:45,650 --> 01:01:47,510 y vertical terreno, porque 777 01:01:47,510 --> 01:01:58,110 Lo pone en el enunciado, voy a hacer con el WASD y con la cruceta del teclado, que en unos niveles el WASD sea el que mueva la bola y en otros niveles sea la cruceta la que mueva el terreno. 778 01:01:58,570 --> 01:02:12,110 En el primero el terreno está fijo, no se mueve, no va a tener fuerza, pero en los otros dos, si miráis en lo que se pide, pues sí va a hacer que se incline la propia tabla. 779 01:02:12,110 --> 01:02:19,670 Entonces, bueno, lo primero es que para a la bola en este caso, que es la que tiene este script 780 01:02:19,670 --> 01:02:26,530 La que queremos es que mueva el RigidBody, importante porque de primera no es lo más intuitivo 781 01:02:26,530 --> 01:02:31,030 Y de hecho lo han hecho menos intuitivo en esta versión 2022 con respecto a anteriores 782 01:02:31,030 --> 01:02:36,269 Porque en anteriores, si usáis por ejemplo Unity 2020, que por cierto en el tema 6 probablemente 783 01:02:36,269 --> 01:02:40,510 Demos un pasito atrás en el software para simplificar explicaciones 784 01:02:40,510 --> 01:02:52,650 Pero bueno, veréis que los Rigid Bodies tienen un apartado abajo de info que te muestran como las inercias y las fuerzas de velocidad que tienen los elementos, las fuerzas que se le aplican al Rigid Body. 785 01:02:53,050 --> 01:03:00,190 Pero si hay un elemento, si hay un componente, perdonad, que gestiona las fuerzas y por eso hay que asociarlo a ello, es el Rigid Body. 786 01:03:00,190 --> 01:03:15,690 Por eso, lo que vamos a hacer es acceder, mediante este tipo de variable, recordad que aquí poníamos el nombre del componente que tuviera para guardarlo como variable y luego ya lo capturábamos para su uso. 787 01:03:15,690 --> 01:03:17,570 aquí lo vamos a capturar con RB 788 01:03:17,570 --> 01:03:19,090 por ejemplo, luego 789 01:03:19,090 --> 01:03:21,550 podremos acceder a 790 01:03:21,550 --> 01:03:23,570 propiedades de este componente RigidBody 791 01:03:23,570 --> 01:03:25,409 que no están directamente aquí 792 01:03:25,409 --> 01:03:27,650 recogidas, pero sí pertenecen a lo 793 01:03:27,650 --> 01:03:29,530 que está programado dentro de este componente 794 01:03:29,530 --> 01:03:31,789 ¿vale? que entre ellas son 795 01:03:31,789 --> 01:03:33,630 y está en el tema, el AddForce y el 796 01:03:33,630 --> 01:03:35,690 AddTorque, bueno aquí he usado una de cada 797 01:03:35,690 --> 01:03:37,829 para que esté el variado de cómo se usa 798 01:03:37,829 --> 01:03:39,730 pero al ser una bola, la fuerza 799 01:03:39,730 --> 01:03:41,750 sirve para lo mismo que 800 01:03:41,750 --> 01:03:43,550 la rotación, porque al final el rotar también 801 01:03:43,550 --> 01:03:45,550 al final se mueve, si fuera un cubo 802 01:03:45,550 --> 01:03:52,150 la fuerza se desplazaría al cubo y la rotación, a menos que le demos mucha, por las esquinas que tiene en los cantos, no giraría. 803 01:03:52,630 --> 01:03:58,329 Pero mirad que en esencia es lo mismo que hacía un holanave para moverlo, solo que estamos usando otros métodos. 804 01:03:59,650 --> 01:04:02,030 Y vamos a analizar esto un poquito más en detalle. 805 01:04:04,230 --> 01:04:12,969 Lo primero es, igual que el otro día en uno de los movimientos, el axi lo guardamos en una variable, eso es lo mismo, lo hacemos en el update. 806 01:04:12,969 --> 01:04:26,929 ¿Y por qué en el update? Porque vais a ver que ahora se está digregando en el update y el fix update. Fix update, así dicho rápido, el tiempo de ejecución que habría que usar para métodos que emplean físicas. 807 01:04:26,929 --> 01:04:56,190 A diferencia del update, que en cuanto puede va refrescando y generando más fotogramas para que sea lo más fluido el juego posible, el Fixed Update tiene un tiempo predeterminado, recordad que esto estaba en Edit, Project Settings y en el apartado de Time, que es este que está aquí, que va a decir cada 0,02 segundos, en este caso, va a ejecutar lo que haya dentro del Fixed Update, impepinablemente. 808 01:04:56,190 --> 01:04:59,050 si el ordenador no pudiera 809 01:04:59,050 --> 01:05:01,210 porque bueno, si lo ponemos 810 01:05:01,210 --> 01:05:02,909 muy bajito, pues por mucho que nos empeñemos 811 01:05:02,909 --> 01:05:04,309 el ordenador igual no tiene la capacidad 812 01:05:04,309 --> 01:05:07,349 hay un máximo, digamos, que podemos 813 01:05:07,349 --> 01:05:09,050 marcar antes de que de error 814 01:05:09,050 --> 01:05:11,190 o deje de ejecutarse, o surjan 815 01:05:11,190 --> 01:05:12,130 conflictos, ¿vale? 816 01:05:13,269 --> 01:05:15,010 por cierto, algunos ya habéis tocado el 817 01:05:15,010 --> 01:05:16,869 time.timescale, ¿vale? 818 01:05:16,869 --> 01:05:19,130 y básicamente lo que estaréis cambiando en ese caso es esto 819 01:05:19,130 --> 01:05:21,309 también podéis decir que todo el juego 820 01:05:21,309 --> 01:05:22,889 vaya al doble de velocidad o se detenga 821 01:05:22,889 --> 01:05:25,409 ¿vale? que esto se hablaba en el tema anterior 822 01:05:25,409 --> 01:05:35,550 Lo dicho, tiene un tiempo de ejecución fijo, ¿vale? Para que la física, los cálculos físicos que tienen sean estables, ¿vale? 823 01:05:35,550 --> 01:05:46,650 Ahí no es tanto que en cada fotograma vaya cambiando el valor de posición X, tal, tal, en cuanto pueda, sino que aquí tiene que haber cierta coherencia también para que sea estable con este tiempo, ¿no? 824 01:05:46,650 --> 01:06:05,809 Entonces, si os fijáis aquí, y esta lógica es la que también tenéis que ir integrando, es que en el update normalmente lo que vamos a querer es captar las interacciones, porque en cuanto pulsemos una tecla queremos que el sistema ya lo guarde en esa variable, y ya está guardado. 825 01:06:05,809 --> 01:06:11,730 en cuanto toquemos una tecla lo más rápido posible que pueda el ordenador, va a guardar en esta variable las variaciones de input que hagamos. 826 01:06:12,869 --> 01:06:22,210 Y aquí está, guardado como variable global. Y está aquí hasta que se lo pida en la próxima enteración física que haya este FixedUpdate. 827 01:06:23,329 --> 01:06:31,809 Por un lado tenemos la captura, lo que nos interesa que sea lo más rápido, y luego los comportamientos de RigidBody, de física, lo ponemos dentro del FixedUpdate. 828 01:06:31,809 --> 01:06:47,590 Este ejemplo simple es lo que se espera. Todo luego se puede buscar, que sea de otra forma, pero el comportamiento esperable o deseable para hacer inputs que muevan objetos con fuerza física sería así. 829 01:06:47,590 --> 01:06:59,429 capturar el input en el update y luego ejecutarlo en el fix update. Recordad, este addForce sale porque estamos entrando dentro de las propiedades, 830 01:06:59,429 --> 01:07:09,050 en este caso de los métodos que tiene el RigidBody ya programado. Entonces cuando ponemos este rb.addForce, como tantas otras ocasiones, 831 01:07:09,050 --> 01:07:27,250 Al empezar a escribir nos ponemos y nos dice qué argumentos espera dentro de estos paréntesis y cuando abrimos el paréntesis puede tener distintos, cuatro sobrecargas y aquí hay distintas formas de aplicar fuerza. 832 01:07:27,949 --> 01:07:31,349 Lo importante normalmente, y en este, aunque hay cuatro, en realidad son lo mismo, 833 01:07:31,769 --> 01:07:35,809 podemos pasarle un vector 3, igual que hacíamos en el Translate, por ejemplo. 834 01:07:36,730 --> 01:07:40,690 Luego, opcionalmente, es otra sobrecarga, podemos decirlo, el modo de fuerza, 835 01:07:40,849 --> 01:07:43,090 porque se puede añadir que las fuerzas sean más explosivas, 836 01:07:43,590 --> 01:07:47,630 que una sea como que coja, que lo sea con respecto a la masa, 837 01:07:48,130 --> 01:07:52,150 que ya tenga ahí, por ejemplo, al dar un salto, pues no sea una aceleración continua, 838 01:07:52,150 --> 01:07:56,250 sino que respete el peso que tiene ya el objeto, y por eso un salto, un impulso, 839 01:07:56,250 --> 01:08:08,650 pues sería un impulso como tal, ¿vale? Hay distintos, separado de comas, force modes, ¿vale? Y en vez de un vector 3, si queremos pasar también los distintos dimensiones de un vector 3, 840 01:08:08,730 --> 01:08:20,689 en realidad, pues también se puede, disgregando cada uno, ¿vale? Un poco como hacíamos con el translate, el transform translate. Y al añadir fuerza, ¿vale? ¿Qué es lo que vamos a hacer? 841 01:08:20,689 --> 01:08:38,189 Pues poner ese vector que marca la dirección, que normalmente para tener direcciones ya normalizadas, recordad que está este forward, este up, este backwards, este right, left, etc., que es este 0, 0, 1. 842 01:08:38,189 --> 01:08:40,289 mirad la descripción, atajo 843 01:08:40,289 --> 01:08:42,609 para escribir vector 3, 0, 0, 1 844 01:08:42,609 --> 01:08:44,010 ¿vale? yo aquí podría decir 845 01:08:44,010 --> 01:08:46,289 en vez de esto, esto ya lo hemos visto 846 01:08:46,289 --> 01:08:48,710 unas veces, pero está bien siempre recordarlo 847 01:08:48,710 --> 01:08:50,329 que ese vector forward 848 01:08:50,329 --> 01:08:51,989 sería lo mismo que hacer esto 849 01:08:51,989 --> 01:08:54,470 ¿vale? estábamos diciendo 850 01:08:54,470 --> 01:08:55,710 que la fuerza se añada 851 01:08:55,710 --> 01:08:58,489 en profundidad, es decir, 0 y 0 852 01:08:58,489 --> 01:08:59,970 no se añade ninguna fuerza, pero en z 853 01:08:59,970 --> 01:09:02,170 se añade 1, es decir, hacia el fondo 854 01:09:02,170 --> 01:09:04,010 ¿no? y luego, aparte 855 01:09:04,010 --> 01:09:06,510 este 1, esta fuerza 856 01:09:06,510 --> 01:09:08,149 que se está dando, será más 857 01:09:08,149 --> 01:09:15,189 o menos intensa dependiendo del axis. Si tenemos un teclado será muy intensa, porque es pulsar una tecla y pasa de 0 a 1 directamente, 858 01:09:15,670 --> 01:09:22,250 a no ser que cambiemos, si recordáis en el Input Manager, la gravedad, la sensibilidad, etc. ¿Os acordáis? 859 01:09:22,810 --> 01:09:30,689 Y aparte, con fuerza, que es otro parámetro que podemos nosotros ir ajustando, lo multiplicamos para ajustarlo por la fuerza que nos interese. 860 01:09:31,310 --> 01:09:37,369 Digamos que esto es lo que marca la dirección, esto es lo que marca la influencia del input, 861 01:09:37,710 --> 01:09:44,989 y luego hay un multiplicador siempre que hacemos para, oye, esta fuerza es baja, pues vamos a multiplicarla por más. 862 01:09:45,510 --> 01:09:48,329 En vez de poner aquí la fuerza se podría decir, vale, pues que esto sea 60. 863 01:09:49,210 --> 01:09:54,689 Pero bueno, es más fácil tener un valor independiente que además se puede usar a lo mejor en más elementos 864 01:09:54,689 --> 01:10:01,850 que también tengan necesidad de establecer una fuerza, y se pone así y ya multiplica este vector normalizado, ¿vale? 865 01:10:02,789 --> 01:10:10,770 Y el at-torque es un poco lo mismo. Es con respecto a ese eje y pone forward, ¿vale? Porque lo hace con respecto al eje. 866 01:10:11,310 --> 01:10:19,689 Por tanto, si yo, fijaos en el guismo general del mundo, si yo lo que quiero es que la bola rote a izquierda o a derecha, ¿vale? 867 01:10:19,689 --> 01:10:36,989 Lo que quiero es que rote con respecto al forward, ¿no? Que es la profundidad. Si rota en base a ese z, irá izquierda o derecha. Por eso, paradójicamente, este vector no es lo mismo en el add force que en el add torque. De hecho, están invertidos realmente, ¿vale? 868 01:10:36,989 --> 01:10:47,489 Y luego, bueno, este menos sirve para si la dirección del giro no va en la dirección que queremos, siempre lo podemos invertir, porque esto al final lo que hará es que ese 1 sea un menos 1 en el vector. 869 01:10:47,489 --> 01:11:07,989 ¿Sí? Básicamente ahora si yo guardo este código que lo tiene aplicada la esfera y voy al juego y voy aquí y clico en Game y doy adelante y atrás, fijaos que la bola ya empieza a tener ciertas inercias. 870 01:11:07,989 --> 01:11:09,750 se mueve de izquierda a derecha 871 01:11:09,750 --> 01:11:11,149 ¿vale? 872 01:11:11,810 --> 01:11:13,729 Importante, esto no sé si lo habréis notado ya 873 01:11:13,729 --> 01:11:14,609 pero 874 01:11:14,609 --> 01:11:17,529 para que las interacciones las capte 875 01:11:17,529 --> 01:11:19,229 tenéis que clicar en Game 876 01:11:19,229 --> 01:11:21,390 ¿vale? Aunque luego 877 01:11:21,390 --> 01:11:23,529 y estar en Game y dais a las interacciones 878 01:11:23,529 --> 01:11:25,670 yo al WASP ahora mismo, que es como está configurado 879 01:11:25,670 --> 01:11:27,649 ¿vale? Pero eso no quita que luego 880 01:11:27,649 --> 01:11:28,689 podáis seleccionar 881 01:11:28,689 --> 01:11:31,470 en el Scene y arrastrarlo 882 01:11:31,470 --> 01:11:33,569 ponerlo en otro sitio y clicar otra vez 883 01:11:33,569 --> 01:11:35,609 al Game y que vuelva a capturar 884 01:11:35,609 --> 01:11:37,189 las interacciones ¿vale? 885 01:11:37,189 --> 01:11:54,670 Si os fijáis, los he puesto públicos, o serializados, no lo sé, para que se vea la interacción, el axis, como estoy dando a las teclas, de 0 a 1 o de 0 a menos 1. Esos valores intermedios son la gravedad y la sensibilidad que hablamos el otro día. Y eso ya tiene influencia en cómo aplica fuerzas. 886 01:11:54,670 --> 01:11:58,229 Entonces, bueno, pues 887 01:11:58,229 --> 01:12:00,710 Este es el comportamiento para mover la bola 888 01:12:00,710 --> 01:12:02,130 Y en el siguiente 889 01:12:02,130 --> 01:12:03,189 Niveles 890 01:12:03,189 --> 01:12:05,569 Voy a los siguientes niveles 891 01:12:05,569 --> 01:12:06,869 Para 892 01:12:06,869 --> 01:12:10,250 Voy a una de las escenas que ya tengo guardado 893 01:12:10,250 --> 01:12:12,529 En este lo que voy a hacer es 894 01:12:12,529 --> 01:12:13,829 Con la otra cruceta 895 01:12:13,829 --> 01:12:15,350 Porque lo he configurado así 896 01:12:15,350 --> 01:12:17,210 En el input manager 897 01:12:17,210 --> 01:12:19,729 Se va a ir moviendo, no la bola 898 01:12:19,729 --> 01:12:21,149 Sino la 899 01:12:21,149 --> 01:12:23,890 Plataforma, es decir, ahora mismo 900 01:12:23,890 --> 01:12:28,909 La plataforma, la tengo aquí, es el que tiene este terreno move, el que mueve el terreno. 901 01:12:29,489 --> 01:12:38,609 Entonces, si me meto en ese objeto, en ese código, vais a ver que al final es un poco lo mismo. 902 01:12:38,949 --> 01:12:41,890 Tengo el moveH, el moveR, me meto en el... 903 01:12:43,289 --> 01:12:48,609 Bueno, recordad el otro día que podía hacer esto de GetComponent o arrastrar, si es serializado, 904 01:12:48,609 --> 01:12:54,510 y vais a ver, arrastrar el objeto para que coja el RigidBody de en sí mismo, en este caso, ¿vale? 905 01:12:54,510 --> 01:12:58,829 En realidad está cogiendo a sí mismo, ¿vale? Que es la otra forma de llegar a ello, ¿vale? 906 01:12:58,850 --> 01:13:06,050 Pues tengo esta fuerza, en el update cojo el axis, lo he configurado en este caso en vez de bola, se llama terreno, 907 01:13:06,510 --> 01:13:10,590 son otras teclas las que he indicado y añade un torque en este caso, ¿vale? 908 01:13:10,869 --> 01:13:15,569 Porque no quiero que sea una fuerza de desplazamiento, sino que gire con respecto al centro de su gravedad, ¿vale? 909 01:13:15,569 --> 01:13:24,109 Que es el centro de la tabla en sí, pues hacia derecha, hacia la izquierda, multiplicándose por los valores que esté capturando y por el valor de torque que hayamos establecido. 910 01:13:24,609 --> 01:13:31,489 Torque, que es igual que speed o fuerza o lo que queramos, una convención o una variable que creamos para multiplicar por ese valor. 911 01:13:31,489 --> 01:13:39,710 Que puede ser, pues si nos parece que está lento, pues subimos aquí, podemos 10 y se aplicará mayor torque a esta tabla, ¿vale? 912 01:13:39,710 --> 01:13:58,329 En realidad el código, ahora me preguntan cómo se cambia el color de fondo de la pantalla de game. Creo que eso lo pone en el enunciado, si no me equivoco. Os lo digo por si lo tenéis, por que lo sepáis. 913 01:13:58,329 --> 01:14:01,789 aquí, si quieres que el fondo 914 01:14:01,789 --> 01:14:03,850 de la escena sea un color plano puedes hacerlo seleccionando 915 01:14:03,850 --> 01:14:05,869 la cámara, en el inspector de la cámara 916 01:14:05,869 --> 01:14:07,689 indica en su opción clear flags que es 917 01:14:07,689 --> 01:14:09,909 un solid color y a continuación elige el color de fondo 918 01:14:09,909 --> 01:14:11,670 ¿vale? vamos a ser obedientes 919 01:14:11,670 --> 01:14:13,909 me voy al otro nivel para que partamos 920 01:14:13,909 --> 01:14:15,609 de lo que suele suceder 921 01:14:15,609 --> 01:14:17,390 y me dice si me meto en la cámara 922 01:14:17,390 --> 01:14:19,710 hay una opción que se llama clear flags 923 01:14:19,710 --> 01:14:21,670 solid color y yo aquí 924 01:14:21,670 --> 01:14:23,090 le digo que sea verde, ahí está 925 01:14:23,090 --> 01:14:24,930 ¿vale? lo pone en la tarea 926 01:14:24,930 --> 01:14:27,550 ¿vale? básicamente porque por defecto 927 01:14:27,550 --> 01:14:47,310 Ya veremos esto también en siguientes temas. Se crea un cielo, que también es manipulable, que son estos skybox. Si queremos que lo que no sea una geometría o un elemento físico o visual de nuestra escena, no se fabrique este cielo, este HDR de cielo, sino un color sólido. 928 01:14:47,310 --> 01:15:05,510 ¿Vale? Bien, hasta aquí me seguiré, ¿verdad? Vale, espero que sí. Siguientes cosas. Ya os digo, os estoy intentando desgranar todo, no voy a hablar de todo lo que pone en el enunciado, que es lo que os deje leer e intentar interpretar también. 929 01:15:05,510 --> 01:15:20,869 Vamos a ver alguna cosilla más sobre lo que me importa. Hay dos cosas que me importan y a las 7 y 10 como tarde tenemos que acabar porque Alejandro necesita dar otro módulo. 930 01:15:20,869 --> 01:15:53,220 A ver cómo lo jerarquizo, vale, vamos a hablar de cómo, vale, ya tengo la bola aquí, vale, y fijaos, bueno, la cámara, voy a ajustarla, aquí habría que hacer, si nos interesa un seguimiento de cámara, igual que hicimos el otro día, con la tarea me refiero y voy a hacer que aún así no se va a ir moviendo con la cámara, que eso se haría con un script que siga a la bola, por ejemplo, vale, 931 01:15:53,220 --> 01:15:57,680 O al tablero cuando gire a los otros niveles. Lo voy a dejar ahí para que se vea mejor. 932 01:15:58,579 --> 01:16:06,720 Vale, entonces muevo aquí la bola y voy al agujero y no sigue para adelante. 933 01:16:06,979 --> 01:16:09,880 ¿Por qué será? Alguien me lo sabría decir así rápido. 934 01:16:10,220 --> 01:16:15,020 Porque aunque voy para atrás y voy para adelante y ahí de pronto se queda anclado. 935 01:16:15,680 --> 01:16:17,359 ¿Por qué pensáis que es? Es un error. 936 01:16:17,359 --> 01:16:22,729 efectivamente, recordáis que 937 01:16:22,729 --> 01:16:24,789 teníamos un cubo aquí puesto 938 01:16:24,789 --> 01:16:26,569 que no es un trigger, si fuera un trigger 939 01:16:26,569 --> 01:16:28,649 si lo dejaría pasar, si ponemos 940 01:16:28,649 --> 01:16:30,750 un trigger en ese código, pues haría 941 01:16:30,750 --> 01:16:32,789 algo, ¿vale? de momento 942 01:16:32,789 --> 01:16:34,550 esto no lo quiero, de hecho 943 01:16:34,550 --> 01:16:36,449 me voy a cargar, bueno, no lo voy a cargar porque 944 01:16:36,449 --> 01:16:38,329 igual luego me sirve para explicar lo de la meta 945 01:16:38,329 --> 01:16:40,489 pero bueno, lo desconecto 946 01:16:40,489 --> 01:16:41,550 el collider y ahora ya sí 947 01:16:41,550 --> 01:16:44,529 seguimos, intento llegar al agujero 948 01:16:44,529 --> 01:16:45,529 al agujero, al agujero 949 01:16:45,529 --> 01:16:47,869 y me pongo ahí y 950 01:16:47,869 --> 01:16:49,510 anda, que no se mete 951 01:16:49,510 --> 01:17:01,949 Lo que habíamos hablado. Esto sucede porque tenemos puesto un Bosch Collider que está haciendo una forma básica de Collider. Por tanto, este Collider para este caso no sirve. 952 01:17:02,329 --> 01:17:11,970 Si hubiera creado esta plataforma por defecto con un cubo, no tendría ese agujero y tendría este Bosch Collider. Pero es que, claro, estamos buscando algo que es un poquito más complicado. 953 01:17:11,970 --> 01:17:32,550 Y el FBX que hemos metido de estos, cuando lo arrastramos, si clicamos, tampoco viene con este Mesh Collider. Hay que añadirlo, ¿vale? Importante. Son muchas las cosas que vamos viendo y voy saltando una a otra, pero espero que me vayáis siguiendo bien. 954 01:17:32,550 --> 01:17:52,890 Hay otra sección que lo pone en el enunciado sobre cuando importamos FBX dentro de Unity al dar al GameObject en general, esto que está si no desgregamos los elementos que hay dentro del FBX, hay varias secciones que ya iremos viendo que aquí hay tela para cortar. 955 01:17:52,890 --> 01:18:09,590 Pero hay una que nos interesa ahora mismo y está también hecha a propósito, que es el de las medidas de los objetos. Porque imaginaos, este objeto lo hemos hecho en Maya, lo hemos hecho en Blender, lo hemos hecho en otro software de modelado y imagino que también ya habréis tocado un poco de esto. 956 01:18:09,590 --> 01:18:17,569 pero cada software luego tiene sus propias convenciones de medidas, incluso cuáles son los ejes de dirección del guimón del mundo. 957 01:18:18,149 --> 01:18:24,109 Si habéis usado Blender, el X, Z e Y no están en las mismas direcciones que, por ejemplo, en Maya, ¿vale? 958 01:18:24,149 --> 01:18:29,909 Y la Z en Blender es, si no me equivoco, la vertical y Y es la horizontal. 959 01:18:30,409 --> 01:18:34,409 Entonces eso, según el software, pues puede generar bastantes conflictos, ¿vale? 960 01:18:34,409 --> 01:18:55,829 Igual pasa con las medidas. Si trabajáis en malla, y para eso está este parámetro de aquí, ¿vale? Esta casilla, solo vamos a tocar el inspector de los modelos FBX, ahora mismo solo vamos a tocar lo relacionado con el modelo, porque ni estamos rigueando, ni animando, ni ahora mismo usando materiales, ¿vale? Ya os digo, ya lo veremos. 961 01:18:55,829 --> 01:19:15,850 Si nos metemos en el modelo, lo primero que salen son dos parámetros muy interesantes. El primero, ya lo he cambiado, cuando lo metáis por defecto va a estar con el 1, de hecho, mirad, lo voy a meter igual que estaba, para que lo veáis in situ, y dame un segundillo que lo tengo por aquí, ¿vale? 962 01:19:15,850 --> 01:19:39,840 A ver, aquí, estos son los tres elementos, los voy a arrastrar a ver si me lo admite, otra vez, duplicados, los he duplicado, luego los voy a borrar, pero según meto un nuevo FBX va a venir con su escala de factor 1, es decir, el valor por defecto que tenga de ese modelo, de ese software, ¿vale? 963 01:19:39,840 --> 01:19:59,140 Y luego está el de conversión de unidades, y dice que un centímetro del archivo valga 0,01 metros de Unity, ¿vale? Porque no es lo mismo un software que dice que la unidad es un centímetro, que Unity, si recordáis, que el 1 en la escala, en Transform, cuando cambiamos, 1 significa un metro, ¿vale? 964 01:19:59,140 --> 01:20:01,479 Entonces, digamos que hay una variación de 100. 965 01:20:02,479 --> 01:20:09,359 Si meto aquí, por ejemplo, este collider, la geometría sin haberla adaptado, 966 01:20:09,420 --> 01:20:12,760 que es lo que he hecho yo para que mida lo mismo, vais a ver que es enana. 967 01:20:13,479 --> 01:20:15,819 Ahora mismo solo mide un metro. 968 01:20:16,239 --> 01:20:19,520 Recordad que esta cuadrícula es solo un metro y es esto lo que mide. 969 01:20:19,739 --> 01:20:23,140 Podríamos nosotros hacer la bola aún más pequeña y meterla ahí, etc. 970 01:20:23,479 --> 01:20:26,380 Pero hay algo importante y por lo que cuando modeléis, 971 01:20:26,380 --> 01:20:42,180 Si hacéis objetos para un videojuego, modeléis teniendo en cuenta las unidades reales de los objetos, que es que ahora estamos en el mundo de las físicas, y en las físicas influye el tamaño de los objetos, igual que influye también la iluminación, influye las partículas, ¿vale? 972 01:20:42,180 --> 01:21:05,020 Entonces, aunque aquí ahora intentemos hacer todo a medida, si esto mide solo un metro, esta tabla de madera sería el juego para un roedor, porque sería muy pequeña, ¿vale? Entonces, ¿qué es lo que habría que hacer? Hombre, podríamos hacer que la escala aumente y lo aumentamos y lo damos por 10, que es precisamente, creo, la conversión que he hecho, etc. 973 01:21:05,020 --> 01:21:26,939 El problema de tocar las escalas, aparte de que ya deja de estar normalizado en uno y estáis usando otros valores, que a veces ya es un fastidio, es que en ciertos momentos, cuando uséis animaciones basadas en rigs, con esqueletos, etc., tocar mucho lo que son las escalas, la escala en sí no suele tener problema, 974 01:21:26,939 --> 01:21:38,960 pero factores como la escala o las conversiones de unidades pueden traer conflictos de que se deformen esos rigs o nuevamente la influencia de los tamaños alteren lo esperable en esos rigs, ¿vale? 975 01:21:39,060 --> 01:21:48,960 Pero si, por ejemplo, venimos de un software que sabemos que tiene como unidad convencional el 1 basado en centímetros como magnitud en vez del 1 basado en metros como es Unity, 976 01:21:48,960 --> 01:21:54,939 Y solo al desmarcar esta casilla, lo que va a hacer es que va a haber una diferencia de 100 del tamaño. 977 01:21:56,119 --> 01:21:58,420 Esto significa que yo... 978 01:21:58,420 --> 01:21:58,760 Ah, perdón. 979 01:21:58,939 --> 01:22:03,600 Cuando hagáis cualquier cambio en una de estas pestañas, tenéis que bajar y darle a aplicar. 980 01:22:03,880 --> 01:22:04,279 Importante. 981 01:22:04,720 --> 01:22:08,399 Y veis que ahora, de pronto, ese elemento se ha hecho mucho más grande. 982 01:22:09,840 --> 01:22:10,380 ¿Por qué? 983 01:22:10,479 --> 01:22:11,460 Porque ha aumentado de tamaño. 984 01:22:11,460 --> 01:22:18,020 Ahora mide, si nos acercamos, vemos que cada cuadrícula, cada cuadradito de estos pequeños es un metro. 985 01:22:18,020 --> 01:22:22,800 ahora medirá del orden de 100 metros, lo cual probablemente también sea muy grande. 986 01:22:23,659 --> 01:22:28,279 Esto es un poco, cuando me entreguéis la tarea, bueno, yo voy a querer que funcione bien, 987 01:22:28,460 --> 01:22:33,380 que lo pongáis de 100 metros o de 1, bueno, va a influiros en los valores que vais a tener que dar, 988 01:22:33,420 --> 01:22:37,819 en la masa, en las fuerzas, etc. Pero podéis resolverla con distintos tamaños. 989 01:22:37,819 --> 01:22:45,699 Pero me interesa esto para que conozcáis que las medidas influyen en el resultado. 990 01:22:45,699 --> 01:23:02,119 Y luego, esto lo he hecho aquí ya, digamos, que 100 me parecía mucho, puedo hacer este factor de escala y cuando digo, este que estoy arrastrando aquí, a ver, este que tengo aquí, digo, se ha pasado mucho, digo, quiero que lo corrija por 0,1. 991 01:23:02,119 --> 01:23:17,199 Le doy a aplicar y lo hace del tamaño que era. Es decir, según he dado a la casilla y desmarcado, era 100 veces más grande de lo que venía por defecto cuando lo hemos visto que era como una tabla de roedor. 992 01:23:17,199 --> 01:23:32,000 Cuando he dicho eso, podemos reajustar con ese factor de escala esta conversión. Fijaos que la variación entre dar a esta casilla y desmarcarla es que pasa de 1 cm a 0,01 m, es decir, hay 100 unidades de diferencia. 993 01:23:32,119 --> 01:23:47,819 Por eso pasa de 1 a 100 y con esto pasaría a 10. Lo dicho, esto del Scale Factor solo lo usaría en caso de que no sea un elemento con armadura o que tenga animaciones en sí. 994 01:23:47,819 --> 01:23:54,220 En este caso, como todas las animaciones que vamos a hacer, es porque estamos influyendo nosotros en la malla por fuerzas, etc. 995 01:23:54,439 --> 01:24:00,979 Nos da un poco igual, pero en caso de que haya un esqueleto, como veremos, es mejor tocar la escala 996 01:24:00,979 --> 01:24:08,779 o lo preferible desde luego es tenerlo ya en las medidas que nos interesen desde el modelo 3D. 997 01:24:10,039 --> 01:24:15,899 Aunque imaginaos que jugáis al Super Mario, tenéis el modelo a una medida y de pronto queréis con ese esqueleto que sea más grande. 998 01:24:15,899 --> 01:24:26,680 Pues lo que haríamos es aumentar la escala, ¿vale? Pero, bueno, son situaciones diferentes y es sobre todo por evitar conflictos. Por poder se puede hacer todo, pero por evitar problemas que puedan surgir. 999 01:24:26,680 --> 01:24:43,760 A ver, un segundillo, si me habéis escrito algo. Vale, de momento espero que me sigáis, ¿vale? Y, bueno, me cargo esta plataforma y voy a ir para atrás para cargarme todas las que incluí, que no quiero tener aquí cosas duplicadas. 1000 01:24:43,760 --> 01:24:48,079 bueno, a ver si quiere 1001 01:24:48,079 --> 01:24:50,840 como he explicado tantas 1002 01:24:50,840 --> 01:24:52,699 a ver 1003 01:24:52,699 --> 01:24:54,460 fbx, nada 1004 01:24:54,460 --> 01:24:56,920 bueno, voy a ir al final porque al final 1005 01:24:56,920 --> 01:25:00,699 estoy dando a control z y control y, ¿vale? 1006 01:25:00,739 --> 01:25:02,539 para deshacer, bueno, me voy a cargar 1007 01:25:02,539 --> 01:25:04,479 estos que he añadido después 1008 01:25:04,479 --> 01:25:06,479 lo porro y me quedo con los que había importado, ¿vale? 1009 01:25:06,560 --> 01:25:07,640 que están ajustados 1010 01:25:07,640 --> 01:25:10,579 para que veáis, en todos quité esto de 1011 01:25:10,579 --> 01:25:12,600 convertir unidades y en este quería 1012 01:25:12,600 --> 01:25:14,600 que la tabla del nivel 2 fuera un poco más grande 1013 01:25:14,600 --> 01:25:17,539 pues le di un poquito más de Scale Factor. 1014 01:25:18,560 --> 01:25:20,000 Vale, bueno, y este me lo he cargado. 1015 01:25:20,319 --> 01:25:24,260 Vale, ¿qué tenemos que conseguir con y por qué? 1016 01:25:24,520 --> 01:25:26,979 Además en el terreno 1, en el 2 vais a ver que esto no sucede. 1017 01:25:27,260 --> 01:25:31,479 Lo que os había dicho de que tenemos por un lado el terreno 1 con la malla suavizada 1018 01:25:31,479 --> 01:25:37,260 para que se vean los bordes definidos, básicamente la que queremos usar a nivel visual 1019 01:25:37,260 --> 01:25:41,340 y luego tenemos la que tiene el Collider versión resumida, 1020 01:25:41,340 --> 01:25:57,560 Es decir, con pocos vértices para que no sobrecargue el ordenador o directamente el collider no funcione por esta sobrecarga o haga una reducción que considere y por tanto nos cargamos un poco el objetivo de intentar tener este agujero ahí accesible, ¿vale? 1021 01:25:57,560 --> 01:26:21,640 Vale, pues voy a borrar esta, ¿vale? Y empezamos. Digo, yo quiero que la malla, el GameObject de la malla, sea este que tengo aquí, y lo incluyo. Yo tengo aquí la malla, que ojo yo, además, como quiero que la profundidad en Z sea hacia donde va la bola, pues voy a coger y le voy a dar una rotación de 180, ¿vale? Para que esté en el horizonte el agujero y no aquí. 1022 01:26:22,279 --> 01:26:29,159 Simplemente por tener en cuenta que el horizonte, por convención, es hacia donde mira este Z. 1023 01:26:29,760 --> 01:26:35,399 ¿Qué sucede ahora? Si os fijáis, tenemos el GameObject, que trae el FB, que es como conjunto, 1024 01:26:35,579 --> 01:26:40,699 y luego lo que es el hijo, que es el GameObject que tenemos aquí. 1025 01:26:41,199 --> 01:26:45,420 Realmente, si os fijáis, este primero que tenemos aquí no sirve para nada, 1026 01:26:45,500 --> 01:26:47,619 excepto para ser cápsula de lo segundo. 1027 01:26:47,619 --> 01:27:06,720 Por tanto, yo podría coger, desempaquetar, me voy al padre, el prefab, desempaqueto y digo, ala, lo saco de hijo y fuera. Dejo el terreno 1 que es el que hace que se visualice porque tiene el mesh renderer con la geometría y la malla de visualización, el mesh filter. 1028 01:27:06,720 --> 01:27:08,699 pero a esto le falta otra cosa 1029 01:27:08,699 --> 01:27:10,539 le falta, porque si ahora doy play 1030 01:27:10,539 --> 01:27:12,659 como no hay ningún collider, nada que detenga 1031 01:27:12,659 --> 01:27:14,239 la bola, veis que se hunde y 1032 01:27:14,239 --> 01:27:15,399 cae para abajo 1033 01:27:15,399 --> 01:27:18,960 ¿qué es lo que voy a añadir? pues un collider 1034 01:27:18,960 --> 01:27:20,739 como hemos dicho un boss collider sería 1035 01:27:20,739 --> 01:27:22,140 lo más eficiente a nivel de cálculo 1036 01:27:22,140 --> 01:27:24,699 pero no nos va a permitir meter ese 1037 01:27:24,699 --> 01:27:26,619 agujero o lo que sea 1038 01:27:26,619 --> 01:27:28,920 que la forma que tenga una malla 1039 01:27:28,920 --> 01:27:30,140 ¿vale? si voy a 1040 01:27:30,140 --> 01:27:32,800 no, el collider no, ese es para ruedas 1041 01:27:32,800 --> 01:27:34,159 ese es aún más avanzado 1042 01:27:34,159 --> 01:27:37,560 Sería el mes de malla, mes collider, ahí está 1043 01:27:37,560 --> 01:27:41,260 Cuando son collider los iconitos vais a ver que son verdes 1044 01:27:41,260 --> 01:27:43,779 ¿Vale? ¿Y qué puedo hacer con eso? 1045 01:27:43,779 --> 01:27:48,819 Tiene un apartadito aquí de la malla que va a usar para hacer ese mes 1046 01:27:48,819 --> 01:27:53,279 Que es en la que podemos arrastrar esta que tenemos aquí reducida 1047 01:27:53,279 --> 01:27:55,100 Entonces yo puedo decir que este es el terreno 1048 01:27:55,100 --> 01:27:57,840 Y aquí cojo la malla, ¿vale? 1049 01:27:57,960 --> 01:28:00,020 No el GameObject en sí, sino la malla 1050 01:28:00,020 --> 01:28:08,600 Y además, fijaos, como siempre sucede, que aquí está pidiendo un iconito que se corresponde luego con los iconitos de lo que es compatible y lo que no. 1051 01:28:09,000 --> 01:28:16,119 Si yo arrastro esta malla, vais a ver que ahora tengo en un mismo objeto lo visual y el collider. 1052 01:28:16,340 --> 01:28:18,439 Y el collider es la versión simplificada que vimos. 1053 01:28:18,619 --> 01:28:26,159 Veis que tiene este agujero, pero no es el que tiene tanta geometría como este que teníamos aquí. 1054 01:28:27,100 --> 01:28:27,979 ¿Vale? Es este. 1055 01:28:27,979 --> 01:28:45,699 Vale, con esto ya hemos conseguido, pues, que la bola, este objetivo que teníamos de que cuando la bola llega al agujero, voy a coger el terreno para que veáis, vale, sí que se va a meter porque cabe en el agujero y lo está respetando. 1056 01:28:45,699 --> 01:29:05,060 Y ahí se ha quedado, ¿eh? Ahí está la bola, ahí se ha quedado. Ya podéis hacer un juego de golf, ¿vale? ¿Por qué no pasa más? Pues porque nuevamente ahí hay un límite de esta malla. Y ojo, esto nuevamente en el Mesh Collider puede venir, ahora vemos algo más, la opción de que permita ser trigger o no. 1057 01:29:05,060 --> 01:29:27,979 Como no queremos que atraviese ningún caso, esto nunca va a ser trigger, ¿vale? No lo marcamos. Pero ojo, el otro objetivo es lo que habíamos dicho, queremos que haya un detector aquí de que, ¿vale? Y veis que ya tengo aquí preparadito este cubo, que ahora mismo es muy grande, 0,1, 0,1, y voy a hacerlo pequeño, 0,1, 0,1, ¿vale? 1058 01:29:27,979 --> 01:29:44,859 Lo estoy haciendo con el propio Bosch Collider, los tamaños, etc. También, les hago un segundo, se puede hacer con la escala, ¿vale? Nuevamente, si se puede hacer algo con el propio componente, lo haría antes que con la escala, ¿vale? Y también se queda con ese tamaño. 1059 01:29:44,859 --> 01:29:46,460 Voy a activarlo para que esté 1060 01:29:46,460 --> 01:29:49,359 ¿Vale? Y entonces, bueno, voy a ponerlo 1061 01:29:49,359 --> 01:29:50,619 Como a mí me gusta, que es 1062 01:29:50,619 --> 01:29:53,079 Oye, pues si es un Boss Collider, en vez de cambiar 1063 01:29:53,079 --> 01:29:55,000 Toda la proporción del GameObject 1064 01:29:55,000 --> 01:29:56,619 Vamos a hacerlo con 1065 01:29:56,619 --> 01:29:59,399 Esta 1066 01:29:59,399 --> 01:30:02,359 Con las medidas del propio 1067 01:30:02,359 --> 01:30:04,960 Collider. Entonces, ojo, ahora lo que vamos a hacer 1068 01:30:04,960 --> 01:30:06,779 Es poner aquí, podría ser incluso más pequeño 1069 01:30:06,779 --> 01:30:08,600 Lo importante es que haya algún momento 1070 01:30:08,600 --> 01:30:10,159 Que la bola lo atraviese 1071 01:30:10,159 --> 01:30:12,579 No queremos que sea un impedimento 1072 01:30:12,579 --> 01:30:14,880 Y por eso va a ser un trigger 1073 01:30:14,880 --> 01:30:16,699 marcado ahí, ahora va a detectar 1074 01:30:16,699 --> 01:30:17,640 los onTriggers 1075 01:30:17,640 --> 01:30:20,520 y lo dejamos ahí para que en cuanto la bola 1076 01:30:20,520 --> 01:30:22,539 pase por ahí, pues diga 1077 01:30:22,539 --> 01:30:24,560 eh, cambia de nivel, o eh, lanza el mensaje 1078 01:30:24,560 --> 01:30:25,479 o eh, lo que sea 1079 01:30:25,479 --> 01:30:30,479 importante, y lo he 1080 01:30:30,479 --> 01:30:32,340 dejado caer antes, si esto 1081 01:30:32,340 --> 01:30:34,100 lo hiciéramos más grande 1082 01:30:34,100 --> 01:30:36,119 en plan, bueno, el cubo lo meto ahí 1083 01:30:36,119 --> 01:30:38,399 y que sea así de grande, ten en cuenta 1084 01:30:38,399 --> 01:30:40,159 que esto estaría en todo momento tocando 1085 01:30:40,159 --> 01:30:42,279 la malla del padre, ¿vale? 1086 01:30:42,520 --> 01:30:44,520 entonces hay que ajustarlo 1087 01:30:44,520 --> 01:30:50,159 bien de tamaño, a menos del momento que no estamos haciendo nada para discriminar, ¿vale? 1088 01:30:50,640 --> 01:30:56,659 Entonces, si no me equivoco y si no lo vuelvo a recrear, este trigger que tenemos aquí 1089 01:30:56,659 --> 01:31:02,600 preparado, cuando, vuelvo a poner aquí el código, cuando, ahora no es un on collision 1090 01:31:02,600 --> 01:31:07,020 sino que queremos usar el on trigger, ¿vale? Y el on trigger enter, solo una vez cuando 1091 01:31:07,020 --> 01:31:12,260 entre, ¿vale? Cuando entre en ese cubito, se lanza impacto que es trigger activado, 1092 01:31:12,260 --> 01:31:14,079 simplemente un mensaje de control 1093 01:31:14,079 --> 01:31:16,119 con debug log, ahora vamos a ver 1094 01:31:16,119 --> 01:31:17,539 que ya con esto 1095 01:31:17,539 --> 01:31:19,760 voy a jugar a la partida 1096 01:31:19,760 --> 01:31:22,039 aquí, fijaos que tengo 1097 01:31:22,039 --> 01:31:24,119 la escena preparada para ver como se mete ahí 1098 01:31:24,119 --> 01:31:26,380 pongo el sucesos collider 1099 01:31:26,380 --> 01:31:28,159 voy a game, empieza a mover 1100 01:31:28,159 --> 01:31:30,159 la pelota, se irá 1101 01:31:30,159 --> 01:31:32,060 acercando por esta parte, la vais a ver 1102 01:31:32,060 --> 01:31:34,319 le estoy dando fuerza 1103 01:31:34,319 --> 01:31:35,579 fuerza, paro ahí 1104 01:31:35,579 --> 01:31:37,680 voy a abrir la consola 1105 01:31:37,680 --> 01:31:39,560 para que veáis que en cuanto toque ese 1106 01:31:39,560 --> 01:31:40,420 trigger 1107 01:31:40,420 --> 01:31:44,119 trigger activado 1108 01:31:44,119 --> 01:31:46,420 aquí hemos puesto trigger activado 1109 01:31:46,420 --> 01:31:47,920 en este método que hemos creado de impacto 1110 01:31:47,920 --> 01:31:49,380 o meta o como lo llamemos 1111 01:31:49,380 --> 01:31:51,319 pero aquí podríamos decir 1112 01:31:51,319 --> 01:31:54,220 que explote el juego, que la tabla 1113 01:31:54,220 --> 01:31:56,279 cambie de color, que pasemos de nivel 1114 01:31:56,279 --> 01:31:58,359 que es lo que nos interesa, etc 1115 01:31:58,359 --> 01:32:00,159 lo mismo sucederá 1116 01:32:00,159 --> 01:32:02,180 si creamos otro trigger 1117 01:32:02,180 --> 01:32:04,340 como este, lo hacemos muy grande 1118 01:32:04,340 --> 01:32:05,539 y lo ponemos debajo 1119 01:32:05,539 --> 01:32:07,659 que cuando la bola se caiga por un lado 1120 01:32:07,659 --> 01:32:10,119 y toque ese trigger, también podemos decir 1121 01:32:10,119 --> 01:32:12,199 reinicia el nivel, destruyete 1122 01:32:12,199 --> 01:32:14,060 haz lo que sea, ¿vale? eso ya 1123 01:32:14,060 --> 01:32:15,659 sabemos crear entis 1124 01:32:15,659 --> 01:32:17,600 objetos con sus colliders y 1125 01:32:17,600 --> 01:32:20,020 que capte posiciones 1126 01:32:20,020 --> 01:32:21,880 o colisiones 1127 01:32:21,880 --> 01:32:23,899 de objetos que tocan con objetos 1128 01:32:23,899 --> 01:32:24,739 ¿vale? 1129 01:32:26,420 --> 01:32:27,380 ¿qué tal hasta aquí? 1130 01:32:29,560 --> 01:32:30,079 dame 1131 01:32:30,079 --> 01:32:31,859 10 segundos que hablo mucho 1132 01:32:31,859 --> 01:32:34,039 y me hago bien 1133 01:32:34,039 --> 01:32:34,840 vamos, me quedo sin aire 1134 01:32:34,840 --> 01:32:44,579 ¿qué tal hasta aquí? ¿bien? 1135 01:32:45,100 --> 01:32:46,779 bueno, no sé si no me contestáis 1136 01:32:46,779 --> 01:32:49,220 en otro lado, denso pero bien 1137 01:32:49,220 --> 01:32:50,920 vale, lo que me importa es que lo entendáis 1138 01:32:50,920 --> 01:32:52,460 y luego poco a poco 1139 01:32:52,460 --> 01:32:54,239 os pongáis a irlo haciendo 1140 01:32:54,239 --> 01:32:57,000 el aprendizaje es ese 1141 01:32:57,000 --> 01:32:58,680 no hay otra forma, por mucho que os hable 1142 01:32:58,680 --> 01:33:00,060 hasta que no os pongáis a hacerlo vosotros 1143 01:33:00,060 --> 01:33:02,039 y me da un poco de rabia 1144 01:33:02,039 --> 01:33:04,479 casi, bueno, como explicación está bien 1145 01:33:04,479 --> 01:33:07,060 pero me da un poco de rabia que no lo intentéis hacer de primeras 1146 01:33:07,060 --> 01:33:08,399 leyendo el enunciado 1147 01:33:08,399 --> 01:33:09,920 porque ahí es cuando más os vais a pegar 1148 01:33:09,920 --> 01:33:11,760 mejor que si estáis siguiendo el paso a paso 1149 01:33:11,760 --> 01:33:13,479 que estoy un poco haciendo ahora 1150 01:33:13,479 --> 01:33:15,760 pero bueno, hay que hacer un mix de todo 1151 01:33:15,760 --> 01:33:27,039 Bueno, entiendo que lo importante y lo que me importa es que estéis entendiendo, más que que me estéis copiando para entregar la tarea y listo, ¿vale? Bueno, vamos a ello. 1152 01:33:27,039 --> 01:33:44,319 Voy a hablar de algo que se profundiza más en la unidad 4, pero que está esbozado aquí en el enunciado de la tarea 3, que es lo de cambiar de nivel. 1153 01:33:44,319 --> 01:33:55,600 Voy a decir que ese onTrigger que ya está en el cubillo este que he puesto dentro del agujero, pues que sirva para cambiar de nivel. 1154 01:33:56,159 --> 01:33:58,659 Simplemente cambia el nombre, ahora lo importante es lo que hay adentro. 1155 01:33:58,739 --> 01:34:03,779 Como no va a ser un collisionEnter me lo cargo porque quiero que sea en base a onTrigger y aquí estoy haciendo esto. 1156 01:34:04,359 --> 01:34:06,840 Importante, importantísimo, porque no es solo para este momento. 1157 01:34:06,840 --> 01:34:32,100 Muchas veces hay operaciones, funciones, propiedades que tienen que ver de librerías o de capacidades que no hemos incluido en este script. Y esta va a ser una. Cuando hagamos gestión de escenas, es decir, para poder cambiar entre niveles, para ir navegando o activando distintos niveles o escenas, mejor dicho, yo identifico mucho escenas con niveles, pero son escenas en sí, 1158 01:34:32,100 --> 01:34:55,659 Hay que cargar otra librería que es UnityEngine.SceneManagement. Así se llama. Hay que aprendérselo. Habrá otros que iremos viendo que son importantes. Esto es esencial porque si no de pronto os ponéis a escribir, ponéis cosas que luego no existen. 1159 01:34:55,659 --> 01:35:01,699 Me voy a abrir yo aquí mi chuletilla un segundo para ir más rápido y no tener que pensar tanto. 1160 01:35:02,659 --> 01:35:04,140 Y si eso ahora lo enseño. 1161 01:35:04,699 --> 01:35:06,859 Pero prefiero explicaros primero un par de cosas. 1162 01:35:07,359 --> 01:35:13,720 Cuando incluimos esta línea de código va a haber una clase importante que es esta que se llama SceneManager. 1163 01:35:14,500 --> 01:35:21,340 Que existe aquí para poner bastantes cosas, bastantes métodos. 1164 01:35:21,439 --> 01:35:22,920 Uno de ellos es el de cargar escena. 1165 01:35:22,920 --> 01:35:45,619 Vale, y aquí vamos a poner 1. Bueno, veis que no da fallo, ¿vale? Si yo esta línea no la hubiera incorporado, da fallo, ¿vale? Por eso es importante esto de las librerías. Cuando vayamos a hacer algo de gestión de escenas, significa que habrá que usar, habrá que incluir en este script la librería relacionada con el Scene Management, ¿vale? 1166 01:35:45,619 --> 01:35:49,439 ¿Cómo hacemos esto de la gestión de escenas? 1167 01:35:49,600 --> 01:35:51,859 Hay, volveremos también en el futuro 1168 01:35:51,859 --> 01:35:53,260 Un menú esencial 1169 01:35:53,260 --> 01:35:54,760 Para cuando acabemos el juego 1170 01:35:54,760 --> 01:35:57,760 Y poder compilarlo, es decir, sacar el ejecutable del juego 1171 01:35:57,760 --> 01:35:59,260 Que es este file 1172 01:35:59,260 --> 01:36:01,100 Aquí 1173 01:36:01,100 --> 01:36:02,279 Build settings, ¿vale? 1174 01:36:03,220 --> 01:36:05,119 Si nos metemos en esta opción 1175 01:36:05,119 --> 01:36:06,539 Nos abre otra ventanita 1176 01:36:06,539 --> 01:36:09,159 Que, ya os digo, esto es más avanzada 1177 01:36:09,159 --> 01:36:11,399 Lo veremos sobre todo en el último tema 1178 01:36:11,399 --> 01:36:12,680 Ciertas cosas de aquí 1179 01:36:12,680 --> 01:36:14,699 Podremos sacar nuestro juego para 1180 01:36:14,699 --> 01:36:30,640 Para ordenador, para Android, para web, para PlayStation 4, varias plataformas. Eso nos hará, tendremos que ir configurando historias, pero lo importante es que todos los niveles que vaya a tener nuestro juego hay que incluirlos en este build de escenas. 1181 01:36:30,640 --> 01:36:45,920 Y cuando decimos build escenas es de un proyecto. Yo ahora, si os fijáis, estoy creando aquí más escenas, pero el proyecto solo va a tener un gestor de build settings, así, digamos, hecho por defecto a través de un menú. 1182 01:36:45,920 --> 01:37:09,420 Entonces aquí lo que tendremos que ir haciendo es ir arrastrando las distintas escenas que va a tener nuestro juego. Podemos añadir, cambiar de orden y aquí a la derecha veréis también que tenemos nivel 1, nivel 2, nivel 3, nivel 4, son estas cuatro y al irlas incluyendo tendrán un índice que empezarán, ya hablamos de esto también cuando hablamos de los arrays, empezarán por el número 0. 1183 01:37:09,420 --> 01:37:23,359 La primera escena que, al menos que estipulemos algo diferente, la primera escena que se ejecutará cuando lancemos el juego será esta del índice 0, que se llama level 1, pero en realidad esto de level 1 es porque aquí lo hemos llamado level 1. 1184 01:37:23,359 --> 01:37:42,319 Si esto se llamara como tutoría, aquí cuando la arrastro y la pongo aquí la primerita, pues es tutoría. Esto de Level 1 es la convención que yo he usado. Para que el Scene Manager pueda usar o pueda llamar a distintos niveles, tienen que estar incluidos en este Scenes en Build. 1185 01:37:42,319 --> 01:37:45,439 aquí cuando demos estos botones será cuando creemos 1186 01:37:45,439 --> 01:37:47,140 es ejecutable, pero de momento 1187 01:37:47,140 --> 01:37:48,659 solo nos interesa esta sección 1188 01:37:48,659 --> 01:37:51,380 para incluir los niveles que vamos a ir usando 1189 01:37:51,380 --> 01:37:53,659 ¿vale? ahí están preparados 1190 01:37:53,659 --> 01:37:55,119 lo he puesto en orden 1191 01:37:55,119 --> 01:37:57,180 con los índices, pero vamos a ver que eso tampoco 1192 01:37:57,180 --> 01:37:59,420 es muy importante, más allá del primero 1193 01:37:59,420 --> 01:38:00,859 que es el que arranca el juego 1194 01:38:00,859 --> 01:38:02,859 ¿vale? entonces 1195 01:38:02,859 --> 01:38:05,199 yo estoy en el nivel 1 y le doy a play 1196 01:38:05,199 --> 01:38:07,039 bueno, o tutoría 1197 01:38:07,039 --> 01:38:09,500 ¿vale? y cuando acabe tutoría 1198 01:38:09,500 --> 01:38:10,699 quiero ir a level 2 1199 01:38:10,699 --> 01:38:34,840 Para eso, lo que podemos hacer es que cuando suceda cierta cosa, vamos a usar el SceneManager y su método LoadScene para decirle aquí cuál es el número de índice de la escena a la que tiene que ir cuando llegue ese punto. 1200 01:38:34,840 --> 01:38:54,920 ¿Vale? Si yo quiero ir al nivel 2, realmente tendré que darle el índice 1, ¿no? ¿Vale? Pues vamos a mi nivel, que es este, y vamos a ir a sucesos collider, que es el objeto que cuando, vuelvo a abrirlo aquí, sucesos collider, ¿por qué no me lo abres? ¿Dónde lo tengo? Tengo ya aquí un montón de cosas. 1201 01:38:54,920 --> 01:39:00,640 aquí. Cuando el sucesos collider detecte ese trigger, llega aquí y dice, vale, estoy 1202 01:39:00,640 --> 01:39:04,760 a tu disposición. ¿Qué hago cuando entra esa bola? Pues vamos a decir que el scene 1203 01:39:04,760 --> 01:39:14,159 manager, igual, manager, load scene, cargue la escena de índice 1, ¿vale? Porque sabemos 1204 01:39:14,159 --> 01:39:22,409 que esta es la escena a la que queremos ir. Entonces, ya de una forma muy rápida, me 1205 01:39:22,409 --> 01:39:30,710 vuelvo a poner para que veamos cómo llega la bola, me muevo, me muevo, me muevo y ta ta ta ta ta ta ta y 1206 01:39:30,710 --> 01:39:36,989 cuando se meta, ala, ya hemos pasado al nivel 2 y ahora estoy, fijaos aquí, en el nivel 2 y ya pues 1207 01:39:36,989 --> 01:39:43,890 tengo el juego del nivel 2, es este de que muevo la plataforma y la bola gira en base, vamos, se adquiere 1208 01:39:43,890 --> 01:39:50,390 la inercia en base a él, ¿vale? Esta es la forma rápida para esta tarea de ir incorporando, no dejan 1209 01:39:50,390 --> 01:39:54,390 de ser números, lo que ponemos aquí, esta forma de cargar 1210 01:39:54,390 --> 01:39:58,449 la escena, las hay más, ya veremos algunas, pero yo aquí puedo decir que esto sea un int 1211 01:39:58,449 --> 01:40:02,210 son números enteros, que se llame númeroNivel 1212 01:40:02,210 --> 01:40:06,210 ¿vale? Creo aquí una variable y es la que uso aquí 1213 01:40:06,210 --> 01:40:12,199 númeroNivel, ¿vale? Entonces 1214 01:40:12,199 --> 01:40:16,340 yo por ejemplo esto puedo hacerlo serializado 1215 01:40:16,340 --> 01:40:22,800 o público y decirle, guardo, voy y decirle 1216 01:40:22,800 --> 01:40:32,340 Aquí, en el propio inspector, que el número del nivel al que vaya sea el 4 o al 3, 4 creo que no había, o al 0, y cargará el primero que había en el build settings. 1217 01:40:32,680 --> 01:40:37,039 ¿Vale? Y entonces de esa forma podemos decir hacia qué nivel tiene que ir. 1218 01:40:37,140 --> 01:40:41,760 Y ha cargado el nivel 1, que es el mismo, pero el otro que tenía preparado, ¿vale? A cambio de escena. 1219 01:40:41,760 --> 01:40:58,000 Esta es la forma rápida, porque, y os voy a abrir el que yo tengo preparado en esta que hay aquí, bastante más avanzada, es la que tengo en el nivel que yo ya tenía creado para que detecte que la bola ha llegado al trigger de la meta. 1220 01:40:58,000 --> 01:41:21,479 Aquí lo que hacemos, bueno, es un poquillo diferente, pero es básicamente que si, bueno, he creado un número que es la escena para ir, que es lo mismo que os acabo de decir, pero he hecho otra cosa que es poner en empleo la variable que se genera como argumento del onTrigger o del onCollision. 1221 01:41:21,479 --> 01:41:24,579 ¿qué significa esto? y la forma rápida de entenderlo es esto 1222 01:41:24,579 --> 01:41:26,680 si voy a un collision me pasará lo mismo 1223 01:41:26,680 --> 01:41:28,979 solo que en vez de poner other pone collision 1224 01:41:28,979 --> 01:41:31,039 pero tenemos que entender que esta variable 1225 01:41:31,039 --> 01:41:33,180 si luego en el interior de este método 1226 01:41:33,180 --> 01:41:36,039 la nombramos, la apelamos a ella 1227 01:41:36,039 --> 01:41:39,380 estamos accediendo a información 1228 01:41:39,380 --> 01:41:43,239 del objeto que está colisionando contigo 1229 01:41:43,239 --> 01:41:44,600 o está metiéndose en tu trigger 1230 01:41:44,600 --> 01:41:45,920 es decir, con el otro 1231 01:41:45,920 --> 01:41:48,279 si este es el cubo que detecta la meta 1232 01:41:48,279 --> 01:41:50,920 gracias a este other vamos a poder decir 1233 01:41:50,920 --> 01:41:57,100 oye, pero el otro objeto se llama de tal forma o no, porque si no, con este if no pasa esto. 1234 01:42:00,619 --> 01:42:09,600 Cada vez que yo ponga other, aquí dentro, other, y pongo punto, van a salir propiedades que se pueden usar, 1235 01:42:09,720 --> 01:42:15,619 como por ejemplo el nombre de ese otro objeto, el tag, que son etiquetas que vamos a poder, 1236 01:42:15,619 --> 01:42:20,859 esto también lo veremos en el tema 5, el tag que podemos ir añadiendo para ir discriminando. 1237 01:42:20,920 --> 01:42:33,460 Lo que he dicho antes, si ponemos un cubo que está tocando en todo momento el collider de la tabla, en todo momento está el trigger lanzándose o hay un momento ya que se ha lanzado. Pero gracias a esto podemos ir discriminando. 1238 01:42:33,460 --> 01:42:50,039 Oye, si el nombre del GameObject del otro, del que está tocando, el nombre es bola, ¿vale? Hay que meterlo como string y efectivamente en el nivel que tengo aquí tengo este objeto que es bola, que es la bola, ¿vale? 1239 01:42:50,039 --> 01:42:53,060 si es ese objeto que se llama bola 1240 01:42:53,060 --> 01:42:54,039 el que me está tocando 1241 01:42:54,039 --> 01:42:56,899 pues hago este cambio de escena 1242 01:42:56,899 --> 01:42:58,460 vale 1243 01:42:58,460 --> 01:43:01,140 si se llama cualquier otra 1244 01:43:01,140 --> 01:43:03,000 cosa de la jerarquía, si es cualquier otro 1245 01:43:03,000 --> 01:43:04,199 del objeto que está tocando 1246 01:43:04,199 --> 01:43:06,680 pues no, se está activando, así que se están 1247 01:43:06,680 --> 01:43:09,020 digamos confluyendo, que hasta que no hay 1248 01:43:09,020 --> 01:43:09,939 esta entrada en el trigger 1249 01:43:09,939 --> 01:43:12,880 no se ejecuta lo de dentro, pero es que aunque haya 1250 01:43:12,880 --> 01:43:14,859 algo que lo toque, podemos discriminar 1251 01:43:14,859 --> 01:43:16,760 qué es eso que toca, vale 1252 01:43:16,760 --> 01:43:17,640 y fijaos que aquí 1253 01:43:17,640 --> 01:43:20,439 tengo otro que si el 1254 01:43:20,439 --> 01:43:21,619 game object 1255 01:43:21,619 --> 01:43:24,600 bueno, esto no es dentro 1256 01:43:24,600 --> 01:43:26,840 de un trigger, pero si el propio objeto 1257 01:43:26,840 --> 01:43:28,399 vale, que tengo 1258 01:43:28,399 --> 01:43:30,800 que tiene el script, se llama precipicio 1259 01:43:30,800 --> 01:43:32,239 vale, carga 1260 01:43:32,239 --> 01:43:34,520 el nivel, bueno, esto es 1261 01:43:34,520 --> 01:43:36,239 un poco más avanzado, con lo que 1262 01:43:36,239 --> 01:43:37,600 tenemos aquí ya se puede 1263 01:43:37,600 --> 01:43:40,500 realizar la tarea, vale, pero 1264 01:43:40,500 --> 01:43:42,319 fijaos que hay otra forma aquí 1265 01:43:42,319 --> 01:43:43,840 ya os lo cuento, de 1266 01:43:43,840 --> 01:43:46,460 digamos, saber cuál es la escena 1267 01:43:46,460 --> 01:43:55,720 a la que queremos ir, es decir, qué variable, qué contenido damos a este sin2o, que es si el objeto que tengo aquí se llama precipicio, 1268 01:43:56,159 --> 01:44:02,960 al empezar el script, si el objeto que tiene este código se llama precipicio, aquí no estamos hablando de ningún other, 1269 01:44:02,960 --> 01:44:10,399 sino del propio objeto que tiene el script, se llama precipicio, y efectivamente, si voy a este nivel, hay un elemento que se llama precipicio, 1270 01:44:10,399 --> 01:44:12,000 que casualidad de la vida 1271 01:44:12,000 --> 01:44:14,000 es ese que os he dicho que se pone abajo 1272 01:44:14,000 --> 01:44:15,579 para que detecte que se cae la bola 1273 01:44:15,579 --> 01:44:17,520 y tiene ese collider que es un trigger 1274 01:44:17,520 --> 01:44:18,779 para que siga cayendo 1275 01:44:18,779 --> 01:44:21,520 y detecte que hemos perdido la partida 1276 01:44:21,520 --> 01:44:23,460 básicamente, si este objeto 1277 01:44:23,460 --> 01:44:24,960 que tiene este script 1278 01:44:24,960 --> 01:44:27,439 que se llama precipicio 1279 01:44:27,439 --> 01:44:29,579 si se llama así este objeto 1280 01:44:29,579 --> 01:44:30,779 lo que tiene que hacer es 1281 01:44:30,779 --> 01:44:32,420 en la escena 1282 01:44:32,420 --> 01:44:35,899 guardame, y es otro de las propiedades 1283 01:44:35,899 --> 01:44:37,680 otro de los métodos que tiene el scene manager 1284 01:44:37,680 --> 01:44:39,260 que es, consigue 1285 01:44:39,260 --> 01:44:46,800 el número de índex de la escena activa, es decir, guarda en el scene to go, mira y dice en qué nivel estoy ahora mismo, 1286 01:44:47,420 --> 01:44:53,859 y dice en el nivel cuyo índex de los build settings es 1, pues ya tienes este 1 preparado para que sea este el número. 1287 01:44:55,000 --> 01:45:01,779 Esto es relevante porque nosotros podemos estar definiendo un número al que ir, pero de esta forma automáticamente, 1288 01:45:02,300 --> 01:45:08,020 a lo mejor lo que podemos, si tenemos bien ordenados en el build settings los distintos niveles, es al arrancar el nivel, 1289 01:45:08,020 --> 01:45:09,920 coge en qué nivel estoy 1290 01:45:09,920 --> 01:45:11,819 ahora mismo, ¿no? GetActiveScene, 1291 01:45:11,880 --> 01:45:13,619 es decir, la escena en la que me encuentro ahora mismo. 1292 01:45:13,819 --> 01:45:16,020 Y cógeme el número. Y digo, cuando 1293 01:45:16,020 --> 01:45:17,939 llegue a cierto punto, la que quiero que 1294 01:45:17,939 --> 01:45:19,720 me cargue es ese 1295 01:45:19,720 --> 01:45:21,979 build index, pero no que se 1296 01:45:21,979 --> 01:45:23,899 recargue a sí misma la escena, que es lo que estaría 1297 01:45:23,899 --> 01:45:26,079 haciendo en este momento, sino que si le ponemos 1298 01:45:26,079 --> 01:45:28,000 más uno, para pasar de 1299 01:45:28,000 --> 01:45:30,000 nivel, cuando la bola toque la meta, pues es 1300 01:45:30,000 --> 01:45:31,100 que va al siguiente nivel. 1301 01:45:32,119 --> 01:45:34,060 ¿Vale? Entonces, hay distintos métodos, 1302 01:45:34,140 --> 01:45:35,699 esto es lo de siempre, pues que 1303 01:45:35,699 --> 01:45:37,100 a ver, que 1304 01:45:37,100 --> 01:45:39,399 mirando la documentación de Unity 1305 01:45:39,399 --> 01:45:41,140 yo os digo que en el siguiente tema 1306 01:45:41,140 --> 01:45:43,960 se habla más de esto, pero si vamos a 1307 01:45:43,960 --> 01:45:45,500 Scene 1308 01:45:45,500 --> 01:45:47,159 Manager 1309 01:45:47,159 --> 01:45:49,699 Unity 1310 01:45:49,699 --> 01:45:51,659 en el API, en la documentación del 1311 01:45:51,659 --> 01:45:53,640 API, tenemos distintas 1312 01:45:53,640 --> 01:45:55,340 métodos que habría que ir 1313 01:45:55,340 --> 01:45:57,399 desde crear una escena 1314 01:45:57,399 --> 01:45:59,420 porque en cierto momento queremos que se 1315 01:45:59,420 --> 01:46:01,260 añade una escena a la que tenemos abierta 1316 01:46:01,260 --> 01:46:03,560 o oye, coge de la escena 1317 01:46:03,560 --> 01:46:05,579 que está activa, esto que estábamos cogiendo ahora 1318 01:46:05,579 --> 01:46:07,619 de esta escena activa, pues quiero 1319 01:46:07,619 --> 01:46:09,659 que me cojas el 1320 01:46:09,659 --> 01:46:10,279 build index 1321 01:46:10,279 --> 01:46:13,800 de getScene 1322 01:46:13,800 --> 01:46:15,359 y aparte tiene luego 1323 01:46:15,359 --> 01:46:17,579 sus propios parámetros, quiero que de esa escena 1324 01:46:17,579 --> 01:46:18,239 me cojas 1325 01:46:18,239 --> 01:46:21,579 la ruta de donde 1326 01:46:21,579 --> 01:46:23,000 está encontrada, o el build index 1327 01:46:23,000 --> 01:46:25,180 o el nombre 1328 01:46:25,180 --> 01:46:27,500 y entonces, pues ahí se puede 1329 01:46:27,500 --> 01:46:29,539 se pueden ir guardando 1330 01:46:29,539 --> 01:46:31,739 valores relacionados con la escena 1331 01:46:31,739 --> 01:46:33,760 perdonad que oigo una duda 1332 01:46:33,760 --> 01:46:35,420 por ahí, pero simplemente que sepáis 1333 01:46:35,420 --> 01:46:46,880 que para cargar una escena, si no queremos recurrir a los números de, aunque tienen que estar en los build settings también, ahí metido, si en vez del número del índice queremos usar el nombre, 1334 01:46:47,020 --> 01:46:57,279 también se puede decir un array que sea el nombre del nivel, por ejemplo, level 2 creo que se llamaba, y entonces va a buscar dentro de todos los que haya level 2, pero era junto, 1335 01:46:57,279 --> 01:47:19,399 Va a buscar dentro de todos los que hay aquí en los build settings el que se llame como eso y cargará ese por nombre, ¿vale? Entonces yo aquí puedo poner level 2 y ahora sería el que cargaría, ¿vale? El level 2, no estamos invalidando porque no estamos usando esto del número para la escena, pero estaría ahí, ¿vale? Lo dejo un poco como estaba. 1336 01:47:19,399 --> 01:47:54,060 Y hasta aquí, el primer nivel ya no deberíais tener dificultades para irlo sacando. En el segundo hay algún pero más. A ver, alguien me ha pedido palabra, creo. Si no, decidme. He oído un pitido por ahí, igual no es nada. Si no, decidme. ¿Nada? ¿Sigo? Bueno, en los últimos 10 minutos. ¿Sigo? No veo lo de la mano, así que igual me lo he inventado. 1337 01:47:55,579 --> 01:48:12,960 En el nivel 1 la tabla está estática y si os fijáis el terreno no tiene ningún script, no está desactivado y por tanto lo que se mueve es la bola, pero en los siguientes niveles lo que se mueve es la tabla, entonces a la que hay que darle el script es a la tabla. 1338 01:48:12,960 --> 01:48:37,020 Es la que va a tener, lo que os lo he enseñado antes, de hecho, es la que va a tener, a ver, terreno move, pues eso, el torque. Esto os lo he enseñado antes, el torque que añadirá fuerza para que rote. La bola estará encima y por inercia, ahora es la bola, de hecho, la que tiene su script de movimiento desactivado porque no quiero que se mueva con la cruceta que tengo establecida en el input manager para el movimiento de la bola. 1339 01:48:37,020 --> 01:48:57,880 Quiero que sea plenamente solidaria, que reciba la inercia según la inclinación de la tabla. Pero hay un problema, que es que esta tabla, igual que hemos hecho antes, tiene un mesh collider que considera que tiene un agujero para que no pase lo de antes de que no se meta la bola. 1340 01:48:57,880 --> 01:49:27,159 ¿Qué problema hay? Que para aplicar fuerzas al terreno, y por tanto le tenemos que poner un Rigid Body, a diferencia del nivel 1, que no hace falta un Rigid Body, va a ser un objeto estático, cuando metemos un Mesh Collider, para que coja esta geometría con el Rigid Body, el Rigid Body os va a salir un error que va a implicar que tenga que estar en kinemático. 1341 01:49:27,880 --> 01:49:38,159 Si no, veis que no se ve aplicado y no funcionaría. De hecho, si lo quito y le doy a play, o dará error o se sumergirá en la tabla. 1342 01:49:38,159 --> 01:49:57,500 ¿Veis? Esta bola. Entonces, intentadlo, pero va a haber un problema, que es que es imposible que con un solo GameObject podáis aplicar la rotación en el RigidBody para que se mueva y que el MesCollider respete el agujero. 1343 01:49:57,500 --> 01:50:16,539 Para esto, y es la dificultad y está hecho a posta, normalmente no se llega a estos escenarios porque no queremos mover por físicas algo que tiene una malla más detallada, hay que disgregar en dos elementos esta tabla. 1344 01:50:16,539 --> 01:50:33,779 Por un lado, un elemento padre que si os fijáis no tiene nada de geometría, no tiene ni MeshFilter ni MeshRenderer, se podría llamar también MovedorTerreno, que lo que tiene es un RigidBody para efectivamente que este script mueva este RigidBody y haga que se gire, ¿vale? 1345 01:50:33,779 --> 01:50:44,439 y luego un hijo, que al ser hijo va heredando la posición de su padre, en el que sí que esté este RigidBody, pero no está el movimiento por código, ¿vale? 1346 01:50:44,439 --> 01:50:54,159 Y en este sí que podéis activar un MesCollider sin el convex, ¿vale? Para que sí que, para que no sea, cuando leáis los apuntes veréis que puede estar en modo convex, 1347 01:50:54,159 --> 01:50:59,060 que intenta minimizar o reducir directamente la geometría, 1348 01:50:59,500 --> 01:51:04,079 pero nuevamente hace eso de que lo convierte en un elemento que no tiene el agujero 1349 01:51:04,079 --> 01:51:10,039 y si queremos que mantenga ese convex, pues hay que añadir un rigidbody que sea de tipo kinemático 1350 01:51:10,039 --> 01:51:13,960 y cuando hacemos eso ya no se puede mover por código este rigidbody. 1351 01:51:14,659 --> 01:51:19,560 Entonces lo que hacemos es mover ese movimiento de físicas, lo hacemos en un padre 1352 01:51:19,560 --> 01:51:24,859 Y lo hereda el hijo, que es el que sí tiene el collider y la geometría de ese agujero. 1353 01:51:25,720 --> 01:51:28,640 Esta es la mayor dificultad. 1354 01:51:29,039 --> 01:51:35,140 Pero sabiendo esto un poco en cuenta y teniéndolo en cuenta, creo que ya resulta gran parte. 1355 01:51:35,560 --> 01:51:37,439 Fijaos que es este tipo de error. 1356 01:51:38,380 --> 01:51:45,060 Los non-convex mescollider con no kinematic rebody no se soportan desde hace tiempo. 1357 01:51:45,060 --> 01:51:50,279 Entonces hay que ir ajustando 1358 01:51:50,279 --> 01:51:51,539 Bueno, ahora mismo lo tengo bien 1359 01:51:51,539 --> 01:51:54,600 Cuando dé a play este error se va a marchar 1360 01:51:54,600 --> 01:51:58,539 Pero si desactivara lo de kinemático 1361 01:51:58,539 --> 01:52:01,220 Para que, por ejemplo, se pudieran aplicar esas fuerzas 1362 01:52:01,220 --> 01:52:04,119 Pues cuando dé a play va a funcionar 1363 01:52:04,119 --> 01:52:09,119 Pero no va a estar aplicándose ese collider 1364 01:52:09,119 --> 01:52:09,960 De manera correcta 1365 01:52:09,960 --> 01:52:15,680 Entonces ahí lo tenemos 1366 01:52:15,680 --> 01:52:21,359 Bueno, he soltado muchas cosas, creo que he introducido muchas cosas 1367 01:52:21,359 --> 01:52:26,239 Ya os digo que también hay cosas que se verán en siguientes temas 1368 01:52:26,239 --> 01:52:30,079 Y en ciertos momentos hay que ir dando saltos de fe 1369 01:52:30,079 --> 01:52:33,880 Pero bueno, también sirve para ir introduciendo conceptos 1370 01:52:33,880 --> 01:52:35,939 Y creo que hoy se han explicado un montón de cosas 1371 01:52:35,939 --> 01:52:38,199 Y creo que además cosas interesantes 1372 01:52:38,199 --> 01:52:42,560 Así que ya solo me queda deciros que os pongáis a la tarea 1373 01:52:42,560 --> 01:52:44,300 Y intentéis pegaros con ella 1374 01:52:44,300 --> 01:52:45,659 Que es como vais a aprender 1375 01:52:45,659 --> 01:52:47,960 Y creo que esta unidad ya, si sabéis 1376 01:52:47,960 --> 01:52:50,260 Los conceptos y asimiláis lo que se ve en esta unidad 1377 01:52:50,260 --> 01:52:52,420 Ya podéis hacer muchos tipos de juegos, realmente 1378 01:52:52,420 --> 01:52:53,659 ¿Vale? 1379 01:52:54,359 --> 01:52:56,760 Así que nada, es el tema 3D7 1380 01:52:56,760 --> 01:52:58,279 Así que todavía queda 1381 01:52:58,279 --> 01:52:59,220 Pero, ¿qué tal? 1382 01:53:00,039 --> 01:53:02,079 ¿Os queda menos sensación de... 1383 01:53:02,079 --> 01:53:04,420 No de densidad, imagino, pero de abrumarse 1384 01:53:04,420 --> 01:53:05,359 Ante el enunciado? 1385 01:53:06,579 --> 01:53:08,500 Al menos entender un poco por dónde tirar 1386 01:53:08,500 --> 01:53:10,420 Vale 1387 01:53:10,420 --> 01:53:12,159 Aparte he dado muchas vueltas 1388 01:53:12,159 --> 01:53:13,619 Para explicaros cosas, pero realmente 1389 01:53:13,619 --> 01:53:17,060 sabiendo es una tarea 1390 01:53:17,060 --> 01:53:18,779 que tampoco es tan tan compleja 1391 01:53:18,779 --> 01:53:19,800 como parece la primera vez 1392 01:53:19,800 --> 01:53:21,600 pero entiendo 1393 01:53:21,600 --> 01:53:23,539 yo soy el primero que lo ha padecido 1394 01:53:23,539 --> 01:53:25,560 las primeras veces que te enfrentas a códigos así 1395 01:53:25,560 --> 01:53:27,720 pues claro que abruma 1396 01:53:27,720 --> 01:53:29,319 pero bueno, que es como hablar un idioma 1397 01:53:29,319 --> 01:53:32,140 nadie aprende inglés en tres meses 1398 01:53:32,140 --> 01:53:35,039 así que bueno, que es parte del proceso 1399 01:53:35,039 --> 01:53:36,060 lo dicho 1400 01:53:36,060 --> 01:53:38,399 me tengo que marchar ya 1401 01:53:38,399 --> 01:53:40,659 no sé si hay alguna duda rápida 1402 01:53:40,659 --> 01:53:42,079 y si no, recordad que está en los foros 1403 01:53:42,079 --> 01:54:10,140 ¿Alguna duda así para cerrar o algo que queráis que tratemos? Nada más. Vale, ya os digo, en general creo que está planteado lo necesario. Así que, bueno, pues muchas gracias por asistir. Me alegra que seáis unos cuantos los que venís a las tutorías, aunque queden grabadas, pues siempre creo que se agradece por si surgen dudas en el directo, ¿no? Pues irlas atajando. 1404 01:54:10,140 --> 01:54:12,000 así que nada, pues muchísimas gracias 1405 01:54:12,000 --> 01:54:13,180 si no hay nada más que añadir 1406 01:54:13,180 --> 01:54:15,859 y bueno, pues ánimo con la tarea 1407 01:54:15,859 --> 01:54:19,619 venga, hasta luego