1 00:00:01,889 --> 00:00:12,550 Bienvenidos a la tutoría 9. Bueno, no he visto, voy a volver a mirar, no he visto ninguna duda en el foro. 2 00:00:13,029 --> 00:00:21,230 Dame un segundo, me voy a refrescar, ni en los apartados. Por tanto, entiendo que no hay así ninguna duda concreta que me queráis plantear, ¿verdad? 3 00:00:21,829 --> 00:00:27,309 Si no, pues empezamos por eso, pues para tenerlo en cuenta o resolverla cuanto antes, vaya. 4 00:00:27,309 --> 00:00:46,179 A ver, estoy revisando, pero vamos, que antes de Mirai no había ninguna entrada nueva en los foros, así que dudas, al menos cuando las planteéis ahora, no hay. Vale, me está escribiendo. 5 00:00:46,179 --> 00:01:01,960 Vale, duda no hay, me atasqué la parte de los nodos, entiendo que te refieres al animator. Vale, a los nodos y cómo conectarlos. Pues ahora lo vemos. No sé si en general o en algún caso concreto o es en todo y lo vemos. Vale. 6 00:01:01,960 --> 00:01:04,040 ¿Vale? Venga 7 00:01:04,040 --> 00:01:05,599 Pues de primeras 8 00:01:05,599 --> 00:01:07,840 primeras dudas, hablamos sobre 9 00:01:07,840 --> 00:01:10,060 el Animator Controller 10 00:01:10,060 --> 00:01:12,000 ¿Vale? Decidme más 11 00:01:12,000 --> 00:01:13,879 cosas por si acaso, para tenerlo en cuenta 12 00:01:13,879 --> 00:01:21,069 Vale, pues 13 00:01:21,069 --> 00:01:23,489 vamos con esa parte y luego 14 00:01:23,489 --> 00:01:24,909 si no me vais, me vais diciendo 15 00:01:24,909 --> 00:01:27,349 Sí, para avanzar desde el Animator al movimiento 16 00:01:27,349 --> 00:01:29,650 del personaje en sí, vale, fenomenal 17 00:01:29,650 --> 00:01:31,489 Voy a hacer un 18 00:01:31,489 --> 00:01:33,469 repasillo rápido hasta llegar ahí 19 00:01:33,469 --> 00:01:35,629 ¿Vale? Voy a ir muy rápido porque entiendo que 20 00:01:35,629 --> 00:01:37,530 eso sí, los que ya habéis empezado 21 00:01:37,530 --> 00:01:43,349 habéis avanzado hasta ahí pues más o menos lo entendéis y no hay dudas vale 22 00:01:43,349 --> 00:01:48,569 bueno os proporcionaba en la tarea a ver está aquí en sprites pues varios 23 00:01:48,569 --> 00:01:55,569 sprites algunos que son imágenes sueltas como ya habréis visto si por defecto no 24 00:01:55,569 --> 00:02:01,409 las está cogiendo estos sprites igual que sucedía en las imágenes de y por 25 00:02:01,409 --> 00:02:05,590 ejemplo de los botones tienen que ser texturas del tipo 2d y yu hay vale y una 26 00:02:05,590 --> 00:02:10,750 vez puesto hay que aplicar esta actualización y aparte de eso también había otras hojas de 27 00:02:10,750 --> 00:02:16,930 sprites en este caso que como veis pues tienen se componen de diversos de diversos sprites en 28 00:02:16,930 --> 00:02:21,550 sí bueno aquí ya aparecen con esta flechita porque ya los he dividido dividido esta hoja 29 00:02:21,550 --> 00:02:28,270 de spray si os fijáis aquí en estos cuadradetes que es una operación rápido también lo cuento 30 00:02:28,270 --> 00:02:35,110 porque lo ponen creo suficientemente desarrollada en el temario que hay que cambiar que al clicar 31 00:02:35,110 --> 00:02:44,050 Estamos en el panel de proyecto y en el inspector que se abre cuando vamos seleccionando estas hojas de sprites o estos sprites a seca, vaya, estas imágenes. 32 00:02:44,650 --> 00:02:54,509 Si queremos que se interprete uno de estos diseños como una hoja de sprites, es decir, que hay múltiples sprites independientes o que vamos a usar de manera independiente, 33 00:02:54,909 --> 00:03:00,409 en vez de usar la modalidad de single que viene por defecto, tenemos que decir que sea de tipo múltiple. 34 00:03:00,409 --> 00:03:11,009 Es decir, de este mismo archivo va a extraer varios diseños, como por ejemplo vemos aquí las distintas miniaturas que se corresponden en este caso con diferentes animaciones. 35 00:03:11,189 --> 00:03:21,530 No siempre tienen que ser animaciones, lo que se guarda en una hoja de sprites, pero es una de las razones por las que se hace esto para tenerlo agrupado en una hoja de sprites. 36 00:03:21,530 --> 00:03:46,990 Y dentro de esa hoja de sprites hay una sección que se llama sprite editor, que aquí nuevamente ya está dividido y en las instrucciones de la tarea, en el enunciado, os indicaba de cuánta área es o para qué está pensado la división de esta hoja de sprites, que pone que es de 275 por 275 píxeles, que eso se hace con la opción de slice e indicando el tamaño del grid. 37 00:03:46,990 --> 00:04:11,949 Aquí no lo voy a hacer de nuevo, pero aquí es donde definimos la medida que tendrá, que coincide con la división que luego he hecho. Cada uno de los sprays, tal y como se sacaron, esto es algo que tiene que venir ya previsto desde el diseño de esta hoja de spray, ¿cuánta área es en la que ha ido segmentando una animación en este caso? 38 00:04:11,949 --> 00:04:25,529 Una vez se pone, también es relevante en esta división, en este slice, indicar que en este caso, claro, los ojos, los pies del personaje van a estar en la parte inferior 39 00:04:25,529 --> 00:04:33,870 Entonces el pivote, es decir, el punto que tiene de referencia para los movimientos, rotaciones, etcétera, más conveniente es que sea desde estos pies 40 00:04:33,870 --> 00:04:40,149 Por tanto en esta operación, en otros casos puede ser otro el punto que nos interese, o también lo podemos ir ajustando a mano 41 00:04:40,149 --> 00:04:47,610 a más no me refiero a que en custom se puede establecer que sea otro 42 00:04:47,610 --> 00:04:52,310 las coordenadas, pero bueno, por lo general es verdad que no está 100% posado 43 00:04:52,310 --> 00:04:56,269 en lo que es el límite de estas divisiones según las hacemos 44 00:04:56,269 --> 00:04:59,750 pero bueno, más o menos sí que queremos que esté en esa parte inferior 45 00:04:59,750 --> 00:05:04,329 y una vez ya lo tenemos, bueno aquí eso no lo quiero aplicar 46 00:05:04,329 --> 00:05:07,930 porque ya está dividido, si no hay duda 47 00:05:07,930 --> 00:05:10,569 una vez le diéramos a ese botón 48 00:05:10,569 --> 00:05:12,610 de slice, pues hace 49 00:05:12,610 --> 00:05:14,350 estas divisiones y aquí es cuando 50 00:05:14,350 --> 00:05:15,829 lo descarto, lo que he hecho 51 00:05:15,829 --> 00:05:18,649 cuando ya sí que nos sale este desplegable 52 00:05:18,649 --> 00:05:20,529 con las distintas divisiones 53 00:05:20,529 --> 00:05:21,769 independientes de cada 54 00:05:21,769 --> 00:05:24,569 bueno, pues de cada división que hemos hecho en esa 55 00:05:24,569 --> 00:05:25,329 hoja de sprite 56 00:05:25,329 --> 00:05:27,329 una vez tenemos eso 57 00:05:27,329 --> 00:05:30,569 normalmente lo que vamos 58 00:05:30,569 --> 00:05:32,430 a generar, que a veces 59 00:05:32,430 --> 00:05:33,689 no es lo más intuitivo, es 60 00:05:33,689 --> 00:05:36,370 que podemos meter uno de estos sprites 61 00:05:36,370 --> 00:05:56,430 Por ejemplo, uno de estos elementos, me voy a poner en la pantalla que hay que hacer las ediciones, recordad no liaros entre la de juego, que es para previsualizar el juego, y la de escena, aquí podríamos arrastrar a la jerarquía o a la propia escena uno de estos, en este caso es el personaje, una de estas divisiones. 62 00:05:56,430 --> 00:06:19,089 En este caso vais a ver que cuando yo le dé aquí se va a quedar estática. Aquí veis ya, si no se ve lo hago con un pequeño zoom, que tiene una ligera animación. Pero por defecto cuando metemos un personaje, esto es importante, hago un inciso y tiene que ver con la duda que estáis planteando. 63 00:06:19,089 --> 00:06:37,470 Cuando tenemos estas animaciones y esta sucesión en este caso de fotogramas que están ya prediseñados, al final lo que estamos haciendo por un lado es tener animaciones de un personaje que ya han sido diseñadas, como cuando se pintan dibujos animados. 64 00:06:37,470 --> 00:06:50,910 Aquí este movimiento no está generado, es decir, este cabeceo, este meceo de las manos, no está generado por Unity en sí. Está generado porque un fotograma tras otro va desarrollando esta animación. 65 00:06:51,490 --> 00:07:06,430 Por eso no hay que distinguir cuando, por ejemplo, ahora vayamos a una animación de que el personaje se mueve hacia izquierda o derecha, que lo que vais a ver es que lo que va haciendo es... un segundete, que me voy aquí y así lo vemos más en contexto. 66 00:07:07,470 --> 00:07:30,529 Cuando me muevo, ¿vale? Este movimiento de piernas no es lo que está haciendo, que a veces intuitivamente lo que parece, no es lo que está haciendo que el personaje se mueva. Es decir, está haciendo una animación del personaje moviendo los pies en el sitio. Lo que va a hacer que se desplace por el espacio es que nosotros, por código, como hemos hecho ya en otras ocasiones con la nave, con la bola, etc., es lo que va a hacer que arrastre. 67 00:07:30,529 --> 00:07:44,529 Entonces, es decir, que lo mueva en el espacio igual que que lo salte. Esta animación de saltar, si vamos a la animación de saltar, que está aquí preparada, si os fijáis, aquí hay una ligerísima... 68 00:07:44,529 --> 00:08:09,470 Ligerísima, veis que vamos viendo la sucesión de fotogramas y hay una ligerísima elevación, pero no es la fuerza de salto que yo voy a querer. La fuerza de salto, aparte de que ya tenga este pequeño diseño de que salta, lo que va a hacer que efectivamente, y vuelvo a hacer más grande la pantalla, que efectivamente salte, aunque haga este pequeño movimiento de pies, es que le estamos aplicando una fuerza en el eje Y hacia arriba. 69 00:08:09,470 --> 00:08:11,670 entonces eso es importante 70 00:08:11,670 --> 00:08:14,209 y esto también sucederá cuando lo hagamos en 3D 71 00:08:14,209 --> 00:08:16,410 hay que pensar que por un lado está la apariencia 72 00:08:16,410 --> 00:08:17,670 visual de los movimientos 73 00:08:17,670 --> 00:08:20,189 que en 2D 74 00:08:20,189 --> 00:08:21,730 cuando se basa en sprites 75 00:08:21,730 --> 00:08:24,389 se debe a que está la animación 76 00:08:24,389 --> 00:08:25,870 ya diseñada y se está 77 00:08:25,870 --> 00:08:27,769 en este caso reproduciendo en bucle 78 00:08:27,769 --> 00:08:30,170 y otra cosa es el desplazamiento 79 00:08:30,170 --> 00:08:32,529 en sí de lo que es el GameObject 80 00:08:32,529 --> 00:08:35,070 es decir, si yo ahora voy aquí 81 00:08:35,070 --> 00:08:36,850 al robot 82 00:08:36,850 --> 00:08:38,509 que es este robot que tenemos aquí 83 00:08:38,509 --> 00:08:56,169 Os lo enseño aquí. Este robot, cuando yo me muevo, está haciendo la animación y si fijáis en el cuadro, está todo el rato ese cuadro reproduciendo este grande que estamos hablando, se corresponde con las divisiones. Se corresponde con dónde está el objeto. 84 00:08:56,169 --> 00:09:12,009 Y luego veis que toda la caja y lo que hay en su interior se desplaza hacia los lados o salta, etc. ¿Vale? Entonces lo primero que ocurre cuando, y vuelvo a este que tenemos aquí para el juego, a este que tenemos aquí es que por defecto, ¿vale? 85 00:09:12,009 --> 00:09:19,529 Este nuevo diseño que hemos metido, por defecto, solo tiene un sprite renderer, que es el componente que permite que se visualice un sprite, ¿vale? 86 00:09:20,129 --> 00:09:28,110 Entendido como un elemento 2D, que es el mismo que, por ejemplo, si yo pulso aquí, se ve en esta plataforma. 87 00:09:28,269 --> 00:09:36,070 Cada uno tendrá un sprite, ¿vale? Incorporado, si vuelvo a la plataforma, fijaos que este es el iconito que representa los sprites, ¿vale? 88 00:09:36,070 --> 00:09:39,129 cuadrado morado 89 00:09:39,129 --> 00:09:41,769 y tiene varias opciones en sí mismas 90 00:09:41,769 --> 00:09:42,789 que por defecto 91 00:09:42,789 --> 00:09:45,350 en este caso no vamos a tocar 92 00:09:45,350 --> 00:09:47,330 son interesantes, por ejemplo está 93 00:09:47,330 --> 00:09:49,129 la de, si voy al robot otra vez 94 00:09:49,129 --> 00:09:51,309 la de flip, y vais a ver 95 00:09:51,309 --> 00:09:53,429 que lo que hace es voltearlo 96 00:09:53,429 --> 00:09:55,389 y veis, fijaos también 97 00:09:55,389 --> 00:09:56,830 que este volteo lo hace 98 00:09:56,830 --> 00:09:58,970 no desde su centro, sino desde 99 00:09:58,970 --> 00:10:01,029 la parte inferior, porque recordad 100 00:10:01,029 --> 00:10:02,889 si yo le doy al volteo en Y 101 00:10:02,889 --> 00:10:04,649 lo hace desde el suelo 102 00:10:04,649 --> 00:10:06,909 desde los pies del personaje vamos a decir 103 00:10:06,909 --> 00:10:09,490 porque el punto de pivote lo hemos puesto aquí 104 00:10:09,490 --> 00:10:11,309 y nos interesa si el personaje 105 00:10:11,309 --> 00:10:13,529 de pronto tuviera que andar al revés 106 00:10:13,529 --> 00:10:15,649 bueno, según como fuera 107 00:10:15,649 --> 00:10:16,750 nos podría interesar más o menos 108 00:10:16,750 --> 00:10:18,750 pero queremos que las operaciones también 109 00:10:18,750 --> 00:10:20,149 de rotación 110 00:10:20,149 --> 00:10:23,990 de rotación 111 00:10:23,990 --> 00:10:25,629 pues lo haga en base a ese 112 00:10:25,629 --> 00:10:26,509 punto de pivote 113 00:10:26,509 --> 00:10:28,769 porque si se echa para adelante o para atrás 114 00:10:28,769 --> 00:10:29,870 queremos que sea desde ahí 115 00:10:29,870 --> 00:10:31,909 por eso es importante el punto de pivote 116 00:10:31,909 --> 00:10:35,370 pero ahora mismo yo lo que he arrastrado aquí es solo 117 00:10:35,370 --> 00:10:37,549 un sprite, ¿vale? un elemento 118 00:10:37,549 --> 00:10:39,509 un fotograma, y eso es lo que se está viendo 119 00:10:39,509 --> 00:10:41,690 no hay ninguna sucesión, ninguna animación 120 00:10:41,690 --> 00:10:42,610 de fotogramas 121 00:10:42,610 --> 00:10:45,690 para que eso se vea, tienen que suceder 122 00:10:45,690 --> 00:10:47,549 dos cosas, en primer lugar 123 00:10:47,549 --> 00:10:49,629 como tenemos 124 00:10:49,629 --> 00:10:50,769 una sucesión 125 00:10:50,769 --> 00:10:53,929 de fotogramas 126 00:10:53,929 --> 00:10:55,370 ¿vale? de estos pequeños sprites 127 00:10:55,370 --> 00:10:57,230 hay que, de algún modo 128 00:10:57,230 --> 00:10:59,350 ensamblarlos para que se reproduzcan 129 00:10:59,350 --> 00:11:01,049 uno después de otros, ¿vale? en el orden 130 00:11:01,049 --> 00:11:04,110 que ya se ha hecho previamente en el diseño de esta hoja de spray, ¿vale? 131 00:11:04,769 --> 00:11:09,289 Entonces, aquí tenemos una animación que fotograma a fotograma se va moviendo. 132 00:11:09,289 --> 00:11:15,830 Para eso, existe dentro de las ventanas una primera que se llama Animation, ¿vale? 133 00:11:15,970 --> 00:11:20,950 Y se ha abierto aquí, que es una línea de tiempo como la que conocéis con fotogramas, ¿vale? 134 00:11:21,169 --> 00:11:25,769 Y luego, por otro lado, que es los nodos que estábamos hablando, por otro lado, esta ventana, 135 00:11:25,769 --> 00:11:28,490 y otro concepto que es el animator 136 00:11:28,490 --> 00:11:29,909 que es esto que tenemos aquí 137 00:11:29,909 --> 00:11:32,029 que parece una estructura de nodos 138 00:11:32,029 --> 00:11:34,529 yo aquí ya tengo varios conectados 139 00:11:34,529 --> 00:11:35,750 y una y otra 140 00:11:35,750 --> 00:11:38,090 se interrelacionan 141 00:11:38,090 --> 00:11:40,210 ahora hacemos una muestra de cómo funciona 142 00:11:40,210 --> 00:11:42,330 cada una, porque quiero ir más o menos 143 00:11:42,330 --> 00:11:42,710 rápido 144 00:11:42,710 --> 00:11:45,690 y luego ver dudas que surjan, porque esto 145 00:11:45,690 --> 00:11:48,230 creo que está explicado, por ejemplo, en el vídeo 146 00:11:48,230 --> 00:11:50,070 de Álvaro, aparte de en el tema 147 00:11:50,070 --> 00:11:52,330 pero, eso, cuando tenemos aquí 148 00:11:52,330 --> 00:11:54,429 un objeto seleccionado 149 00:11:54,429 --> 00:12:19,529 vais a ver que está diciendo, para empezar a animar, y aquí está hablando de un GameObject concreto, veis que se llama igual, para animar este GameObject, crea un Animator y un AnimatorAnimationClip, aquí están ya referenciados o mencionados los dos elementos que se van a poner en juego, este Animator para ir incorporando, cada uno de estos nodos, ir incorporando las distintas animaciones que vayamos creando, 150 00:12:19,529 --> 00:12:40,149 Y luego en este panel vamos haciendo estas animaciones en lo que se conocen como Animation Clips, que son distintos clips que van recogiendo, y fijaos en el icono que tienen esos Animation Clips, que es este triangulito verde, ahora os enseño alguno también de las que ya están desarrolladas, que en este caso es donde vamos incorporando los fotogramas. 151 00:12:40,149 --> 00:12:56,669 Entonces, por un lado, la animación en sí con su línea de tiempo, tiene un tiempo, se van ejecutando animaciones y en este caso vamos a jugar con fotogramas, pero también se podría animar en el tiempo, pues por ejemplo el transform de un GameObject. 152 00:12:56,669 --> 00:13:13,350 Meterme aquí e ir diciendo que la posición vaya cambiando en cierto momento, igual que hacemos en un objeto 3D. De hecho, vamos a hacer eso primero. De momento dejo de lado este robot y de hecho lo voy a desactivar, que es el que está preparado ya con las animaciones. 153 00:13:13,350 --> 00:13:27,029 Nos vamos a centrar un segundo en este que tenemos aquí. A ver, perdonad, que me voy a poner la escena también aquí de momento. Ya van faltando espacios con tanto menú que tengo que abrir. Pero bueno, nos vamos apañando. 154 00:13:27,029 --> 00:13:41,909 Entonces tenemos este robot aquí y voy a decirle, oye, yo quiero que esto, y lo voy a llamar además, para que no sea este nombre que ha cogido por defecto, robot tutoría. 155 00:13:41,909 --> 00:13:45,230 Tutoría 156 00:13:45,230 --> 00:13:47,009 ¿Vale? Si queremos animar el robot 157 00:13:47,009 --> 00:13:48,190 Tutoría, hay que crear 158 00:13:48,190 --> 00:13:50,830 ¿Vale? Y lo voy a crear 159 00:13:50,830 --> 00:13:53,149 Por ejemplo, en el escritorio 160 00:13:53,149 --> 00:13:55,570 En... Aquí, por ejemplo 161 00:13:55,570 --> 00:13:57,649 Voy a crear una nueva animación 162 00:13:57,649 --> 00:13:59,250 ¿Vale? Y aquí es lo que hay que pensar 163 00:13:59,250 --> 00:14:01,149 Las animaciones se van 164 00:14:01,149 --> 00:14:03,070 Segmentando en distintos tipos, igual que las 165 00:14:03,070 --> 00:14:05,409 Hojas de spray, viene una a andar, otra a correr 166 00:14:05,409 --> 00:14:07,570 Otra a saltar, otra a agacharse 167 00:14:07,570 --> 00:14:09,110 ¿Vale? Pues la primera 168 00:14:09,110 --> 00:14:11,649 Normalmente es la de estar como en reposo 169 00:14:11,649 --> 00:14:13,590 se llamaría que es cuando no hay movimiento 170 00:14:13,590 --> 00:14:15,730 pues el personaje pues eso tiene un pequeño 171 00:14:15,730 --> 00:14:17,070 meceo para que se vea que está 172 00:14:17,070 --> 00:14:19,570 en el sitio animado y no está estático 173 00:14:19,570 --> 00:14:21,529 pues suele tener esta animación que se llama 174 00:14:21,529 --> 00:14:23,529 el idle entonces bueno 175 00:14:23,529 --> 00:14:25,429 por la primera que vamos a crear y voy a poner 176 00:14:25,429 --> 00:14:27,610 idle tutoría más que nada porque por ahí tengo 177 00:14:27,610 --> 00:14:29,509 las animaciones que 178 00:14:29,509 --> 00:14:31,450 tenía el otro personaje para no 179 00:14:31,450 --> 00:14:32,750 confundirlas y al crearlo 180 00:14:32,750 --> 00:14:35,610 you cannot save to a non asset folder 181 00:14:35,610 --> 00:14:37,629 vale si hay que ir 182 00:14:37,629 --> 00:14:39,309 a cuando creamos 183 00:14:39,309 --> 00:14:41,409 dentro de los assets 184 00:14:41,409 --> 00:14:43,850 de nuestra jerarquía 185 00:14:43,850 --> 00:14:45,110 nos ha dado ese aviso 186 00:14:45,110 --> 00:14:47,490 pues yo por ejemplo aquí creé 187 00:14:47,490 --> 00:14:49,210 dentro de la estructura de carpetas 188 00:14:49,210 --> 00:14:51,350 veis que hay aquí ya una creada de animaciones 189 00:14:51,350 --> 00:14:53,590 y aquí están las distintas animaciones 190 00:14:53,590 --> 00:14:55,690 fijaos con este punto anim que es el que nos dice 191 00:14:55,690 --> 00:14:57,730 aquí, las distintas animaciones en las que 192 00:14:57,730 --> 00:14:59,529 yo ya he ido pues guardando 193 00:14:59,529 --> 00:15:01,649 haciendo estos clips donde se 194 00:15:01,649 --> 00:15:03,610 guardan estos movimientos 195 00:15:03,610 --> 00:15:04,049 estos 196 00:15:04,049 --> 00:15:07,809 animaciones de objeto 197 00:15:07,809 --> 00:15:09,289 aquí tengo las del robot 198 00:15:09,289 --> 00:15:17,970 Para no confundirla, nuevamente voy a hacer una que se llama Robot Tutoría, ¿vale? Y, perdona que me he ido a guardar a la escritoria y no se puede, ¿vale? 199 00:15:18,169 --> 00:15:27,269 Idle Tutoría. Y ahí está. Y ya cuando hemos creado un Animation Clip, todos los Animation Clips que vayamos asociando a ese personaje, ¿vale? 200 00:15:27,330 --> 00:15:30,710 Porque aquí se pueden ir creando más, irán apareciendo aquí y se irán seleccionando aquí. 201 00:15:30,710 --> 00:16:00,690 Entonces, por ejemplo, el del idle. Yo ya he dividido, imaginaos, hemos hecho este trabajo de dividir el personaje, los distintos fotogramas y para incorporar estos fotogramas en una línea de tiempo de esta animación llamada idle, lo que hay que hacer es seleccionar todos del primero al último con shift, ¿vale? 202 00:16:00,690 --> 00:16:25,669 A ver si lo podemos dar un poquito más de zoom. ¿Vale? Veis que por defecto lo que se van viendo aquí no hay mucha diferencia porque se ven cada fotograma en pequeñito, ¿vale? Pero esta animación es donde se puede ir ajustando, pues a lo mejor que el primer momento de reposo dure esto y luego entre fotogramas podemos ir variando la distancia. 203 00:16:25,669 --> 00:16:40,350 Es decir, no tiene que durar un fotograma cada uno, ni dos, etc. Incluso, igual que sucede en los software de animación, aquí podemos hasta cambiar la velocidad de fotogramas por segundo. 204 00:16:40,350 --> 00:16:55,029 Si nos parece muy rápido, muy lento. Por defecto viene en 60, yo lo voy a poner en 30 y así la animación, si no vamos desplazando los fotogramas entre sí, se irá reproduciendo a 30 fotogramas por segundo. 205 00:16:55,669 --> 00:17:23,079 ¿Esto qué significa? Que cuando ya tenemos una animación, ¿vale? Y le damos a este play, a ver, voy a escena que se verá aquí, vais a ver que ya tiene este cabeceo, porque si seleccionamos este personaje, ¿vale? Al final lo que está sucediendo es que aquí se está desarrollando esta animación y fijaos que se queda aquí unos segundos y luego empieza a moverse. 206 00:17:23,079 --> 00:17:45,019 A ver, reproduzco de nuevo. Aquí está. ¿Vale? Es que se reproduce, se queda parado y luego ya va más rápido. ¿Por qué? Porque yo en esa animación, si os fijáis, cuando la selecciono he dejado unos fotogramas que se quedan como estancados y luego ya empiezan a desarrollarse a la velocidad. 207 00:17:45,019 --> 00:18:07,319 Esto, cuando creamos un primer clip de animación, a través de este panel de animación, en un GameObject, que es en este caso Robot Tutoría, fijaos que por defecto, yo no lo he añadido de ninguna forma, si os fijáis, ha aparecido otro componente ya aplicado que se llama Animator. 208 00:18:07,319 --> 00:18:13,779 Que el animator, como su propio nombre indica, está relacionado con el panel de animator 209 00:18:13,779 --> 00:18:17,740 Y si os fijáis también, yo estoy aquí reproduciendo el juego 210 00:18:17,740 --> 00:18:22,700 Y sin hacer nada, ya por defecto viene un primer nodo que se llama igual que esta animación 211 00:18:22,700 --> 00:18:28,740 Y veis que hay una barra que en bucle se va llenando una y otra vez 212 00:18:28,740 --> 00:18:31,579 En relación a lo que dura esta animación 213 00:18:31,579 --> 00:18:37,880 Esto, aunque no se ve aquí, está reproduciendo la duración de la animación que tiene en su interior. 214 00:18:39,359 --> 00:18:52,640 Entonces, lo que podremos ir haciendo es ir generando, por ejemplo, si yo ahora en este personaje creo un nuevo clip, que ahora va a ser salto en Tutoría. 215 00:18:53,279 --> 00:18:58,559 Y lo vuelvo a guardar en Animations, Robot Tutoría, para tenerlos todos agrupados. 216 00:18:58,559 --> 00:19:10,380 Al darle a guardar, aquí dice, ya tienes el Idle Tutoria en este objeto, asociado a este GameObject, y también ahora otro que se llama Salto Tutoria, que aún está vacío. 217 00:19:11,180 --> 00:19:18,640 Cuando generamos un nuevo clip de animación, fijaos que aparte de generarse esta animación, aquí aparece otro nodo. 218 00:19:18,640 --> 00:19:33,339 Y los nodos, además, cuando los vamos seleccionando, tienen en el propio inspector, tienen ya unida o vinculada, esto se podría cambiar si nos interesara, pero viene ya vinculada por defecto la animación. 219 00:19:34,480 --> 00:19:44,759 Porque pensad que ese clip de animación que hemos creado aquí en Animation Robot Tutoría se ha generado un Animation Clip que aquí viene referenciado con este triángulo verde. 220 00:19:44,759 --> 00:20:04,039 Entonces, cada uno de estos estados, por defecto, está asociado a una animación. Por ejemplo, vamos a asociar en este, lo dicho, para que podáis operar en el panel de animación con animaciones de un GameObject, hay que seleccionar ese GameObject. 221 00:20:04,039 --> 00:20:09,660 incluso para ir comprobando la animación de esto que vayamos haciendo en el panel de animación, 222 00:20:09,839 --> 00:20:14,180 independientemente del animator, aquí tenemos un reproductor en el panel de animation. 223 00:20:14,579 --> 00:20:20,619 Para ver lo que está sucediendo, si nos vamos al panel de escena, en el que editamos normalmente, 224 00:20:21,140 --> 00:20:25,660 si le damos aquí play con el objeto seleccionado, vemos esa animación tal y como está aquí. 225 00:20:26,640 --> 00:20:30,799 Pero veis que ahora no se está reproduciendo el animator controller. 226 00:20:30,799 --> 00:20:45,559 Ahora estamos viendo la animación como tenemos aquí. De hecho, fijaos, luego deshago, que si yo borro esto, se queda quieto, se mueve un poquito, está reaccionando todo el rato en relación a lo que vayamos haciendo en este panel. 227 00:20:45,559 --> 00:21:05,599 ¿Vale? Entonces, a ver, voy a mover estos fotogramas para que vayan hacia aquí y juntarlo con la velocidad real que quiero. Entonces aquí podemos ir manipulando los distintos fotogramas y sus duraciones. 228 00:21:06,539 --> 00:21:11,079 Cuando luego, por ejemplo, nos metemos en salto, aquí podemos hacer nuevamente esa misma operación. 229 00:21:11,079 --> 00:21:18,700 En los sprites, yo tengo aquí ya una hoja de sprites relacionada con el salto, que es esta que tenemos aquí, 230 00:21:18,839 --> 00:21:25,339 y nuevamente yo lo voy a arrastrar, tras seleccionar con Shift todos los diferentes sprites, a esta línea de fotogramas, 231 00:21:25,380 --> 00:21:31,799 que queremos ver cómo se ve, qué hace esta sucesión de distintos dibujos en este caso. 232 00:21:31,799 --> 00:21:33,460 Pues le damos a play y se ve 233 00:21:33,460 --> 00:21:35,640 Porque lo tenemos seleccionado y entonces se ve 234 00:21:35,640 --> 00:21:37,640 Evidentemente hay que poner 235 00:21:37,640 --> 00:21:39,200 La 236 00:21:39,200 --> 00:21:40,720 La 237 00:21:40,720 --> 00:21:44,019 La visión de escena para que se vea ese personaje 238 00:21:44,019 --> 00:21:46,059 Pero veis que aquí se puede hacer una pequeña 239 00:21:46,059 --> 00:21:48,259 Reproducción, ir fotograma a fotograma 240 00:21:48,259 --> 00:21:49,680 Ir al último, al primero 241 00:21:49,680 --> 00:21:51,160 Pues igual que se hacen 242 00:21:51,160 --> 00:21:54,059 Los software 243 00:21:54,059 --> 00:21:55,380 Que permiten animaciones 244 00:21:55,380 --> 00:21:57,900 Entonces 245 00:21:57,900 --> 00:21:59,920 Lo que vamos a conseguir por un lado 246 00:21:59,920 --> 00:22:01,279 Con este animator es 247 00:22:01,279 --> 00:22:03,640 pasar en ciertos momentos 248 00:22:03,640 --> 00:22:05,799 de una animación a otra, pues cuando pulso 249 00:22:05,799 --> 00:22:07,420 tal tecla paso de esta animación 250 00:22:07,420 --> 00:22:09,559 de estar idle a estar en salto 251 00:22:09,559 --> 00:22:11,299 ¿vale? pero nuevamente 252 00:22:11,299 --> 00:22:13,019 el salto en sí, si os fijáis 253 00:22:13,019 --> 00:22:14,500 no lo está dando aquí 254 00:22:14,500 --> 00:22:16,380 yo ahora le doy a 255 00:22:16,380 --> 00:22:19,759 bueno, perdón, no lo quería ver 256 00:22:19,759 --> 00:22:21,759 aquí, lo quería ver, selecciono el objeto 257 00:22:21,759 --> 00:22:23,359 el salto no lo da 258 00:22:23,359 --> 00:22:25,779 veis que este salto 259 00:22:25,779 --> 00:22:27,519 que da es mínimo, es solo una animación 260 00:22:27,519 --> 00:22:29,500 para dar la influencia de salto 261 00:22:29,500 --> 00:22:37,900 Pero el salto realmente nosotros después lo haremos así, desplazando con fuerzas o con kinemáticas también se podría, pero en este caso se os pide con fuerzas. 262 00:22:38,059 --> 00:22:48,799 Entonces, mientras el personaje iba con la otra animación andando, que lo iremos desplazando, en cierto momento, por ejemplo, cuando demos a la barra espaciadora, diremos pasa de este nodo a este. 263 00:22:48,799 --> 00:23:00,440 Y aparte de hacer esa animación, también le pondremos que haga su desplazamiento en el eje Y o el que indicamos. 264 00:23:01,039 --> 00:23:02,759 ¿Hasta aquí qué tal? ¿Me seguís? 265 00:23:04,759 --> 00:23:08,539 Sé que ya esta tarea tiene un montón de variables. 266 00:23:09,720 --> 00:23:14,660 Por eso hay una sección que es la más compleja realmente, que es la de las torretas, que es opcional. 267 00:23:14,660 --> 00:23:24,599 Y os dejo prácticamente el código para ir uniendo y bueno, irlo referenciando. Y es complejo, lo sé. Pero bueno, eso, irme parando e irme haciendo dudas. 268 00:23:25,779 --> 00:23:36,220 Entonces, una vez tenemos eso, lo primero también, que no se nos olvide lo que hemos ido estudiando hasta ahora, el personaje se queda en su sitio cuando estamos diciendo de moverle en físicas, 269 00:23:36,220 --> 00:23:39,799 porque primero no estamos aplicando ninguna física, ¿vale? 270 00:23:39,799 --> 00:23:42,480 Que se queda ahí, pero independientemente de la animación 271 00:23:42,480 --> 00:23:44,420 y de los movimientos que nosotros aportemos, 272 00:23:44,660 --> 00:23:47,319 recordad que en un juego en el que vamos a basarnos en físicas 273 00:23:47,319 --> 00:23:49,720 tiene que haber eso que se llama Rigid Body. 274 00:23:50,359 --> 00:23:54,119 Y como pone en el tema, además cuando estamos usando sprites, 275 00:23:54,380 --> 00:23:58,819 elementos en 2D, hay una nueva tipología de elementos basados en física 276 00:23:58,819 --> 00:24:02,160 como este Rigid Body 2D, igual que va a haber, ¿vale? 277 00:24:02,160 --> 00:24:05,059 Luego colliders 278 00:24:05,059 --> 00:24:06,180 De tipo 2D 279 00:24:06,180 --> 00:24:08,500 Que no son los mismos además 280 00:24:08,500 --> 00:24:10,819 No son ni siquiera las mismas formas 281 00:24:10,819 --> 00:24:11,740 Que las que había en 3D 282 00:24:11,740 --> 00:24:13,880 Los colliders de elementos 3D 283 00:24:13,880 --> 00:24:15,599 Ya para empezar, cuando le damos al play 284 00:24:15,599 --> 00:24:17,559 Aparte de que esté en estado de reposo 285 00:24:17,559 --> 00:24:19,440 Pues veis que se cae el personaje 286 00:24:19,440 --> 00:24:20,380 Porque hay una física 287 00:24:20,380 --> 00:24:24,579 Y no choca con este otro sprite 288 00:24:24,579 --> 00:24:25,339 Que yo ya había metido 289 00:24:25,339 --> 00:24:26,000 Esta plataforma 290 00:24:26,000 --> 00:24:28,640 Que se han ido distribuyendo 291 00:24:28,640 --> 00:24:30,519 Que nuevamente 292 00:24:30,519 --> 00:24:44,900 Hasta que no se pone un box collider no se detectan estas colisiones. Entonces, nuevamente, igual que hacíamos en el tema 3 y 4, los objetos por físicas también tienen que verse, tienen que encontrarse. 293 00:24:44,900 --> 00:25:05,740 Para ello existe un tipo de collider, el más básico, que puede ser o el capsule o el box collider, según la forma que queramos, cuando lo aplicamos tiene este área que sirve para definir qué sección va a encontrar cuando colisiona un objeto con otro. 294 00:25:05,740 --> 00:25:24,559 Y hay un problema mínimo cuando lo dejamos así, que es que ahora se queda en el suelo, pero fijaos que esa pequeña diferencia que hay en el diseño del sprite, aquí es por donde estaría el punto de pivote, en el propio sprite hay un pequeño hueco que no es realista. 295 00:25:24,559 --> 00:25:36,500 Esto se arregla, igual que sucedía en los otros colliders, con las opciones que tiene el propio collider para desfasar o ajustar medidas. 296 00:25:37,200 --> 00:25:47,039 En este caso, por ejemplo, podemos decir, y de hecho es lo suyo, que los colliders se relacionen con la forma que tiene el personaje. 297 00:25:47,039 --> 00:25:55,039 Porque si luego encontráramos una pared y se chocara con la pared, nuevamente se chocaría en este punto y no donde querríamos, que es más como por aquí. 298 00:25:55,700 --> 00:26:06,839 Entonces, elementos como este ajuste de medidas hay que hacerlo de forma pertinente al diseño que tenemos. 299 00:26:06,839 --> 00:26:21,480 Aquí hay un offset, lo ajustamos y ahora sí que si lo ajustamos aquí, pues ya tenemos que al arrancar el juego, la caja que está teniendo en cuenta para las colisiones es la de, incluso se podría ajustar un poquito más. 300 00:26:21,480 --> 00:26:38,019 Ahora lo ajusto. Pero tiene que ver con la caja del collider. Nuevamente, que veáis un movimiento no significa que se esté moviendo en sí, ¿vale? Hay que ir combinando las distintas funciones o operaciones que podemos tener. 301 00:26:38,019 --> 00:26:39,839 ¿vale? entonces ahí 302 00:26:39,839 --> 00:26:41,380 y lo bajo un poquico 303 00:26:41,380 --> 00:26:44,160 y esto es importante no solo por esto 304 00:26:44,160 --> 00:26:45,440 que estamos haciendo ahora del suelo 305 00:26:45,440 --> 00:26:47,420 ¿vale? sino porque 306 00:26:47,420 --> 00:26:50,140 también los colliders, recordad que nos 307 00:26:50,140 --> 00:26:51,740 pueden servir por ejemplo si nos disparan 308 00:26:51,740 --> 00:26:53,720 aquí 309 00:26:53,720 --> 00:26:58,359 ahí por ejemplo 310 00:26:58,359 --> 00:27:00,819 creo que está más fino, para que detecte 311 00:27:00,819 --> 00:27:02,579 las balas, por ejemplo, entonces 312 00:27:02,579 --> 00:27:04,500 si al personaje de pronto le ponemos una caja 313 00:27:04,500 --> 00:27:06,180 que sobresale muchísimo por arriba 314 00:27:06,180 --> 00:27:08,539 ¿vale? pues una bala que a lo mejor 315 00:27:08,539 --> 00:27:29,380 Si llega hasta aquí el collider, llega aquí la bala, mata al personaje porque está detectando la colisión. Le voy a hacer un pelín más ancho y ya lo tenemos. Ahí, más o menos. Hay otros tipos de formas de colliders que incluso podrían ser más convenientes como un cápsule porque tiene una forma más redondeada y entonces estas aristas, pero bueno, esta podría servir. 316 00:27:29,380 --> 00:27:33,319 Recordad luego, por ejemplo, cuando se agachara el personaje 317 00:27:33,319 --> 00:27:39,200 Que cuando se agache el diseño, el sprite 318 00:27:39,200 --> 00:27:40,839 Puede parecer que el personaje está así 319 00:27:40,839 --> 00:27:42,420 Pero la caja del collider no 320 00:27:42,420 --> 00:27:44,400 Habría que actualizarla por código 321 00:27:44,400 --> 00:27:45,700 Para que, por ejemplo, cuando se agache 322 00:27:45,700 --> 00:27:48,400 Pues sea así, ¿vale? De grande 323 00:27:48,400 --> 00:27:51,480 Que si os fijáis en el otro objeto que tenía 324 00:27:51,480 --> 00:27:53,400 ¿Vale? Ya que estoy hablando de esto 325 00:27:53,400 --> 00:27:54,539 Os lo enseño en un segundito 326 00:27:54,539 --> 00:27:58,019 aquí, vale, si voy 327 00:27:58,019 --> 00:28:00,019 a ese otro personaje que tengo 328 00:28:00,019 --> 00:28:02,160 vale, bueno, yo le doy al play 329 00:28:02,160 --> 00:28:03,920 ahora se va a cambiar 330 00:28:03,920 --> 00:28:05,220 a la de game, pero vuelvo aquí 331 00:28:05,220 --> 00:28:07,940 bueno, espera, lo pongo aquí la de game 332 00:28:07,940 --> 00:28:09,799 y voy a dar un poquito 333 00:28:09,799 --> 00:28:11,740 menos de espacio a esto, cuando yo voy moviendo 334 00:28:11,740 --> 00:28:13,759 al personaje y lo agacho 335 00:28:13,759 --> 00:28:16,019 veis que en algún momento 336 00:28:16,019 --> 00:28:17,099 estoy actualizando 337 00:28:17,099 --> 00:28:19,859 esa colocación 338 00:28:19,859 --> 00:28:21,980 del boss collider, ver que se cambian 339 00:28:21,980 --> 00:28:23,900 las dimensiones, vale, estoy metiéndose 340 00:28:23,900 --> 00:28:25,640 en el componente Backbox Collider 341 00:28:25,640 --> 00:28:27,980 por código, algo que ya vamos sabiendo 342 00:28:27,980 --> 00:28:28,519 hacer, ¿verdad? 343 00:28:29,460 --> 00:28:31,680 Y pues habrá que decir offset en X 344 00:28:31,680 --> 00:28:33,880 en este momento 345 00:28:33,880 --> 00:28:35,779 0, si yo pulso la letra control es 346 00:28:35,779 --> 00:28:36,700 0,35. 347 00:28:37,980 --> 00:28:39,839 Se puede ir ajustando visualmente 348 00:28:39,839 --> 00:28:41,440 y luego por código se meten esas 349 00:28:41,440 --> 00:28:42,319 medidas. 350 00:28:43,880 --> 00:28:44,559 ¿Sí? Bueno. 351 00:28:45,619 --> 00:28:47,319 Hasta aquí más o menos me vais siguiendo. 352 00:28:49,980 --> 00:28:51,980 Y me meto más con el 353 00:28:51,980 --> 00:28:53,539 Animator Controller. 354 00:28:53,539 --> 00:28:55,420 Vale. Animator Controller. 355 00:28:55,420 --> 00:29:12,700 Pues lo dicho, cuando he añadido estos clips de animación al robot que hemos incorporado, a medida que vaya asociando más o menos animaciones a ese objeto, más de estos nodos irán apareciendo. 356 00:29:12,700 --> 00:29:15,799 que ojo, aparecen por defecto 357 00:29:15,799 --> 00:29:17,299 pero yo lo puedo borrar 358 00:29:17,299 --> 00:29:19,359 borrándolo 359 00:29:19,359 --> 00:29:20,880 que porque se haya creado 360 00:29:20,880 --> 00:29:23,220 con el objeto seleccionado 361 00:29:23,220 --> 00:29:25,099 se puede aparecer aquí pero en cierto momento 362 00:29:25,099 --> 00:29:26,500 no puede sobrar y borrarlo 363 00:29:26,500 --> 00:29:29,140 o más interesante entiendo porque esto si no lo unimos 364 00:29:29,140 --> 00:29:30,599 pues ahí está y tampoco pasa nada 365 00:29:30,599 --> 00:29:33,059 estos triangulitos hemos dicho que son los 366 00:29:33,059 --> 00:29:35,339 clips de animación, entonces yo puedo coger 367 00:29:35,339 --> 00:29:36,640 uno y meterlo aquí 368 00:29:36,640 --> 00:29:39,400 que es un nodo que representa esa animación 369 00:29:39,400 --> 00:29:40,539 ¿vale? entonces 370 00:29:40,539 --> 00:29:43,460 incluso, esto lo vais a ver 371 00:29:43,460 --> 00:29:44,579 en el siguiente tema 372 00:29:44,579 --> 00:29:47,380 cuando hagáis animaciones de objetos 3D 373 00:29:47,380 --> 00:29:49,539 y a lo mejor tenéis un rig 374 00:29:49,539 --> 00:29:51,460 del cuerpo y vais a meter 375 00:29:51,460 --> 00:29:53,420 otra animación compatible con 376 00:29:53,420 --> 00:29:55,420 ese rig de cuerpo, que venga 377 00:29:55,420 --> 00:29:57,400 de otro sitio, de Mixamo, esto cuando veáis 378 00:29:57,400 --> 00:29:58,779 el tema 6, lo veréis 379 00:29:58,779 --> 00:30:01,400 claro, que no venga con 380 00:30:01,400 --> 00:30:03,259 el mismo FBX, con la misma 381 00:30:03,259 --> 00:30:05,180 geometría 3D, no significa que no podamos 382 00:30:05,180 --> 00:30:07,140 incorporar otras animaciones que venían 383 00:30:07,140 --> 00:30:08,440 de otro sitio, siempre y cuando 384 00:30:08,440 --> 00:30:11,660 en el caso de 3D, pues estén relacionados 385 00:30:11,660 --> 00:30:13,299 bien los puntos de rigging con el 386 00:30:13,299 --> 00:30:15,140 avatar, con el esqueleto 387 00:30:15,140 --> 00:30:17,299 inicial, ¿vale? Esto ya lo veremos, pero que 388 00:30:17,299 --> 00:30:19,319 sepáis que va a ser incluso frecuente 389 00:30:19,319 --> 00:30:21,480 coger animaciones de distintos modelos 390 00:30:21,480 --> 00:30:23,220 e incorporarlos al mismo animator 391 00:30:23,220 --> 00:30:25,259 para luego ir pasando de uno a otro, ¿vale? 392 00:30:25,359 --> 00:30:26,940 Esto tendrá más sentido probablemente 393 00:30:26,940 --> 00:30:29,539 en el futuro, pero aquí también, yo por ejemplo 394 00:30:29,539 --> 00:30:31,420 ahora mismo, cojo 395 00:30:31,420 --> 00:30:33,339 este robot walk que hice en otro 396 00:30:33,339 --> 00:30:35,519 momento, ¿vale? Es verdad que aquí, si me 397 00:30:35,519 --> 00:30:37,400 fijo, es el mismo robot porque es el 398 00:30:37,400 --> 00:30:39,059 mismo dibujo, ¿no? Entonces yo 399 00:30:39,059 --> 00:30:41,519 si yo ahora fuera a este objeto que tengo aquí 400 00:30:41,519 --> 00:30:43,359 a este robot 401 00:30:43,359 --> 00:30:43,859 tutoría 402 00:30:43,859 --> 00:30:47,440 si le digo 403 00:30:47,440 --> 00:30:48,900 que 404 00:30:48,900 --> 00:30:51,819 por defecto 405 00:30:51,819 --> 00:30:53,440 el que quiero que 406 00:30:53,440 --> 00:30:54,819 se haga, ¿vale? Sea 407 00:30:54,819 --> 00:30:57,140 dame un segundo y ahora os explico esto, sea este 408 00:30:57,140 --> 00:30:59,259 robot walk, vais a ver que ya el que se está 409 00:30:59,259 --> 00:31:01,380 reproduciendo en ese game object es el 410 00:31:01,380 --> 00:31:03,380 que está caminando, fijaos que 411 00:31:03,380 --> 00:31:05,299 está caminando o parece, pero no 412 00:31:05,299 --> 00:31:07,380 se mueve, solo está haciendo una animación en el sitio 413 00:31:07,380 --> 00:31:11,420 como está diseñado 414 00:31:11,420 --> 00:31:14,279 pero no se mueve en el espacio 415 00:31:14,279 --> 00:31:18,119 entonces eso, que sirve para ir conectando 416 00:31:18,119 --> 00:31:19,640 distintas animaciones entre uno y otro 417 00:31:19,640 --> 00:31:22,380 un concepto interesante que es esto 418 00:31:22,380 --> 00:31:25,759 por lo que algunas cajas se ven en naranja 419 00:31:25,759 --> 00:31:29,839 es este concepto de que dando clic con botón derecho 420 00:31:29,839 --> 00:31:31,839 podemos fijar uno de estos estados 421 00:31:31,839 --> 00:31:33,240 estos nodos se llaman estados 422 00:31:33,240 --> 00:31:35,839 como el que surge por defecto 423 00:31:35,839 --> 00:31:41,779 Y ese va a ser el que se anime de primeras 424 00:31:41,779 --> 00:31:43,180 Es decir, yo cuando dé al play 425 00:31:43,180 --> 00:31:48,319 Va a empezar la animación desde ese primer nodo 426 00:31:48,319 --> 00:31:52,259 Yo lo llamo nodo, pero bueno, sería más correcto decir desde ese primer estado 427 00:31:52,259 --> 00:31:54,240 Entonces, aquí hay un nodo de entrada 428 00:31:54,240 --> 00:31:55,619 Que es cuando entres en el nivel 429 00:31:55,619 --> 00:31:58,220 Ve al que esté conectado aquí 430 00:31:58,220 --> 00:32:00,180 Que va a ser por defecto ese, que es el naranja 431 00:32:00,180 --> 00:32:02,940 Si yo pusiera este, veis que el que se está reproduciendo es este 432 00:32:02,940 --> 00:32:07,559 ¿Vale? Entonces, una vez tenemos esto, más ingredientes 433 00:32:07,559 --> 00:32:11,980 De estas animaciones que hemos creado, si nos vamos metiendo en las distintas animaciones 434 00:32:11,980 --> 00:32:15,599 En la animación en sí, no en el nodo, en la animación en sí, en el panel proyecto 435 00:32:15,599 --> 00:32:19,700 Vais a ver que hay tres opciones, bastante relevantes las tres 436 00:32:19,700 --> 00:32:23,059 Pero ahora mismo nos interesa sobre todo una 437 00:32:23,059 --> 00:32:27,180 Más para 2D, una que es que se haga en bucle 438 00:32:27,180 --> 00:32:30,799 Es decir, si yo desactivara en la de salto, por ejemplo, tendría 439 00:32:30,799 --> 00:32:33,059 y tiene sentido que esto del bucle 440 00:32:33,059 --> 00:32:35,359 se desactive, porque cuando saltamos 441 00:32:35,359 --> 00:32:37,279 queremos que el salto, la animación de salto 442 00:32:37,279 --> 00:32:39,099 sea una vez y no se siga 443 00:32:39,099 --> 00:32:40,200 haciendo el salto 444 00:32:40,200 --> 00:32:43,180 si queremos que haga doble salto, pues lanzaríamos 445 00:32:43,180 --> 00:32:45,039 otra vez, daríamos a lo mejor a la barra espaciadora 446 00:32:45,039 --> 00:32:47,259 y se le haría 447 00:32:47,259 --> 00:32:49,180 otra vez la animación, pero no queremos 448 00:32:49,180 --> 00:32:51,099 que se haga un bucle, entonces mira, de hecho la de salto 449 00:32:51,099 --> 00:32:51,539 la 450 00:32:51,539 --> 00:32:55,160 desconecto, ¿vale? y la de idle 451 00:32:55,160 --> 00:32:57,380 por defecto ya viene en bucle y por eso 452 00:32:57,380 --> 00:32:59,259 pues se está haciendo en loop, ¿vale? importante porque 453 00:32:59,259 --> 00:33:22,019 Porque si no, por mucho que aquí parezca que esto es un bucle infinito, fijaos que si yo voy a esta animación y se lo quito, bueno, espera, que lo estoy haciendo aquí, y ahora mismo, este idle tutorial no se debería reproducir en bucle, y ahí se ha parado, ¿vale? 454 00:33:22,019 --> 00:33:24,319 fijaos que se ha parado y si voy al animator 455 00:33:24,319 --> 00:33:26,779 aquí aunque ponga que se está reproduciendo 456 00:33:26,779 --> 00:33:28,539 fijaos que no se mueve 457 00:33:28,539 --> 00:33:29,180 ¿vale? 458 00:33:30,079 --> 00:33:32,359 bueno, pues es importante que esto esté 459 00:33:32,359 --> 00:33:33,460 activo, ¿vale? 460 00:33:34,059 --> 00:33:35,460 porque es la animación de base que hay 461 00:33:35,460 --> 00:33:37,660 el bucle seguirá reproduciéndose 462 00:33:37,660 --> 00:33:40,900 por... según el animator 463 00:33:40,900 --> 00:33:42,279 pero la animación no, ¿vale? 464 00:33:42,279 --> 00:33:43,460 pueden ocurrir estas cosas 465 00:33:43,460 --> 00:33:46,759 vamos ahora a lo que es 466 00:33:46,759 --> 00:33:48,220 las conexiones 467 00:33:48,220 --> 00:33:50,180 o como pasamos de un estado a otro 468 00:33:50,180 --> 00:33:53,680 y para esto voy a ir al que ya está hecho 469 00:33:53,680 --> 00:33:55,559 voy a hacer un primero muy básico 470 00:33:55,559 --> 00:33:57,559 para que veáis el del salto por ejemplo 471 00:33:57,559 --> 00:34:00,140 que es 472 00:34:00,140 --> 00:34:03,660 que se deben crear entre estas animaciones 473 00:34:03,660 --> 00:34:05,700 distintos, lo que se llaman transiciones 474 00:34:05,700 --> 00:34:07,740 para hacer una transición se clica 475 00:34:07,740 --> 00:34:09,699 con botón derecho en el 476 00:34:09,699 --> 00:34:11,059 nodo del que queremos que se vaya 477 00:34:11,059 --> 00:34:13,699 y luego aparece 478 00:34:13,699 --> 00:34:15,380 esta flecha que debemos arrastrar 479 00:34:15,380 --> 00:34:17,239 al nodo que queremos que se vaya 480 00:34:17,239 --> 00:34:19,760 yo quiero que vaya en algún momento 481 00:34:19,760 --> 00:34:38,159 Todavía no hemos dicho. En algún momento pase de aquí a salto tutoría. Y de hecho, si por defecto le doy, fijaos, que yo le doy aquí y se ha reproducido este idle tutoría, ha pasado directamente a salto tutoría y se ha reproducido y ya se ha quedado ahí parado porque no está en bucle. 482 00:34:38,159 --> 00:34:52,059 Si yo ese lo pusiera en bucle, en principio, nuevamente, fijaos lo que pasaría. Ahora está haciendo reproducciones en bucle porque nada hace que salga de este nodo y a esto le hemos dicho que sea en bucle. 483 00:34:52,059 --> 00:35:01,679 Entonces es importante ir definiendo qué es loop y qué no es loop para que se vayan realizando estas lógicas de ir una animación tras otra. 484 00:35:02,739 --> 00:35:15,400 Entonces, estas animaciones, normalmente, cuando ponemos una que va de un estado a otro, también es muy frecuente, siempre tiene que ser así, que luego se pase de esa a la primera. 485 00:35:15,400 --> 00:35:38,340 Por ejemplo, en este caso queremos que empiece estando parado, que cuando pulsemos, y aquí pondremos una condición, cuando hemos clicado en esa transición, pondremos una condición que cuando se cumpla pasará a salto, y cuando se ejecute el salto, si no lo ponemos en bucle, aquí habrá otra condición que volverá al idle. 486 00:35:39,179 --> 00:35:47,739 Si queremos que el objeto, que el personaje en este caso, esté quieto hasta que pulsemos la barra espaciadora, salte y luego vuelva a estar tranquilo una vez caiga, 487 00:35:48,280 --> 00:35:56,519 pues ya tenemos un poco la lógica de primero va a ir, va a empezar en este, porque es el que hemos puesto por defecto, va a hacer el salto y luego va a volver a idle. 488 00:35:56,519 --> 00:36:10,460 ¿Sí? ¿Qué ocurre ahora mismo? Que como no hay condición, en cuanto se ejecuta la primera, pasa la segunda y ahora está yendo de una a otra. 489 00:36:10,460 --> 00:36:28,519 A ver, joder, esto es verdad que se me ha ido la interfaz. De hecho, esto de game lo voy a poner aquí. No, lo voy a poner aquí abajo porque no quiero que se vea mucho. Y ahora mismo ahí. Nos viene mejor. 490 00:36:28,519 --> 00:36:46,739 Vale, pues lo dicho, que se va a animar, va a llegar al final, va a pasar al siguiente salto y va a estar en un bucle infinito. ¿Qué es lo que vamos a hacer con estas transiciones y las condiciones de las transiciones? Pues parar estas reproducciones según nos interesa a nosotros o que pase de una a otra según nos interesa a nosotros. 491 00:36:46,739 --> 00:36:48,880 por ejemplo, ya pensando 492 00:36:48,880 --> 00:36:51,000 aquí querremos que suceda el salto 493 00:36:51,000 --> 00:36:52,800 cuando, por ejemplo, pulse la barra 494 00:36:52,800 --> 00:36:54,820 espaciadora, ¿vale? pero cuando 495 00:36:54,820 --> 00:36:56,800 haga el salto, es muy normal 496 00:36:56,800 --> 00:36:58,679 a lo mejor, que pase ya 497 00:36:58,679 --> 00:37:00,599 directamente, sin ninguna condición, es decir, que cuando 498 00:37:00,599 --> 00:37:02,519 acabe esta, vaya a esta, para 499 00:37:02,519 --> 00:37:04,619 para que se quede tranquilo al saltar 500 00:37:04,619 --> 00:37:06,719 es verdad que normalmente habría otra animación de 501 00:37:06,719 --> 00:37:08,460 después de saltar, una de 502 00:37:08,460 --> 00:37:10,940 la reacción, cuando llega al límite, es la animación 503 00:37:10,940 --> 00:37:12,260 de la bajada del salto 504 00:37:12,260 --> 00:37:14,719 pues habría otro nodo aquí, imagina 505 00:37:14,719 --> 00:37:16,280 que fuera este, que habría que conectar 506 00:37:16,280 --> 00:37:37,579 En vez de así, así, ¿vale? Que cuando se haga el salto, al llegar arriba se verá cómo cae, ¿vale? La animación de cómo cae y luego de esta irá a esta, ¿vale? Que las direcciones que van tomando estas animaciones son las que nosotros queramos, ¿vale? Pero que sepáis que eso también es muy frecuente, que haya de ida y vuelta con distintas condiciones, ¿vale? 507 00:37:37,579 --> 00:37:51,980 Entonces, ¿cómo hacemos estas condiciones? Porque el kit de la cuestión ahora es poder gestionar cuando se pasa de una animación a otra. Y fijaos, voy un segundo, porque veáis el controller. 508 00:37:51,980 --> 00:38:18,239 Y bueno, importante porque lo he dicho, pero igual no de la manera suficientemente clara. Todo esto que estamos trabajando y que se está guardando de la configuración de nodos, transiciones, etcétera, se está guardando, está representado en este objeto, en este asset, que en este caso ha cogido el nombre por defecto, Robot Tutoría, que es un objeto de tipo Animator Controller. 509 00:38:18,820 --> 00:38:24,659 Igual que hay clips de animación, esos clips de animación luego se meten como estados en un animator controller. 510 00:38:25,320 --> 00:38:30,159 En un objeto, si no hemos creado nosotros uno específicamente, como habéis visto, al crear la primera animación, 511 00:38:30,360 --> 00:38:34,179 se crea este primer animator y se incorpora ya directamente. 512 00:38:34,179 --> 00:38:39,800 Aquí nuevamente, si nosotros quisiéramos, con clic derecho en esta área, vamos a crear. 513 00:38:40,199 --> 00:38:42,619 Todo esto lo podemos hacer nosotros a voluntad. 514 00:38:42,619 --> 00:39:11,619 Podemos hacer otro animator controller, ¿vale? Que se llame robot tutoría días pares y que sea el que use en el componente animator, ¿vale? Si yo lo arrastro, veis que coge el que yo arrastro aquí, este ahora está vacío, pues a lo mejor, imaginaos, una chorrada, pero el personaje va a tener unas animaciones diferentes según el día o la hora del día en el que se arranca el juego y por código conseguimos detectar qué hora del día es. 515 00:39:11,619 --> 00:39:35,780 Pues aquí luego podríamos tener distintos sistemas de estados, distintos animators controles y según el que nos interese, pues se carga uno u otro, ¿vale? Entonces, que sepáis que todo se gestiona aquí, ¿vale? En 3D también existe este concepto del avatar, que es lo que os había dicho antes del rigging, ¿vale? Que va a ir siguiendo las animaciones, aquí no tiene tanto sentido, esto de Apply Room Motion también lo veremos en el futuro, ¿vale? 516 00:39:35,780 --> 00:40:02,360 Y aquí hay una cosa que os pongo en los apuntes, que no es muy importante y por eso no quiero liar, que es que también los fotogramas o el cálculo de todo lo relacionado con el animator se haga según el update, ¿vale? O según, digamos, por decirlo rápido, la gestión de tiempo de las físicas. Recordad ese physics update, que no eran los mismos tiempos que los del update, ¿vale? Pues con esto podemos cambiar que el refresco se haga de una forma u otra. 517 00:40:02,360 --> 00:40:04,860 Que nos puede interesar, incluso ya en esta tarea 518 00:40:04,860 --> 00:40:06,619 Si ahondáramos mucho 519 00:40:06,619 --> 00:40:09,079 Nos podría interesar, porque teniendo en cuenta 520 00:40:09,079 --> 00:40:10,420 Lo voy a dejar en normal 521 00:40:10,420 --> 00:40:12,679 Aunque se podría poner perfectamente en Animate Physics 522 00:40:12,679 --> 00:40:14,760 Tener en cuenta que los movimientos 523 00:40:14,760 --> 00:40:16,679 Que hemos dicho que vamos a hacer del personaje 524 00:40:16,679 --> 00:40:18,860 Del personaje, no de las plataformas 525 00:40:18,860 --> 00:40:20,480 ¿Vale? Ahora hablamos de eso 526 00:40:20,480 --> 00:40:22,980 Van a ser en base a física, le vamos a dar fuerzas 527 00:40:22,980 --> 00:40:25,000 Entonces queremos que estas reacciones 528 00:40:25,000 --> 00:40:26,940 También se calcuren en base a físicas 529 00:40:26,940 --> 00:40:28,880 Así que bueno, tampoco va a haber una 530 00:40:28,880 --> 00:40:30,739 Diferencia muy amplia 531 00:40:30,739 --> 00:40:36,179 Pero bueno, de hecho, incluso ya con esta lógica que tenemos, tendría más sentido poner el AnimatePhysics. 532 00:40:36,820 --> 00:40:44,079 Vale, vamos a hacer, lo voy a hacer rápido, porque no hay tiempo y prefiero casi que lo veamos ya sobre algo hecho, ¿vale? 533 00:40:44,099 --> 00:40:50,960 Y voy comentando código que tengo yo, o otros ejemplos que ir haciéndolo todo, que tardaríamos muchísimo y no daría tiempo casi nada, ¿vale? 534 00:40:51,340 --> 00:40:58,199 Pero en este robot voy a hacer un script, lo voy a hacer aquí, pues yo qué sé, voy a crear un script, 535 00:40:58,199 --> 00:41:12,079 Se va a llamar Robot Tutoría 24-25. Por si yo en el futuro lo quiero ver, saber de qué año es. Un nombre cualquiera. Esto es regular porque no debería tener números, pero me lo va a admitir. 536 00:41:12,079 --> 00:41:14,800 Pero en principio no uséis números. 537 00:41:15,039 --> 00:41:19,460 Mira, de hecho, voy a poner 24 con letra. 538 00:41:20,780 --> 00:41:30,800 Y recordad, ya me sirve de recordatorio, que si abrís una script que el nombre de su clase no está escrito igual, no lo va a detectar. 539 00:41:31,079 --> 00:41:32,139 Entonces se tiene que llamar igual. 540 00:41:32,719 --> 00:41:34,139 Esto era de la lección 1. 541 00:41:34,679 --> 00:41:40,500 Entonces yo tengo este robot tutoría y se lo voy a aplicar al objeto que quiero que controle, que es el de robot tutoría. 542 00:41:40,500 --> 00:41:42,940 ¿sí? hasta aquí lo de siempre 543 00:41:42,940 --> 00:41:44,820 ¿qué es lo que vamos a hacer? 544 00:41:45,519 --> 00:41:47,500 vamos a ir cambiando 545 00:41:47,500 --> 00:41:48,480 o aportando 546 00:41:48,480 --> 00:41:50,360 distintos parámetros 547 00:41:50,360 --> 00:41:53,599 que sirvan para ir definiendo 548 00:41:53,599 --> 00:41:54,280 condiciones 549 00:41:54,280 --> 00:41:57,739 y si os fijáis, aquí hay algo de layers 550 00:41:57,739 --> 00:41:59,639 las layers son más 551 00:41:59,639 --> 00:42:00,860 complejas y más avanzadas 552 00:42:00,860 --> 00:42:03,860 en el tema 6 algo se apunta pero es más avanzado 553 00:42:03,860 --> 00:42:05,760 y es más para 3D de hecho, no es para esto 554 00:42:05,760 --> 00:42:07,619 que son cada una de estas 555 00:42:07,619 --> 00:42:09,559 igual que os he dicho antes de que se podían ir cargando 556 00:42:09,559 --> 00:42:14,239 distintos animators controllers vale también dentro de un mismo animator controller se pueden 557 00:42:14,239 --> 00:42:20,239 ir haciendo distintas layers vale y que cada una vaya se vayan activando no y vayan guardando o 558 00:42:20,239 --> 00:42:25,460 lanzando distintas nodos de animación incluso se puede combinar que la parte de arriba de un 559 00:42:25,460 --> 00:42:30,780 cuerpo en un 3d en un objeto 3d pues el torso se mueva en base a unas animaciones y la parte 560 00:42:30,780 --> 00:42:36,179 inferior en otra entonces se pueden ir combinando distintas pero esto es más avanzado entonces de 561 00:42:36,179 --> 00:42:39,940 momento vamos a trabajar en la base layer pero aquí hay otra sección que se 562 00:42:39,940 --> 00:42:44,800 llaman parámetros y estos sí son ya importantes los parámetros los 563 00:42:44,800 --> 00:42:50,800 parámetros como indica el nombre van a ser distintas vamos a decir variables 564 00:42:50,800 --> 00:42:55,000 vale dentro de este ámbito de las animaciones que nos sirven para ir 565 00:42:55,000 --> 00:42:59,880 aplicando condiciones vale los parámetros y las condiciones están 566 00:42:59,880 --> 00:43:03,400 íntimamente ligados porque aquí lo que vamos a ir añadiendo en estas 567 00:43:03,400 --> 00:43:07,840 condiciones son parámetros vale que según su valor o no pues permitirán que 568 00:43:07,840 --> 00:43:11,440 esa condición se cumpla o no veis que sin ahora mismo le digo añadir una 569 00:43:11,440 --> 00:43:15,039 condición dice no si es que no existe ningún parámetro efectivamente todavía 570 00:43:15,039 --> 00:43:20,940 no lo hemos creado vale entonces parámetros hay de cuatro tipos ahí y 571 00:43:20,940 --> 00:43:26,199 además los van a sonar todos ya parámetros basados en floats que son 572 00:43:26,199 --> 00:43:31,340 números que pueden tener decimales no voy rápido vale ins que aunque yo meto 573 00:43:31,340 --> 00:43:33,000 decimales? Pues me va a decir que 574 00:43:33,000 --> 00:43:35,420 nanain, ¿vale? Y me lo va 575 00:43:35,420 --> 00:43:35,980 a redondear. 576 00:43:37,280 --> 00:43:39,139 Bulls, que como las booleanas pueden ser 577 00:43:39,139 --> 00:43:41,019 verdaderas o falsas. Y luego 578 00:43:41,019 --> 00:43:43,300 otro concepto que es trigger, con este circulito, que es 579 00:43:43,300 --> 00:43:45,500 que según le das, se activa, 580 00:43:45,559 --> 00:43:47,260 es un disparador, según le das le activas 581 00:43:47,260 --> 00:43:49,219 y vuelve al reposo, ¿vale? Parece 582 00:43:49,219 --> 00:43:51,000 lo mismo que una booleana, pero una booleana tú 583 00:43:51,000 --> 00:43:53,179 le dices true y se queda en true hasta que le 584 00:43:53,179 --> 00:43:55,179 digamos false. En un trigger 585 00:43:55,179 --> 00:43:56,980 es como que se lanza, 586 00:43:57,840 --> 00:43:58,579 ¿vale? Lo dejo aquí, 587 00:43:59,340 --> 00:43:59,880 se lanza 588 00:43:59,880 --> 00:44:20,579 Y en principio, ahora porque no está habiendo más operaciones, pero en principio ya se desmarca enseguida. Es como para acciones momentáneas que hay que lanzar, como un salto. En un salto decimos saltar, se salta y ya está. No queremos estado de saltar, activo, true. Luego quitarlo, falso. Se podría también, pero es otra forma. 589 00:44:20,579 --> 00:44:23,500 Entonces, podemos ir creando varias 590 00:44:23,500 --> 00:44:25,260 Y es importante que hay que darles un nombre 591 00:44:25,260 --> 00:44:28,980 Por ejemplo 592 00:44:28,980 --> 00:44:31,380 Y para ir haciendo ya algo concreto 593 00:44:31,380 --> 00:44:32,440 Voy a ir borrando 594 00:44:32,440 --> 00:44:33,780 Se pueden poner todas las que queramos 595 00:44:33,780 --> 00:44:36,219 Y del mismo tipo se pueden poner varias 596 00:44:36,219 --> 00:44:38,360 Cada una tendrá un nombre 597 00:44:38,360 --> 00:44:40,219 Y iremos diciéndole valores 598 00:44:40,219 --> 00:44:43,300 Entonces 599 00:44:43,300 --> 00:44:46,500 Vamos a este robot 600 00:44:46,500 --> 00:44:49,440 Para ir accediendo a estos parámetros 601 00:44:49,440 --> 00:44:54,320 importante, hay que primero acceder a 602 00:44:54,320 --> 00:44:59,300 hay que crear una variable de tipo animator 603 00:44:59,300 --> 00:45:03,539 ¿vale? recordad, esto nunca es mal momento para 604 00:45:03,539 --> 00:45:07,599 volver a decirlo, que estos son componentes y cada componente ya os he dicho 605 00:45:07,599 --> 00:45:11,599 que es fragmentos de códigos que se han encapsulado y alguien lo ha programado 606 00:45:11,599 --> 00:45:15,099 para que se vean estos campos, a los que podemos acceder normalmente, casi siempre 607 00:45:15,099 --> 00:45:18,400 poniendo este nombre, entonces si yo quiero acceder a 608 00:45:18,400 --> 00:45:21,340 las opciones del animator 609 00:45:21,340 --> 00:45:23,360 ¿vale? del animator 610 00:45:23,360 --> 00:45:25,360 y al animator controller, lo primero que habrá 611 00:45:25,360 --> 00:45:27,400 que hacer es capturar ese panel 612 00:45:27,400 --> 00:45:28,940 animator, entonces por ejemplo 613 00:45:28,940 --> 00:45:30,639 voy a hacer, normalmente 614 00:45:30,639 --> 00:45:33,500 al animator se le suele llamar 615 00:45:33,500 --> 00:45:34,840 anim, ya he creado una caja 616 00:45:34,840 --> 00:45:37,579 que va a referenciar a la clase 617 00:45:37,579 --> 00:45:38,860 ¿vale? si me pongo aquí a la clase 618 00:45:38,860 --> 00:45:41,480 de Unity Engine Animator 619 00:45:41,480 --> 00:45:43,219 ¿vale? y como siempre, lo primero 620 00:45:43,219 --> 00:45:45,340 normalmente, ¿no? digo, que hay que 621 00:45:45,340 --> 00:45:47,179 hacer es, hacer este GetComponent 622 00:45:47,179 --> 00:45:49,420 en animator, etc. ¿Vale? Incluso si ya le doy 623 00:45:49,420 --> 00:45:51,219 al tabulador, con la sugerencia 624 00:45:51,219 --> 00:45:53,159 que tiene, aquí ya he capturado 625 00:45:53,159 --> 00:45:55,239 que en esta variable llamada anim 626 00:45:55,239 --> 00:45:57,420 pueda acceder a los 627 00:45:57,420 --> 00:45:58,699 valores del animator. 628 00:45:59,400 --> 00:46:00,940 ¿Vale? Por eso cuando yo pongo anim, punto, 629 00:46:01,699 --> 00:46:02,880 pues salen cosas como 630 00:46:02,880 --> 00:46:04,260 esto de 631 00:46:04,260 --> 00:46:07,360 getBull, setBull, 632 00:46:08,219 --> 00:46:08,460 ¿vale? 633 00:46:13,000 --> 00:46:13,519 Quiero 634 00:46:13,519 --> 00:46:15,460 alguno de los que salgan aquí. Fijaos, 635 00:46:15,460 --> 00:46:17,420 esto de applyRootMotion, pues habrá una 636 00:46:17,420 --> 00:46:19,500 de RootMotion. Pues yo ahora veo, 637 00:46:19,500 --> 00:46:32,400 Mira, ApplyRootMotion. Y yo aquí ya podría acceder a ese parámetro. Para acceder precisamente a los parámetros, a estos parámetros, en el tema, voy a abrir un segundo el tema. 638 00:46:32,400 --> 00:46:36,739 lo tengo, no, dame un segundo 639 00:46:36,739 --> 00:46:40,340 que lo abro aquí, en una de las secciones del tema os pongo 640 00:46:40,340 --> 00:46:44,219 varios de los métodos que se pueden usar 641 00:46:44,219 --> 00:46:48,139 a ver, pa pa pa, directriz 642 00:46:48,139 --> 00:46:50,480 animation, vale, ya estoy llegando 643 00:46:50,480 --> 00:46:54,280 lanzar transiciones 644 00:46:54,280 --> 00:46:59,760 parámetros, vale, que son 645 00:46:59,760 --> 00:47:18,179 Esto es de aquí, ¿no? Anim, ¿vale? Y por eso lo explicas, es lo mismo que tenemos aquí. Podemos incluso acceder al animator de otro objeto si lo arrastramos por un serialize field, ¿vale? Pero eso, existen set trigger, set pull, set float, set, ¿cuál sería la otra? set int, ¿vale? 646 00:47:18,179 --> 00:47:36,019 Y entonces, con esto, lo que podemos ir haciendo es establecer el valor del parámetro. Entonces, ¿qué quiere decir? Imaginaos que yo quiero fijar o decir, y esto lo voy a llamar, que va a ser el trigger que sirve para el salto, ¿vale? 647 00:47:36,019 --> 00:47:57,920 Y ojo, este nombre va a ser un string que luego vamos a usar, ¿vale? Pues si yo lo que quiero es que cuando, if, y vamos a hacer uno, if input get key down, ¿vale? Cuando pulse una tecla, que en este caso va a ser la barra espaciadora, vamos, space, ¿vale? 648 00:47:57,920 --> 00:48:16,829 Que cuando eso ocurra, yo voy a decirle que este disparador efectivamente se ejecute, ¿vale? Set, en este caso es trigger, ¿vale? Pero igual que había cuatro tipos de parámetro, aquí son todos iguales. Solo hay que cambiar el nombre del tipo de parámetro que es. 649 00:48:16,829 --> 00:48:19,369 estará el setTrigger, estará el setBull 650 00:48:19,369 --> 00:48:21,329 estará el setInt 651 00:48:21,329 --> 00:48:22,969 vale, mira, si yo empiezo a escribir 652 00:48:22,969 --> 00:48:25,070 aquí, pues me empieza 653 00:48:25,070 --> 00:48:26,929 a ayudar, setInteger 654 00:48:26,929 --> 00:48:29,170 vale, pero en este caso lo que queremos es 655 00:48:29,170 --> 00:48:31,269 un setTrigger, de todos modos 656 00:48:31,269 --> 00:48:32,949 a ver, una cosa, setBull 657 00:48:32,949 --> 00:48:33,469 setFlow 658 00:48:33,469 --> 00:48:36,889 setInteger, sí, vale, pues 659 00:48:36,889 --> 00:48:39,070 setTrigger, y aquí lo tenemos 660 00:48:39,070 --> 00:48:40,530 cuando nos ponemos encima dice 661 00:48:40,530 --> 00:48:43,030 fija el valor del trigger 662 00:48:43,030 --> 00:48:44,630 vale, pues vale 663 00:48:44,630 --> 00:48:46,510 cuando nos ponemos aquí 664 00:48:46,510 --> 00:48:48,590 si yo le digo que 665 00:48:48,590 --> 00:48:50,889 al darle a la barra espaciadora el trigger que lance 666 00:48:50,889 --> 00:48:52,190 sea el que yo he llamado salto 667 00:48:52,190 --> 00:48:53,989 ya deja de haber estos 668 00:48:53,989 --> 00:48:57,090 fallitos y vamos a ver 669 00:48:57,090 --> 00:48:59,030 ya directamente sin hacer nada más 670 00:48:59,030 --> 00:49:00,949 que yo cuando arranque el juego 671 00:49:00,949 --> 00:49:02,929 y esté en la 672 00:49:02,929 --> 00:49:03,510 pestaña game 673 00:49:03,510 --> 00:49:06,170 para que se reaccione 674 00:49:06,170 --> 00:49:08,309 yo cuando le dé a la barra espaciadora, fijaos 675 00:49:08,309 --> 00:49:09,429 y se puede ir viendo en vivo 676 00:49:09,429 --> 00:49:12,050 y ojo también, para que se vean 677 00:49:12,050 --> 00:49:14,110 estas barras en reproducción y el animator 678 00:49:14,110 --> 00:49:16,230 etcétera, tenéis que tener seleccionado el objeto 679 00:49:16,230 --> 00:49:18,030 Que pueda haber varios objetos con Animator 680 00:49:18,030 --> 00:49:20,289 No solo por reproducir el juego, aquí se va a ver 681 00:49:20,289 --> 00:49:21,750 Seleccionar ese objeto 682 00:49:21,750 --> 00:49:24,309 Cuando yo le dé a la barra espaciadora 683 00:49:24,309 --> 00:49:25,909 Fijaos aquí, le doy 684 00:49:25,909 --> 00:49:27,570 Y se ha lanzado 685 00:49:27,570 --> 00:49:29,610 Como no se está ejecutando nada, se queda ahí 686 00:49:29,610 --> 00:49:31,889 Pero en cuanto se ejecutara lo que nos interesa 687 00:49:31,889 --> 00:49:35,070 Pues volvería a su estado original 688 00:49:35,070 --> 00:49:36,429 Fijaos que yo 689 00:49:36,429 --> 00:49:37,869 Gracias al código, ahora he cambiado 690 00:49:37,869 --> 00:49:39,849 Algo, un parámetro 691 00:49:39,849 --> 00:49:42,010 Y hay un parámetro aquí, que lo bueno 692 00:49:42,010 --> 00:49:43,929 Es que como parámetro que hemos dicho 693 00:49:43,929 --> 00:49:45,070 Se puede meter en condiciones 694 00:49:45,070 --> 00:49:47,610 cuando yo ahora le di, bueno voy a borrar 695 00:49:47,610 --> 00:49:49,110 el otro que había puesto que estaba vacío 696 00:49:49,110 --> 00:49:51,590 cuando le di añadir una condición 697 00:49:51,590 --> 00:49:53,590 ahora mismo solo aparece salto, no hay más 698 00:49:53,590 --> 00:49:55,469 si hubiera más podría seleccionar más 699 00:49:55,469 --> 00:49:57,929 y fijaos que en un trigger no hay nada más 700 00:49:57,929 --> 00:49:59,750 es, le has dado a que 701 00:49:59,750 --> 00:50:01,570 se ejecute, vale 702 00:50:01,570 --> 00:50:03,670 pues fijaos ahora, si yo veo 703 00:50:03,670 --> 00:50:05,789 aquí el muñeco que está 704 00:50:05,789 --> 00:50:07,789 en 705 00:50:07,789 --> 00:50:08,550 perpetuo 706 00:50:08,550 --> 00:50:12,110 perpetua repetición 707 00:50:12,110 --> 00:50:13,650 del idle y en cuanto yo 708 00:50:13,650 --> 00:50:15,789 de A la barra espaciadora 709 00:50:15,789 --> 00:50:17,730 fijaos como va a pasar al otro porque se cumple 710 00:50:17,730 --> 00:50:18,269 la condición 711 00:50:18,269 --> 00:50:21,789 ¿vale? y ha vuelto al otro 712 00:50:21,789 --> 00:50:23,449 porque como aquí no hay condición 713 00:50:23,449 --> 00:50:25,590 en cuanto se ejecuta una vez, vuelve 714 00:50:25,590 --> 00:50:27,329 al anterior y además no está en bucle el salto 715 00:50:27,329 --> 00:50:28,269 ¿vale? 716 00:50:29,650 --> 00:50:31,650 con esto lo que podemos ir haciendo es 717 00:50:31,650 --> 00:50:33,670 ir, pues eso 718 00:50:33,670 --> 00:50:35,489 jugando con los parámetros 719 00:50:35,489 --> 00:50:36,329 que nos interesa 720 00:50:36,329 --> 00:50:39,530 la gracia de esto es que el set trigger 721 00:50:39,530 --> 00:50:41,929 es el más básico, pero si por ejemplo 722 00:50:41,929 --> 00:50:43,269 yo le digo 723 00:50:43,269 --> 00:50:45,610 que esto del salto 724 00:50:45,610 --> 00:50:46,510 se dé cuando 725 00:50:46,510 --> 00:50:49,550 salto, claro, aquí habría que poner 726 00:50:49,550 --> 00:50:51,590 un parámetro, voy a decirle que ahora 727 00:50:51,590 --> 00:50:53,750 haya un parámetro que sea de tipo 728 00:50:53,750 --> 00:50:55,130 float, que va a ser 729 00:50:55,130 --> 00:50:57,590 salto f por float 730 00:50:57,590 --> 00:50:59,650 ¿vale? y por defecto 731 00:50:59,650 --> 00:51:01,710 aparece cero, aquí podemos cambiar el valor 732 00:51:01,710 --> 00:51:03,730 pero bueno, lo que queremos es cambiar este valor 733 00:51:03,730 --> 00:51:04,690 por código realmente 734 00:51:04,690 --> 00:51:07,670 entonces, cuando nos 735 00:51:07,670 --> 00:51:09,929 ponemos aquí yo puedo decir que el valor 736 00:51:09,929 --> 00:51:11,730 ¿vale? y bueno, la diferencia con el 737 00:51:11,730 --> 00:51:16,809 trigger si empezamos a escribir aquí el set float y nos ponemos aquí encima vais 738 00:51:16,809 --> 00:51:20,349 a ver que aquí pide dos valores y de hecho hay tres sobrecargas podríamos 739 00:51:20,349 --> 00:51:24,969 mirar más pero por defecto lo que nos pide un set float es 740 00:51:24,969 --> 00:51:30,130 el nombre de ese parámetro y el valor que pasamos a ese parámetro y lo podemos 741 00:51:30,130 --> 00:51:35,829 ir actualizando en todo momento vale por tanto si yo por ejemplo en este set float 742 00:51:35,829 --> 00:51:41,530 yo le digo que este a lo que va a tocar es a el parámetro tipo float que se 743 00:51:41,530 --> 00:51:48,030 llamado salto F, ¿vale? Y luego por coma, el segundo argumento es un valor, ¿vale? 744 00:51:48,050 --> 00:51:54,090 Si yo por defecto le digo que ponga 10, ¿vale? Y guardo, ahora mismo estoy diciendo 745 00:51:54,090 --> 00:51:58,929 cuando pulse la barra espaciadora me pones en este parámetro de tipo float 746 00:51:58,929 --> 00:52:06,489 llamado salto F un valor de 10, ¿vale? Pues entonces yo ejecuto y vais a ver 747 00:52:06,489 --> 00:52:10,929 que cuando le dé a la barra espaciadora se pone 10. Ahora mismo no tiene más repercusión 748 00:52:10,929 --> 00:52:16,369 Más allá de que ponga aquí 10, porque no hay ninguna condición que pida eso. 749 00:52:16,650 --> 00:52:20,289 Pero para empezar ya podemos incorporar la otra condición, ¿vale? 750 00:52:20,289 --> 00:52:25,969 Salto F y aquí sí que ya podemos decir que el valor sea mayor o menor a un número. 751 00:52:26,610 --> 00:52:35,050 O, bueno, pues que, por ejemplo, y podemos ir incorporando varios, ¿vale? 752 00:52:35,050 --> 00:52:40,730 Que salto F, que sea mayor, que haya varios floats aquí, por ejemplo, con distintos valores. 753 00:52:40,929 --> 00:52:56,730 Y este sea vertical. Y entonces, vertical podemos decir que si salto F es mayor de 0 y vertical menor de 10, yo que sé, por decir cosas, se cumple esta condición y entonces se pasa de un elemento a otro. 754 00:52:56,730 --> 00:53:05,070 Entonces, esta es la base para ir generando estas transiciones 755 00:53:05,070 --> 00:53:07,489 Como os he dicho, ahora voy al que ya está hecho para ir más rápido 756 00:53:07,489 --> 00:53:14,150 Pero necesito que me digáis que la idea más o menos está clara de funcionamiento 757 00:53:14,150 --> 00:53:18,590 Luego, evidentemente, seguir pensando qué distintas animaciones hay 758 00:53:18,590 --> 00:53:20,469 Cómo se tienen que pasar entre unas a otras 759 00:53:20,469 --> 00:53:25,349 Si a lo mejor nos interesa ir de esta a esta y luego a la otra que os he dicho o no 760 00:53:25,349 --> 00:53:27,630 ¿vale? y luego además 761 00:53:27,630 --> 00:53:29,750 bueno, hay dos otros elementos 762 00:53:29,750 --> 00:53:31,469 que os quiero indicar ahora 763 00:53:31,469 --> 00:53:33,489 que es, que estos claro 764 00:53:33,489 --> 00:53:35,449 van siguiendo un orden lógico, empieza según se entra 765 00:53:35,449 --> 00:53:37,429 al nivel, se va a este y según 766 00:53:37,429 --> 00:53:39,269 se cumplen condiciones va de uno a otro 767 00:53:39,269 --> 00:53:41,190 siguiendo las flechas ¿vale? porque 768 00:53:41,190 --> 00:53:42,969 es importante, si yo aquí 769 00:53:42,969 --> 00:53:45,789 añado otra animación 770 00:53:45,789 --> 00:53:47,750 bueno, esa justo 771 00:53:47,750 --> 00:53:49,570 bueno, da igual, esta y esta 772 00:53:49,570 --> 00:53:51,730 ¿vale? si yo pongo 773 00:53:51,730 --> 00:53:53,650 esto y pongo 774 00:53:53,650 --> 00:53:55,389 esto, ¿vale? Para que veáis 775 00:53:55,389 --> 00:53:57,809 tal. Por mucho que parezca 776 00:53:57,809 --> 00:53:59,150 que aquí está unido y va de 777 00:53:59,150 --> 00:54:01,389 AIDELTUTORIA a 778 00:54:01,389 --> 00:54:03,389 ROBOTWALK, ¿vale? Estoy poniendo 779 00:54:03,389 --> 00:54:04,250 cualquiera de ejemplo. 780 00:54:05,210 --> 00:54:07,489 Para que se llegue de esta a esta, tal y como está ahora 781 00:54:07,489 --> 00:54:09,570 configurado, tendría que ir pasando por todas estas 782 00:54:09,570 --> 00:54:11,230 y cumpliéndose todas las condiciones, ¿vale? 783 00:54:11,309 --> 00:54:12,710 Que en ocasiones también es 784 00:54:12,710 --> 00:54:15,369 poner otra condición aquí, otra transición, 785 00:54:15,510 --> 00:54:17,650 perdonad, y si se da esta condición 786 00:54:17,650 --> 00:54:18,989 hará este paso 787 00:54:18,989 --> 00:54:21,690 y si se cumple esta, se hará este otro. 788 00:54:22,369 --> 00:54:23,469 ¿Vale? Y luego hay otra 789 00:54:23,469 --> 00:54:25,389 cosa que es, imaginaos que estáis en un juego y 790 00:54:25,389 --> 00:54:27,309 queréis que cuando orde una bala 791 00:54:27,309 --> 00:54:29,190 pues el personaje se muera 792 00:54:29,190 --> 00:54:31,130 haga la animación de morir, claro 793 00:54:31,130 --> 00:54:33,070 no podemos ir previendo que 794 00:54:33,070 --> 00:54:35,210 desde cualquiera de las situaciones de movimiento 795 00:54:35,210 --> 00:54:37,050 que tenga el juego se muera 796 00:54:37,050 --> 00:54:39,210 entonces aquí hay otro nodo 797 00:54:39,210 --> 00:54:41,110 especial, este de exit 798 00:54:41,110 --> 00:54:43,110 la verdad es que no, bueno es por si 799 00:54:43,110 --> 00:54:44,889 se quiere salir del controller, si no me equivoco 800 00:54:44,889 --> 00:54:46,869 la verdad es que no lo sé 801 00:54:46,869 --> 00:54:48,789 muy bien como decir 802 00:54:48,789 --> 00:54:51,190 la funcionalidad no la tengo muy clara 803 00:54:51,190 --> 00:54:53,050 pero sí que 804 00:54:53,050 --> 00:54:58,650 Está este de, desde cualquier estado puedo saltar al que una con este any state, ¿vale? 805 00:54:58,650 --> 00:55:04,190 Entonces, aunque estemos aquí con esta sucesión de nodos, ¿vale? 806 00:55:04,690 --> 00:55:06,369 Incluso se puede poner más de uno, ¿eh? 807 00:55:06,550 --> 00:55:08,329 Se pueden poner dos independientes. 808 00:55:09,030 --> 00:55:13,309 Si en algún momento hay una condición que se cumple, ¿vale? 809 00:55:13,889 --> 00:55:18,429 Da igual en la que estemos de la secuencia lógica que hemos ido estableciendo aquí, ¿vale? 810 00:55:18,429 --> 00:55:40,750 Que si se da esta condición va a saltar de esa a la que pongamos aquí, por ejemplo para muerte, da igual que estemos saltando, que estemos andando, que estemos bailando, yo que sé, lo que sea, que si se cumple la condición que esté establecida de any state se ejecuta, ¿vale? Eso es importante porque a veces si no se hacen unos líos increíbles cuando se puede recurrir a este nodo, ¿vale? 811 00:55:40,750 --> 00:56:08,750 Y otro parámetro importante es este del hash exit time, que por defecto viene marcado, que significa que a veces podemos tener animaciones, por poder, se puede de 20 segundos, ¿vale? Pero a lo mejor en mitad de esa animación de ir andando, porque es muy larga, el paso es muy largo, yo qué sé, dura mucho, en cuanto yo le dé a la barra espaciadora, quiero que salte, no que acabe toda la animación, que es lo que hace por defecto con esto de hash exit time, ¿vale? 812 00:56:08,750 --> 00:56:11,030 Hace toda la animación y luego ya pasa a la siguiente 813 00:56:11,030 --> 00:56:13,010 Cuando se pasa a la siguiente, claro 814 00:56:13,010 --> 00:56:14,369 Si no, es un bucle, recordad 815 00:56:14,369 --> 00:56:16,630 Si yo desactivo esto 816 00:56:16,630 --> 00:56:18,869 En cuanto, da igual en qué momento 817 00:56:18,869 --> 00:56:20,670 De la animación me encuentre, va a hacer 818 00:56:20,670 --> 00:56:22,429 Si se cumple la condición, va a pasar a la siguiente 819 00:56:22,429 --> 00:56:24,670 ¿Vale? Ahora mismo esta es corta 820 00:56:24,670 --> 00:56:26,309 Pero en cuanto yo pulse 821 00:56:26,309 --> 00:56:28,590 Bueno, ahora es que justo he hecho esto de la prueba 822 00:56:28,590 --> 00:56:31,130 De que ponga 10, pero si tuviera lo del trigger 823 00:56:31,130 --> 00:56:31,969 Lo pongo en un segundo 824 00:56:31,969 --> 00:56:35,760 ¿Vale? Set trigger 825 00:56:35,760 --> 00:56:37,860 Set trigger 826 00:56:37,860 --> 00:56:39,880 Salto, y este no tiene 827 00:56:39,880 --> 00:56:41,679 segundo parámetro, guardo 828 00:56:41,679 --> 00:56:44,099 y ahora mismo la condición es 829 00:56:44,099 --> 00:56:45,940 vale, ojo, estoy haciéndolo 830 00:56:45,940 --> 00:56:47,880 todo también para que veáis la secuencia 831 00:56:47,880 --> 00:56:50,079 de lo que hay que ir comprobando y ahora con salto 832 00:56:50,079 --> 00:56:50,780 se 833 00:56:50,780 --> 00:56:54,000 se pasaría, se cumpliría 834 00:56:54,000 --> 00:56:55,880 esta condición, si yo además 835 00:56:55,880 --> 00:56:57,760 quiero, para que lo veamos mejor 836 00:56:57,760 --> 00:56:59,440 quiero alargar esta animación 837 00:56:59,440 --> 00:57:01,960 le doy doble clic a la animación 838 00:57:01,960 --> 00:57:03,760 al pulsar el estado 839 00:57:03,760 --> 00:57:06,079 y le doy al objeto y voy a decir 840 00:57:06,079 --> 00:57:07,940 mira, pues mientras está en 841 00:57:07,940 --> 00:57:12,980 idle voy a hacer que esta animación dure mucho más la voy a alargar vale pues ahora dura 842 00:57:14,619 --> 00:57:24,320 del orden de dos minutos parece vale entonces ahora cuando yo reproduzco dos minutos dos 843 00:57:24,320 --> 00:57:30,139 segundos pero más larga ahora en cuanto se cumpliera esta condición de salto que la voy 844 00:57:30,139 --> 00:57:33,980 a cumplir en cuanto de la barra espaciadora me voy a esperar que está aquí al principio le doy 845 00:57:33,980 --> 00:57:39,920 y veis que ha pasado vale si esta transición tuviera has exit time vale lo vuelvo a poner 846 00:57:39,920 --> 00:57:47,300 aunque yo le dé al salto hasta que no acabe vale bueno lo vuelvo a poner que nos ha visto bien 847 00:57:47,300 --> 00:57:51,440 también dependiendo de cuánto de al final y al principio puede hacerlo vale pero si le doy veis 848 00:57:51,440 --> 00:57:55,940 que le dado y hasta que no vale bueno no lo veis pero le voy a dar según está al comienzo de la 849 00:57:55,940 --> 00:58:03,440 barra vale se hace un bucle y le doy aunque le haya dado hasta que no está acabando vale y se 850 00:58:03,440 --> 00:58:08,239 cumple este periodo de transición para que haya una pequeña transición, no pasa al otro. Eso también 851 00:58:08,239 --> 00:58:14,400 es importante. Entonces, a menos que me digáis que hay algo que queráis que veamos de esto de ahora 852 00:58:14,400 --> 00:58:26,280 mismo, voy a desactivar este robot y activo el otro. Lo tengo aquí. ¿Qué tal? Hasta aquí. Más o menos es lo que pone 853 00:58:26,280 --> 00:58:33,239 en el tema, creo. Tampoco lo que está en el vídeo de Álvaro. Vale, pues vamos a ello. Aquí tengo 854 00:58:33,239 --> 00:58:39,239 varios estados como podéis ver a ver cómo podemos hacer para que lo veáis lo mejor posible 855 00:58:40,880 --> 00:58:48,039 vale que va son las distintas animaciones que se han ido estableciendo incluidas algunas que 856 00:58:48,039 --> 00:58:53,179 he sacado de otras bueno ahora lo vamos viendo veis que algunas las tengo por aquí de prueba 857 00:58:53,179 --> 00:58:58,599 vale estando como no están conectadas a ninguna de las operaciones ni de ni stay ni de entry pues 858 00:58:58,599 --> 00:59:03,880 están ahí que las tengo en stand by vale pero tenemos todas estas cuando empieza tiene un 859 00:59:03,880 --> 00:59:09,880 idle no y qué es lo que he hecho fijaos la cantidad de parámetros que tengo en este en 860 00:59:09,880 --> 00:59:17,260 este animator controller tengo un trigger que desencadena cuando detecte lo que sea que una 861 00:59:17,260 --> 00:59:22,500 bala lo toca que se muere pues se lanza por un trigger vale y fijaos que desde este en state 862 00:59:22,500 --> 00:59:40,179 La condición que hay es isDead, solo es esa, como hemos hecho antes con el salto. Hay una variable de tipo, entiendo que será float, esto es algo que nunca sé por qué no lo hacen, de poner aquí si es float o int para tenerlo claro. 863 00:59:40,179 --> 00:59:56,960 Pero bueno, lo normal, aunque aquí están los íntegros, es usar float normalmente. Vale, pues aquí tenemos un float que se llama desplazamiento h, ¿vale? Que ahora veremos, lo voy a unir en todo momento con el axis horizontal de mi mando, del teclado o de lo que sea. 864 00:59:56,960 --> 01:00:10,659 Y en todo momento va a estar definiendo un valor. Si el valor es mayor que 0.1, significa que hay movimiento, que yo quiero que se mueva el personaje. Por tanto, pasará del idle, por ejemplo, aquí al de caminado. 865 01:00:10,659 --> 01:00:13,619 ¿vale? que yo quiero 866 01:00:13,619 --> 01:00:14,099 que vaya 867 01:00:14,099 --> 01:00:17,539 a ver, al sprint 868 01:00:17,539 --> 01:00:19,599 pues primero tiene que pasar 869 01:00:19,599 --> 01:00:21,400 es decir, no quiero que pase directamente 870 01:00:21,400 --> 01:00:22,119 de Robot Idle 871 01:00:22,119 --> 01:00:24,780 al sprint de correr rápido 872 01:00:24,780 --> 01:00:27,519 entonces tiene que pasar por el walk, igual el paso 873 01:00:27,519 --> 01:00:29,199 es inmediato, es súper rápido 874 01:00:29,199 --> 01:00:30,860 pero si aquí se cumple esta 875 01:00:30,860 --> 01:00:32,920 condición de que el run 876 01:00:32,920 --> 01:00:35,400 está activo, ¿vale? porque es una 877 01:00:35,400 --> 01:00:37,380 booleana, entonces pasará 878 01:00:37,380 --> 01:00:38,280 a Robot Sprint 879 01:00:38,280 --> 01:00:41,119 hay otra para agacharse 880 01:00:41,119 --> 01:00:43,139 que es otra booleana, otra que detecta 881 01:00:43,139 --> 01:00:45,239 en todo momento si está o no está posada 882 01:00:45,239 --> 01:00:47,059 en el suelo, por ejemplo para permitir que haya 883 01:00:47,059 --> 01:00:49,179 un salto, si no está posada en el suelo 884 01:00:49,179 --> 01:00:51,119 no va a cumplir 885 01:00:51,119 --> 01:00:53,679 la condición de que se pueda impulsar para hacer un salto 886 01:00:53,679 --> 01:00:55,280 a menos que quisiéramos hacer dobles 887 01:00:55,280 --> 01:00:57,340 saltos y hubiera que complicar 888 01:00:57,340 --> 01:00:57,719 un poquito 889 01:00:57,719 --> 01:01:00,079 las operaciones 890 01:01:00,079 --> 01:01:03,039 entonces yo si ahora mismo me meto 891 01:01:03,039 --> 01:01:04,300 en este robot y en su código 892 01:01:04,300 --> 01:01:05,619 que lo tengo por acá 893 01:01:05,619 --> 01:01:08,079 vale 894 01:01:08,079 --> 01:01:26,000 Pues vamos a ir rápido viendo un poco la lógica. Son códigos que hay que sentarse a pensar todo lo que se va necesitando, pero dos consejos previos. Por un lado, recordad que podemos ir agrupando cada tipo de acción en un método que creemos nosotros. 895 01:01:26,000 --> 01:01:42,239 Este girar, este flip, yo he ido generando uno por cada operación que quiero que haga. Y más o menos deberían ir conectados a los distintos estados de animación. Uno que sirva para correr. 896 01:01:42,239 --> 01:02:01,400 Y aquí está todo el rato el update, fotograma tras fotograma, viendo a ver si lo aplica o no. Habrá algunos que quiero que se apliquen en el update, que son los más relacionados con cambio de posición en el sitio, que no dependen de físicas. 897 01:02:01,400 --> 01:02:19,980 Por ejemplo, agacharse. El personaje no se está agachando como tal, es que la animación va a ser la de agachar, recordad lo que hemos dicho. Y aparte también se cambiarán las dimensiones del boss collider, por ejemplo. Entonces ahí sí que no me importa que la detección se haga, la ejecución se haga en el update en cuanto se pueda, lo más rápido posible. 898 01:02:19,980 --> 01:02:38,920 Y luego hay otras que tengo aquí en el Fixed Update, que son las más relacionadas con físicas, que es mover en horizontal y el mover en vertical, que es saltar. Entonces, todo ello, como ya hemos hecho en alguna otra ocasión, en base, por ejemplo, a este GetAxis que estamos capturando en desplazamiento X. 899 01:02:38,920 --> 01:02:55,780 Hemos creado una variable de tipo float global al comienzo y con esto podremos ir también estableciendo valores, cambiando los valores de este float. 900 01:02:56,940 --> 01:03:01,440 Entonces, vamos a ver poco a poco cómo va esto así de manera rápida. 901 01:03:01,440 --> 01:03:05,320 lo dicho, esto 902 01:03:05,320 --> 01:03:07,920 lo veis aquí y ya os da una pista 903 01:03:07,920 --> 01:03:09,119 vosotros intentad hacerlo 904 01:03:09,119 --> 01:03:11,440 dentro de la medida posible 905 01:03:11,440 --> 01:03:13,460 viendo lo mínimo posible este código 906 01:03:13,460 --> 01:03:14,820 que os pongo aquí, pero 907 01:03:14,820 --> 01:03:16,559 esto ya da una idea 908 01:03:16,559 --> 01:03:19,199 que esto además cuando lo hice 909 01:03:19,199 --> 01:03:20,059 o cuando se hizo 910 01:03:20,059 --> 01:03:23,420 no salió de primera, se van añadiendo más variables 911 01:03:23,420 --> 01:03:25,320 globales a medida que se van necesitando 912 01:03:25,320 --> 01:03:27,260 pero es importante tener 913 01:03:27,260 --> 01:03:28,579 por ejemplo una variable alive 914 01:03:28,579 --> 01:03:30,079 o vivo 915 01:03:30,079 --> 01:03:33,179 Para ir determinando 916 01:03:33,179 --> 01:03:34,380 Si el juego ha acabado 917 01:03:34,380 --> 01:03:35,900 Y recarga el nivel, por ejemplo 918 01:03:35,900 --> 01:03:38,860 Y lanza la animación de muerte o vida 919 01:03:38,860 --> 01:03:40,920 ¿Vale? Vamos, más bien la de muerte 920 01:03:40,920 --> 01:03:42,659 Porque la de vida es cuando recarga 921 01:03:42,659 --> 01:03:43,300 Ya debería estar 922 01:03:43,300 --> 01:03:46,480 Esta booleana, que vamos a conectar mucho con el parámetro 923 01:03:46,480 --> 01:03:48,519 De East Grounded para detectar que están en el suelo 924 01:03:48,519 --> 01:03:50,619 Este estoy saltando, que son booleanas 925 01:03:50,619 --> 01:03:51,739 Y veis que básicamente 926 01:03:51,739 --> 01:03:54,500 Hay muchas que estas booleanas 927 01:03:54,500 --> 01:03:56,280 Pues tienen que ver con agachado 928 01:03:56,280 --> 01:03:57,619 Pues es esta misma de crouch 929 01:03:57,619 --> 01:04:03,280 Pero ojo, no es lo mismo la variable agachado que el parámetro crouch o agachado, ¿vale? 930 01:04:03,960 --> 01:04:10,019 Entonces aquí se van, pues como hemos venido haciendo, diciendo la fuerza de salto es 60 para multiplicarlo por el salto 931 01:04:10,019 --> 01:04:14,860 El float que hemos creado para el desplazamiento que recoge el axis 932 01:04:14,860 --> 01:04:23,519 La velocidad máxima por si queremos limitarla en algún momento o marcarla si damos a cierta tecla que coja velocidad máxima, ¿vale? 933 01:04:23,519 --> 01:04:28,519 Pues aquí son los ingredientes que luego vamos a ir usando en el resto de situaciones 934 01:04:28,519 --> 01:04:34,820 Al arrancar el juego, como suele pasar, toda variable que se base en un componente 935 01:04:34,820 --> 01:04:36,679 Como cambiar el Box Collider, ¿veis? 936 01:04:37,119 --> 01:04:38,059 Box Collider 2D 937 01:04:38,059 --> 01:04:45,440 Pues con esto vamos a acceder al componente Box Collider que tenemos aplicado en este personaje 938 01:04:45,440 --> 01:04:50,400 El Animator, como hemos hecho, también lo hemos capturado 939 01:04:50,400 --> 01:04:57,159 Y ya las condiciones por defecto son que por defecto el personaje tiene que permanecer vivo. 940 01:04:57,880 --> 01:05:00,360 Le ponemos una velocidad máxima, que podemos usar más tarde. 941 01:05:00,760 --> 01:05:07,519 Por defecto también ponemos que no es grounded, porque básicamente el personaje no está tocando el suelo. 942 01:05:07,519 --> 01:05:13,440 Lo ponemos así un poco elevado y cuando baje y toque un collider con otro collider, 943 01:05:13,820 --> 01:05:19,480 ya sabemos usar on collision enter, on collision tal, el on trigger enter, 944 01:05:19,480 --> 01:05:35,619 pues podemos cambiar que ese isGrounded, que por defecto es falso, pasa a ser verdadero, ¿no? Por ejemplo, si yo voy más abajo, en algún momento, aquí he dicho que cuando haya un collisionEnter, ¿vale? 945 01:05:35,619 --> 01:05:42,480 con, en este caso, el concepto de layer y de tag que tenemos aquí. 946 01:05:43,179 --> 01:05:47,500 También son importantes ya ir poniendo en juego porque el personaje puede ir tocando un tipo de suelo, 947 01:05:47,500 --> 01:05:52,280 puede ir tocando otro y con estos layers y tags, como pone en el tema, podemos ir definiendo 948 01:05:52,280 --> 01:05:55,380 que se activen o no se activen cosas según las condiciones. 949 01:05:55,679 --> 01:06:00,760 Por ejemplo, aquí el personaje va a poner que isGrounded, según este código que tenemos aquí, 950 01:06:00,760 --> 01:06:03,719 si el objeto 951 01:06:03,719 --> 01:06:04,880 con el que colisiona 952 01:06:04,880 --> 01:06:07,300 creo que ya os comenté que 953 01:06:07,300 --> 01:06:09,380 este parámetro que tenemos 954 01:06:09,380 --> 01:06:12,019 después de los onCollisionEnter o los onTriggerEnter 955 01:06:12,019 --> 01:06:13,840 que también veis que son 956 01:06:13,840 --> 01:06:15,860 tipo 2D 957 01:06:15,860 --> 01:06:17,619 también tienen sus propios 958 01:06:17,619 --> 01:06:20,340 sus propias versiones 959 01:06:20,340 --> 01:06:21,480 si 960 01:06:21,480 --> 01:06:23,460 ese objeto con el que colisiona 961 01:06:23,460 --> 01:06:25,380 está en la layer 7, es decir 962 01:06:25,380 --> 01:06:26,980 si por ejemplo el suelo 963 01:06:26,980 --> 01:06:29,300 está en la layer 7 964 01:06:29,300 --> 01:06:55,730 en ese caso sí se da la condición, ¿vale? Entonces, si este personaje, ¿vale? Porque estoy en el player manager aplicado al robot, si este objeto choca con un objeto que está en la layer 7, que yo he puesto que se llame suelo, pues is grounded de pronto is true, ¿vale? Con lo que significa que todas las condiciones de salto, por ejemplo, ahora vuelvo a donde estábamos, de salto, va a pedir que esté grounded. 965 01:06:55,730 --> 01:07:23,190 Si esta no se cumple, pues no va a saltar, no se va a aplicar ni la fuerza, ni se va a desencadenar la animación, ese trigger para el salto. ¿Vale? Veis que aquí ya se van combinando muchas condiciones, porque si está mirando hacia un lado y le doy a la tecla control y además venía de la animación de la que fuera, entonces ya sí puedo cambiar a la otra, pero si no, a veces no me va a interesar. 966 01:07:23,190 --> 01:07:41,929 ¿Vale? Fijaos que ya en estos paréntesis cada vez hay más concatenaciones de, con estos síes, recordad, o con los de O, ¿vale? Que eran las dos, estas dos líneas verticales, ¿vale? Pero bueno, vamos con los is, se van estableciendo las condiciones. 967 01:07:41,929 --> 01:07:44,369 entonces, vamos aquí 968 01:07:44,369 --> 01:07:45,590 donde estábamos 969 01:07:45,590 --> 01:07:49,010 aquí, pues 970 01:07:49,010 --> 01:07:51,929 no solo es que esté grounded, sino que 971 01:07:51,929 --> 01:07:54,150 además, dentro de los parámetros 972 01:07:54,150 --> 01:07:55,730 el de is grounded va a estar en true 973 01:07:55,730 --> 01:07:58,130 por eso vais a ver que según se lanza el juego 974 01:07:58,130 --> 01:07:59,909 y de hecho voy a subir un poco más 975 01:07:59,909 --> 01:08:00,409 al personaje 976 01:08:00,409 --> 01:08:03,329 está en false 977 01:08:03,329 --> 01:08:05,630 y cuando toque el suelo se va a poner 978 01:08:05,630 --> 01:08:08,070 vais a ver en vivo que se va a poner 979 01:08:08,070 --> 01:08:08,829 como true 980 01:08:08,829 --> 01:08:11,949 ala, ha tocado el suelo y mira, ahí está 981 01:08:11,949 --> 01:08:12,889 ¿sí? 982 01:08:13,369 --> 01:08:31,909 Entonces, aquí en vivo podemos ir viendo que las condiciones se cumplen o no. Incluso si nos interesara un momento, podemos aquí marcarlas o no marcarlas, ¿vale? Para hacer pruebas. Yo, por ejemplo, aquí si yo pongo 10, ¿vale? A ver, lo que pasa es que en todo momento me estará recalculando por otro lado que tiene que poner 0, ¿vale? 983 01:08:31,909 --> 01:08:38,750 Pero se podría incluso ir testeando, igual que hacíamos en tiempo de ejecución aquí de ir cambiando los valores, ¿vale? 984 01:08:38,789 --> 01:08:42,550 Se pueden ir aquí cambiando también los valores de los parámetros. 985 01:08:43,529 --> 01:08:50,449 Pero eso, ahora mismo tenemos aquí que isGrounded es true, por eso se ha puesto como marcado. 986 01:08:51,350 --> 01:08:54,810 Que la booleana de estoy saltando es falsa, porque todavía no estoy saltando. 987 01:08:54,930 --> 01:08:58,609 Cuando le dé a saltar, pues a mí me puede interesar en algún momento crear una booleana, ¿no? 988 01:08:58,609 --> 01:09:17,310 Pero este en collision enter, veis que hay una condición de si la otra capa con la que ha colisionado es de la layer 7. Pero a lo mejor si yo quiero que la colisión se haga con, por ejemplo, esta que tiene tag plataforma 1. 989 01:09:17,310 --> 01:09:33,689 Si yo voy aquí al juego a estas plataformas que tengo móviles, fijaos que si es Layer 7, que lo es, va a permitir que el Is Grounded se detecte, se active, etc. para poder saltar desde esa plataforma. 990 01:09:33,689 --> 01:09:59,069 Y luego, aparte, hay otra condición que he puesto aquí, que se aplicará solo si el suelo tiene este tag de plataforma móvil 1, ¿vale? Que las blancas, por ejemplo, fijaos que no lo tiene, pero esta sí, cuando caiga, cuando esté colisionando con una de este tipo, os lo pone el tema, para que el personaje se mueva con esa plataforma, que no está animada por física, sino que está animada con animación. 991 01:09:59,069 --> 01:10:15,729 Eso también quiero que lo veamos ahora, ¿vale? Pues que lo adopte como padre y entonces, al ser, digamos, el robot hijo en la jerarquía de esa plataforma, se va a mover con esa plataforma hasta que saltemos o salgamos de esa colisión, ¿vale? 992 01:10:15,729 --> 01:10:33,710 Que por eso aquí hay un onCollisionExit que hace las operaciones contrarias, básicamente. Tanto la condición de salto la revierte como la de que deje de ser padre, bueno, mejor dicho, que deje de ser hijo de esa plataforma. 993 01:10:33,710 --> 01:11:00,970 Por eso si os fijáis, por ejemplo, cuando yo, fijaos en la jerarquía del robot, cuando el robot pise la plataforma, una plataforma como esta, que sí que tiene ese tag, cuando lo pise vais a ver que la jerarquía se ha puesto como hija de una plataforma. 994 01:11:00,970 --> 01:11:27,029 A ver, que le van a matar enseguida, pero estaba por ahí. A ver, vuelvo a hacerlo. ¿Vale? Perdonad que es que esta plataforma está aquí. Vale, pues se va a hacer hija de esta plataforma. Entonces yo ando y cuando me poso en ella, fijaos que se mete aquí como hija y cuando salto, vuelve el robot a estar fuera. Se ha puesto aquí abajo porque no se ha colocado igual, pero vuelve a estar fuera. ¿Vale? 995 01:11:27,029 --> 01:11:38,010 Entonces con eso, por ejemplo, podemos ir adoptando estos comportamientos de, pues eso, ahora ha desaparecido y vuelve a estar de hija de la plataforma. Salto y deja de estar de hija de la plataforma, ¿vale? 996 01:11:40,029 --> 01:11:53,270 Bueno, esto me sirve para que sepáis lo de los tags y los layers que existen y se pueden usar, que los onCollision y los onTrigger también tienen su versión 2D, ¿vale? Y también el tipo de variable que se usa. 997 01:11:53,270 --> 01:12:14,770 Y otra cosa importante del panel animation. A diferencia del personaje que se va a ir animando en base a los distintos fotogramas que hemos incluido desde la hoja de sprites, que es lo que hemos hecho hasta ahora, 998 01:12:14,770 --> 01:12:18,189 también las animaciones os he dicho que pueden ser 999 01:12:18,189 --> 01:12:19,390 de tipo kinemático 1000 01:12:19,390 --> 01:12:21,850 y cuando digo que es de tipo kinemático 1001 01:12:21,850 --> 01:12:24,069 es que si yo me meto en una 1002 01:12:24,069 --> 01:12:25,970 de estas plataformas y miro 1003 01:12:25,970 --> 01:12:27,449 su animator controller 1004 01:12:27,449 --> 01:12:28,829 solo tiene un estado 1005 01:12:28,829 --> 01:12:31,930 que es, si me meto en la animación 1006 01:12:31,930 --> 01:12:33,170 es que yo he cogido esa 1007 01:12:33,170 --> 01:12:35,970 plataforma, me he metido en el 1008 01:12:35,970 --> 01:12:36,930 panel de animation 1009 01:12:36,930 --> 01:12:39,989 y le he dicho, quiero crear 1010 01:12:39,989 --> 01:12:41,729 una animación para 1011 01:12:41,729 --> 01:12:43,090 esa plataforma 1012 01:12:43,810 --> 01:12:46,430 Por ejemplo, selecciono esa plataforma y veis que aquí está. 1013 01:12:47,130 --> 01:12:51,210 Y aquí no hay ningún tipo de sprite. 1014 01:12:51,649 --> 01:12:57,050 Aquí lo que hay es que podemos ir añadiendo propiedades de los distintos componentes y animarlos en el tiempo. 1015 01:12:57,130 --> 01:12:58,729 La posición, la rotación, la escala. 1016 01:12:59,289 --> 01:13:06,270 Y yo aquí lo que he hecho es la posición en X, cambiarla de izquierda a derecha y hago un bucle. 1017 01:13:06,270 --> 01:13:08,609 El primer fotograma y el último son el mismo. 1018 01:13:08,609 --> 01:13:16,789 y veis, voy a ampliar aquí, que básicamente lo que he conseguido es que poniendo esta animación en bucle, 1019 01:13:16,869 --> 01:13:25,250 además, si la busco por ahí, está con el loop activado, he hecho que esta plataforma esté de izquierda a derecha todo el rato. 1020 01:13:25,829 --> 01:13:31,210 Este movimiento es kinemático, es decir, no es en base a físicas, es porque estamos cambiando, 1021 01:13:31,250 --> 01:13:34,970 y lo podéis ver aquí claramente, estamos cambiando la posición en el transform. 1022 01:13:34,970 --> 01:13:54,010 Por eso hacemos lo de que cuando el personaje pise esa plataforma se mueva con la plataforma, porque no se está moviendo por físicas y no hay nada arrastrando otra cosa. Hay que hacerle hijo para que se asocien sus valores de transform, que los herede de su padre. Por eso hay que hacer esa operación. 1023 01:13:54,010 --> 01:14:16,949 Si esta plataforma la moviéramos, también se podría, mediante velocity sería más complejo, se moviera primero hacia la derecha, frenara y luego otra fuerza hacia la izquierda y que no tenga gravedad y no se caiga, que se mantenga fija siempre en el mismo eje Y, en la posición de Y, ahí sí que habría una cierta, no completa, una cierta inencia del personaje que se vería arrastrado. 1024 01:14:16,949 --> 01:14:30,489 Pero es verdad que sería cierta porque tampoco tendría por qué estar completamente anclado. Por eso, dependiendo de si va por físicas o va por kinemática, hay que hacer estas operaciones. 1025 01:14:30,489 --> 01:14:48,050 Pero que las animaciones, igual que las metemos aquí, también pueden ser animaciones que sí se mueven, por ejemplo, en el espacio o que rotan. Voy a hacer una cosa un poco así extraña, que es, yo que sé, voy a decirle que vaya rotando también. 1026 01:14:48,050 --> 01:14:51,989 y yo le digo, vale, aquí y que cuando esté en este punto 1027 01:14:51,989 --> 01:14:53,109 pues que rote en Y 1028 01:14:53,109 --> 01:14:57,590 despliego aquí y le digo 1029 01:14:57,590 --> 01:15:00,750 quiero que esto rote en Y 1030 01:15:00,750 --> 01:15:03,609 pues yo que sé, bueno, en Z mejor dicho 1031 01:15:03,609 --> 01:15:06,989 que rote hasta aquí, ¿vale? y ahí he añadido un fotograma 1032 01:15:07,550 --> 01:15:09,810 ¿vale? pues ahora cuando 1033 01:15:09,810 --> 01:15:10,930 reproduzcamos el juego 1034 01:15:10,930 --> 01:15:16,350 como esa animación la he cambiado, vais a ver que tiene esa interpolación 1035 01:15:16,350 --> 01:15:18,189 Ahora el juego es bastante más complicado 1036 01:15:18,189 --> 01:15:20,810 Pero eso, que sepáis que las animaciones también se pueden 1037 01:15:20,810 --> 01:15:22,550 Se pueden 1038 01:15:22,550 --> 01:15:24,890 Realizar en base a 1039 01:15:24,890 --> 01:15:27,170 Animar parámetros, incluso se puede animar 1040 01:15:27,170 --> 01:15:29,289 Que el boss collider cambie de 1041 01:15:29,289 --> 01:15:31,130 Posición o que el sprite 1042 01:15:31,130 --> 01:15:33,210 El color vaya siendo de uno u otro 1043 01:15:33,210 --> 01:15:35,170 ¿Vale? Todas esas animaciones se guardan 1044 01:15:35,170 --> 01:15:37,149 En clips de animación y luego 1045 01:15:37,149 --> 01:15:39,029 En el animator controller 1046 01:15:39,029 --> 01:15:41,310 Aquí solo hay uno porque queremos que este se haga en bucle 1047 01:15:41,310 --> 01:15:42,930 Bueno, pues podemos ir también 1048 01:15:42,930 --> 01:15:44,229 Pasando de uno a otro 1049 01:15:44,229 --> 01:15:45,170 ¿Vale? 1050 01:15:46,350 --> 01:16:10,689 Y luego, simplemente para que lo sepáis, si marcáis este botoncito rojo de auto keyframing, si lo activamos en rojo, todo lo que vayamos cambiando, que antes había que ir aquí moviendo los parámetros y creando el keyframe, en cuanto se cambie un valor, veis que va a ir añadiendo los fotogramas según haga los cambios. 1051 01:16:10,689 --> 01:16:28,630 Esto puede ser muy cómodo o muy peligroso. Entonces ahora vais a ver que he cambiado así cositas y cuando reproduzco el juego, cuando vea la animación, para empezar la escala, por ejemplo, que la tengo aquí, se hace grande, se queda grande y luego se vuelve a reproducir y se hace pequeña. 1052 01:16:28,630 --> 01:16:40,350 Por eso no es suave el paso de grande a pequeño, ¿vale? Pero bueno, esto es como una animación que hacéis en 3D o en otros casos, pues que sepáis que también se puede aplicar a objetos. 1053 01:16:40,550 --> 01:16:51,649 Y en el caso de las plataformas o de unos pinchos que salen o un enemigo que está botando todo el rato a lo mejor y no queremos que sea por física, pues se puede hacer con este tipo de animaciones, ¿vale? 1054 01:16:51,649 --> 01:17:20,529 Entonces, voy a explicar una cosa más, así rápida, y vamos a dudas concretas, y si no, sigo explicando, ¿vale? Pero quiero una siguiente cosa, que es básicamente el movimiento, ¿vale? Que es lo que me han dicho antes. Pues yo en todo momento sé que voy a estar calculando en esta variable, desplazamiento x, bueno, la que llaman así, con el que taxis el valor, fotograma, fotograma, ¿vale? Y esto va a ir del menos uno al uno, si recordamos, pasando por el cero. 1055 01:17:21,649 --> 01:17:41,770 A diferencia del salto, que es pulsar una tecla, nos interesa en el desplazamiento que sean positivos o negativos, ¿no? Entonces vamos a estar en todo momento, ¿vale? Y como sabemos que la animación horizontal lo vamos a hacer por físicas, por eso lo meto en el Fixed Update, si no podría estar en el Update. 1056 01:17:41,770 --> 01:18:08,670 Yo he creado este método que se llama mover. ¿Y qué he hecho en mover? Pues decirle que en vez de usar el Digibody, el AddForce, que es simplemente para añadir fuerzas en una dirección u otra, está el parámetro de Velocity, la propiedad de Velocity. 1057 01:18:08,670 --> 01:18:20,029 Y Velocity es como mover, digamos, de manera kinemática, pero ampliando las fuerzas. Es decir, es un movimiento inmediato, hacia izquierda, hacia derecha, según la Velocity. 1058 01:18:20,029 --> 01:18:38,829 Entonces, con esto, la velocidad de este objeto, de este RigidBody, lo podemos ir variando, por ejemplo, con este valor, que va a ir variando la dirección de ese movimiento físico según lo que vayamos pulsando en las teclas, en este axis. 1059 01:18:38,829 --> 01:18:50,430 y además tiene dos dimensiones, la de x que multiplicará ese desplazamiento que conseguimos con el joystick o las teclas 1060 01:18:50,430 --> 01:18:55,149 y lo multiplicamos por este más speed, como está en el fix update no hay que hacer un time delta time, 1061 01:18:55,149 --> 01:19:02,609 ya está ejecutándose en tiempos de físicas y en el eje y no queremos que haya ninguna variación. 1062 01:19:02,869 --> 01:19:08,149 Esto también lo vimos ya si no me equivoco el otro día con la bola, pero cuando ponemos que un valor de varias dimensiones 1063 01:19:08,829 --> 01:19:10,909 Que coja el de uno de los ejes 1064 01:19:10,909 --> 01:19:12,229 Y está bien puesto en su eje 1065 01:19:12,229 --> 01:19:14,789 Como esta es la coma del eje X 1066 01:19:14,789 --> 01:19:16,729 De la dimensión X del vector 1067 01:19:16,729 --> 01:19:17,850 Y este es el Y 1068 01:19:17,850 --> 01:19:21,210 Esto simplemente hereda el movimiento que sea 1069 01:19:21,210 --> 01:19:23,010 No le decimos que sea cero 1070 01:19:23,010 --> 01:19:24,770 Y se estanca en cero la velocidad 1071 01:19:24,770 --> 01:19:26,949 Es que vaya heredando la vertical 1072 01:19:26,949 --> 01:19:29,250 Por ejemplo que apliquemos con el salto 1073 01:19:29,250 --> 01:19:31,390 Y con esto conseguimos que el personaje 1074 01:19:31,390 --> 01:19:32,789 Se mueva de izquierda a derecha 1075 01:19:32,789 --> 01:19:33,930 En horizontal 1076 01:19:33,930 --> 01:19:37,470 Más la gravedad que también le está aplicando el RigidBody 1077 01:19:37,470 --> 01:19:51,289 Y luego, por otro lado, ¿vale? Y aquí está el juego, aparte del movimiento en sí del GameObject, hay que hacer la apariencia de que este parámetro se está animando, ¿vale? 1078 01:19:51,329 --> 01:20:02,909 ¿Y cómo lo vamos a conseguir? Tenemos aquí un parámetro, si voy a Robot, ¿vale? Tenemos un parámetro que hemos dicho de tipo Flash que se llama DesplazarH, ¿vale? 1079 01:20:02,909 --> 01:20:06,729 Con la D mayúscula, ojo, hay que ponerlo respetando las mayúsculas. 1080 01:20:09,550 --> 01:20:19,130 Entonces, lo que voy a decir es que este desplazamiento en H sea en función a lo que tengamos aquí, al valor de desplazamiento X. 1081 01:20:19,529 --> 01:20:22,670 Ahora os explico por qué pongo más código. 1082 01:20:23,310 --> 01:20:26,890 Pero básicamente es eso. Aquí estamos diciendo, y lo voy a hacer en vivo, 1083 01:20:26,890 --> 01:20:43,010 A medida que vamos pulsando la flecha izquierda y derecha, porque es donde está configurado ese axis de desplazamiento horizontal, vais a ir fijándoos que cambia este valor de 1, si paro 0, de 0 a 1. 1084 01:20:43,010 --> 01:20:58,069 Y no hay menos 1. ¿Por qué? Porque, como hemos dicho antes, las condiciones pueden ser mayor o menor. Y aquí lo que queremos es que haya algún tipo de desplazamiento. El lado, ahora vemos cómo lo definimos, el lado lo definimos después. 1085 01:20:58,069 --> 01:21:18,989 Pero lo que queremos es que haya, que se detecte que ese axis está siendo diferente a cero. Entonces, ¿qué se hace? Que con esta conversión a absoluto del valor, con esta operación de conviérteme este valor que aquí hay dentro a un valor absoluto, lo que hace es que no hay valor en negativo, siempre lo convierte a positivo. 1086 01:21:18,989 --> 01:21:42,670 Entonces da igual que estemos dando a un lado del axis o a otro, que aunque para la velocidad, el velocity, perdonad, físico, sí que está influyendo que vaya izquierda a derecha, ¿vale? Para decir que se active la animación de RobotWalk, ¿vale? De que está caminando, ahí solo con saber que está siendo diferente a cero, ¿vale? Pues ya nos valdría. 1087 01:21:42,670 --> 01:21:46,630 porque si contáramos con que cuando fuera menos uno 1088 01:21:46,630 --> 01:21:49,590 porque le demos a la izquierda también tuviera que hacerse esa condición 1089 01:21:49,590 --> 01:21:52,630 tendríamos que poner más condiciones y sería un poco jaleo 1090 01:21:52,630 --> 01:21:55,789 porque además una se puede contradecir con otra 1091 01:21:55,789 --> 01:21:57,590 y sería un poco complicado 1092 01:21:57,590 --> 01:22:02,430 es posible, y esto también me sirve para contaros una cosa 1093 01:22:02,430 --> 01:22:04,989 si creamos diferentes transiciones 1094 01:22:04,989 --> 01:22:07,329 dentro de una misma 1095 01:22:07,329 --> 01:22:11,630 es decir, que en un mismo flujo, en un mismo paso de un estado a otro 1096 01:22:11,630 --> 01:22:24,689 puedo ver que una condición sea, cuando desplazamiento H sea mayor de 0,1, o hacer una transición y si volvemos a hacer el mismo recorrido vais a ver que aquí se ponen tres triangulitos diciendo 1097 01:22:24,689 --> 01:22:35,430 aquí hay dos condiciones, que son estas, ¿vale? Hay dos posibles y cada una, según clicamos, ¿vale? Transiciones y hay dos y se pueden incluso incorporar más, ¿eh? 1098 01:22:35,430 --> 01:22:55,729 Tres. Y voy aquí y hay tres. Y cada uno, ¿vale? Son condiciones independientes. Yo aquí también, si no hiciera eso del valor absoluto, podría añadir otra y decirle desplazamiento h que sea menor a menos 0,1. Más, no, menos. ¿Vale? Y entonces así sí que se podría conseguir. 1099 01:22:55,729 --> 01:23:11,510 Porque si se cumple una, no se cumple la otra. Con que se cumpla una ya se daría esta transición. Son independientes. Por poder se podría, pero también servía un poco para contar esto que a veces nos puede interesar que los valores negativos no lo hayan. 1100 01:23:11,510 --> 01:23:23,010 El problema que hay, esta animación de Robot Walk, esta de aquí, vamos aquí al robot, es en una dirección solo. 1101 01:23:23,609 --> 01:23:25,949 Espera, que estoy aquí abriendo cosas y no tiene sentido. 1102 01:23:27,069 --> 01:23:31,489 Cuando empieza a caminar es hacia la derecha, que es hacia donde mira. 1103 01:23:33,390 --> 01:23:42,279 Ahora mismo, como os acabo de decir, aquí está, con esto sí estamos consiguiendo que se mueva el objeto izquierdo a derecha. 1104 01:23:42,279 --> 01:23:56,600 Y con esto estaríamos consiguiendo que el personaje hiciera el caminado. Pero hasta aquí solo tendríamos que el personaje estaría haciendo el caminado. Aunque vaya a la izquierda, lo haría de espaldas, porque estaría mirando a la derecha. 1105 01:23:56,600 --> 01:24:21,000 Por eso hay otro parámetro, que es este, vamos, otro método, que de tanto hablar a veces ya me fundo, que está, este sí, en todo momento, en cuanto se pueda, en cuanto detecte el axis que está cambiando la dirección, 1106 01:24:21,000 --> 01:24:26,680 Otro método que es el de girar, ¿vale? Que es independiente al de mover, aunque están unidos, pero bueno 1107 01:24:26,680 --> 01:24:35,159 Que es este que si dice, si el desplazamiento X es mayor a 0, es decir, estoy dando la tecla de hacia la derecha 1108 01:24:35,159 --> 01:24:38,140 Y no está ya mirando a la derecha, haz un flip 1109 01:24:38,140 --> 01:24:45,859 Y si lo contrario, si es menor a izquierda y no, es decir, si el desplazamiento es hacia la izquierda 1110 01:24:45,859 --> 01:24:50,880 Y si está mirando hacia la derecha, ¿vale? Estos son booleanas que yo voy cambiando en todo momento, ¿vale? 1111 01:24:51,000 --> 01:25:10,300 Hace un flip. ¿Y qué es un flip? Pues otro método que he creado que en cuanto se ejecute, es decir, en cuanto en realidad se esté cambiando de dirección, ¿vale? Que, y estas líneas creo que las tenéis en el enunciado, vamos, creo no, las tenéis en el enunciado, lo que hacemos es cambiar la escala. 1112 01:25:10,300 --> 01:25:33,300 Es decir, que el desplazamiento físico va hacia la derecha o hacia la izquierda, independientemente de la escala, son las físicas del mundo, ¿vale? La animación en principio se está haciendo con el personaje hacia la derecha, que es como están diseñados los fotogramas, pero lo que sí podemos hacer es cambiar la dirección hacia la que mira al invertir la escala, ¿vale? 1113 01:25:33,300 --> 01:25:50,760 Entonces vais a ver que cuando yo, voy a seleccionar aquí el robot, cuando yo voy a la izquierda va a cambiar, ¿vale? Hasta ahora solo he ido hacia la derecha y el flip no se ha ejecutado, pero cuando voy a la izquierda, fijaos que se ha puesto en menos uno y lo que ha hecho es girar la imagen. 1114 01:25:50,760 --> 01:26:04,739 No es girarla, es como agrandarla hacia el otro lado y se invierte. Entonces, con este flip, aunque el personaje, los sprites, siempre están ejecutándose hacia la derecha, como se invierte, está ejecutándose hacia la derecha, pero invertido. 1115 01:26:05,600 --> 01:26:16,640 ¿Vale? Cuando paro, cuando paro, es decir, cuando dejo de pulsar el desplazamiento en h, cuando es menos de 0,1, ¿vale? Cuando es 0, básicamente, paso otra vez al idle. 1116 01:26:17,199 --> 01:26:28,979 ¿Qué problema había con lo de hacer las condiciones más de una y que fueran en negativo? Que realmente desplazamiento en h menor a 0,1 sería ir hacia la izquierda si no hubiéramos hecho esto del absoluto. 1117 01:26:28,979 --> 01:26:46,760 Por eso lo hemos hecho. Hay otra forma más fácil, que tiene otros problemas, de hacer esta inversión, este flip, en vez de con el método de invertir la escala, que es este que os he dicho antes, que está en el propio SpriteRenderer. 1118 01:26:46,760 --> 01:27:00,640 Si yo me metiera en el SpriteRenderer, ¿vale? Que es el SpriteRenderer. Si yo pongo aquí otra variable que se llame SpriteRenderer, ¿vale? Y la capturo como componente, etc. De hecho, mira, lo voy a hacer. SpriteRenderer, lo voy a llamar SR. 1119 01:27:00,640 --> 01:27:04,340 y aquí hago 1120 01:27:04,340 --> 01:27:06,239 sr igual a 1121 01:27:06,239 --> 01:27:08,140 este no me sale automático 1122 01:27:08,140 --> 01:27:09,260 pero get component 1123 01:27:09,260 --> 01:27:12,380 en vez de boss collider 1124 01:27:12,380 --> 01:27:14,119 quiero que sea el sprite 1125 01:27:14,119 --> 01:27:15,840 sprite 1126 01:27:15,840 --> 01:27:17,600 renderer 1127 01:27:17,600 --> 01:27:19,340 debería salir y ahí está 1128 01:27:19,340 --> 01:27:21,979 si yo en algún momento 1129 01:27:21,979 --> 01:27:23,840 dijera en vez de hacer todo esto 1130 01:27:27,899 --> 01:27:30,039 bueno habría que decir 1131 01:27:30,039 --> 01:27:48,340 que invirtiera, que cada vez que está viendo uno de los lados, aparte de mirando derecha, pues diría sr.flip en i, porque queremos que se invierta en i, que sea el inverso. 1132 01:27:48,340 --> 01:28:05,899 Es decir, hasta aquí no, que lo invierta. Sería lo mismo que hemos hecho aquí. Que el que ya tuviera lo invierta. Y esto, por ejemplo, lo puedo dejar aquí comentado. Y ahora vais a ver que el resultado debería ser el mismo. 1133 01:28:05,899 --> 01:28:22,399 ¿Qué es? Que ahora conseguimos... Bueno, no sé si he guardado... Sí, sí he guardado. Y cuando yo le dé a play, ahora estamos haciendo esta inversión, ¿vale? Es decir, el personaje se está moviendo de izquierda a derecha con el velocity, independientemente de hacia dónde mire lo que es el sprite. 1134 01:28:22,399 --> 01:28:51,899 El sprite pasa al otro estado y empieza a andar, pero con esto, uy, claro, no, se me ha ido la pinza, esto es en X, y creo que ya estaría, sí, no hemos puesto flip, sí, vale, pero nada, vuelvo a recargar, vale, y fijaos que ahora lo que cambia aquí es el flip en X, cuando voy a izquierda se activa esto, cuando voy a derecha, vale, también se podría así. 1135 01:28:52,399 --> 01:29:06,300 Es otra forma, pero la otra sí que es verdad que otras operaciones que impliquen que tenga que estar mirando hacia la izquierda, si se conectan con esa inversión del menos uno, que ahora es activado, si os fijáis, también se podría conseguir. 1136 01:29:06,300 --> 01:29:17,600 Bueno, esto lo digo para que veáis también para qué sirven los... voy a deshacer esto... ¡Epa! Un segundo... Vale, ahí está. ¿Vale? 1137 01:29:19,949 --> 01:29:31,729 Dudas hasta aquí. Bueno, si os fijáis ahora, lo que hay que ir pensando es cómo se van jugando las distintas transiciones. 1138 01:29:31,729 --> 01:30:00,189 Pues hay run, cuando run es true, que básicamente yo lo he asociado a pulsar el shift izquierdo mientras yo mantengo pulsado el shift izquierdo, no mientras mantengo pulsado con el script, pero sí que es verdad que cuando pulso la tecla, por eso es el down, run in is true y este run se pone en verdadero y cuando suelto ese shift izquierdo deja de serlo. 1139 01:30:00,189 --> 01:30:23,149 Entonces, ¿qué es lo que consigo? Que si ya estoy caminando y le doy al de correr, al botón que yo tengo como de correr, pues de pronto hace la animación de correr, aparte de que le doy más velocidad, ¿vale? Sí, a ver, yo le doy aquí y cuando le doy a shift y fijaos que va a cambiar, cuando le doy, se va a poner el tick, cuando le doy a shift pasa al sprint y aparte va más rápido, por eso da esas zancadas. 1140 01:30:23,149 --> 01:30:40,609 Entonces, aparte de darle al sprint, sí que en algún punto, en correr, es raro que no esté aquí, pero aparte de cambiar a que pase al estado, al nodo de run, porque se cumple la condición, isRunning es true. 1141 01:30:40,609 --> 01:30:45,090 Y esto en algún momento hará también que se mueva más rápido. 1142 01:30:45,770 --> 01:30:46,250 Imagino. 1143 01:30:49,300 --> 01:30:49,720 Is running. 1144 01:30:50,680 --> 01:30:54,199 Pues, a ver, igual no lo configure para que vaya más... 1145 01:30:54,199 --> 01:30:54,340 Sí. 1146 01:30:55,100 --> 01:30:55,260 Ah. 1147 01:30:58,439 --> 01:31:00,319 Is running, bla, bla, bla. 1148 01:31:00,699 --> 01:31:00,880 Vale. 1149 01:31:02,079 --> 01:31:05,819 Pues en algún punto lo habré puesto, que ahora mismo no caigo, pero... 1150 01:31:07,140 --> 01:31:07,819 Voy a la tecla... 1151 01:31:08,560 --> 01:31:10,640 Bueno, esto tendría que buscarlo. 1152 01:31:10,640 --> 01:31:13,880 Pero básicamente, si pulsamos las teclas Shift, corremos, 1153 01:31:14,500 --> 01:31:17,399 IsRunningTrue, pero claro, tiene que haber más sitios con IsRunning. 1154 01:31:20,420 --> 01:31:22,739 Ah, vale, sí. 1155 01:31:23,560 --> 01:31:25,640 Aquí lo que cambio es la... 1156 01:31:29,199 --> 01:31:30,359 Lo que cambio... 1157 01:31:36,560 --> 01:31:42,380 No sé en qué punto lo estaba haciendo, pero se podría hacer básicamente aquí. 1158 01:31:43,060 --> 01:31:45,800 Vaya, aunque ahora mismo no encuentre dónde lo puse. 1159 01:31:45,800 --> 01:31:50,340 perdón, aunque no lo puse 1160 01:31:50,340 --> 01:31:51,979 aquí se puede poner mientras pulso esto 1161 01:31:51,979 --> 01:31:53,720 maxSpeed por ejemplo 1162 01:31:53,720 --> 01:31:55,880 pues sería el doble 1163 01:31:55,880 --> 01:31:57,659 pondría maxSpeed 1164 01:31:57,659 --> 01:31:59,760 por 2 1165 01:31:59,760 --> 01:32:01,600 y se movería el doble 1166 01:32:01,600 --> 01:32:04,039 en cuanto que 1167 01:32:04,039 --> 01:32:06,239 esta variable es la que hace que tenga el desplazamiento 1168 01:32:06,239 --> 01:32:08,060 ahora mismo no sé dónde lo puse 1169 01:32:08,060 --> 01:32:10,199 pero bueno, sería así de rápido 1170 01:32:10,199 --> 01:32:11,979 y cuando se deje de pulsar la tecla 1171 01:32:11,979 --> 01:32:13,899 shift izquierda 1172 01:32:13,899 --> 01:32:16,899 pues Max Speed volvería a ser su valor habitual. 1173 01:32:18,319 --> 01:32:20,060 Vale, hasta aquí ¿qué tal? 1174 01:32:20,520 --> 01:32:24,020 Es decir, lo que es el sistema de plataformas y llegar hasta el final, 1175 01:32:24,159 --> 01:32:28,680 que es lo que no es opcional, tirando de estos hilos se llegaría. 1176 01:32:29,520 --> 01:32:35,600 Sé que hay que dar vueltas, luego por supuesto también hay cosas que ya hemos heredado, 1177 01:32:35,779 --> 01:32:41,760 como el reload, que es que cuando muera por lo que sea, pues se recarga la escena, 1178 01:32:41,760 --> 01:33:05,500 o que cuando un precipicio, que hay un non-trigger que recarga la escena también, cuando el personaje, lo tengo aquí, toca con este GameObjectPrecipicio que prepara aquí, que cubre toda la base inferior, 1179 01:33:05,500 --> 01:33:08,159 Pues este Boss Collider 1180 01:33:08,159 --> 01:33:10,020 Es un East Trigger 1181 01:33:10,020 --> 01:33:11,539 Que cuando le toque otro personaje 1182 01:33:11,539 --> 01:33:13,960 Que es, que he hecho que sea 1183 01:33:13,960 --> 01:33:16,640 El que tenga el Tag Player, que el robot tiene este Tag 1184 01:33:16,640 --> 01:33:17,880 Pues recargue el nivel 1185 01:33:17,880 --> 01:33:20,560 ¿Por qué hay que poner esta condición, por ejemplo, aquí? 1186 01:33:21,600 --> 01:33:22,859 Porque, claro, yo por ejemplo 1187 01:33:22,859 --> 01:33:24,680 Aunque no se muevan más cosas 1188 01:33:24,680 --> 01:33:26,300 Sí que hay unas balas 1189 01:33:26,300 --> 01:33:27,840 ¿Vale? 1190 01:33:28,140 --> 01:33:30,079 Que esto ya es opcional, por lo más complejo 1191 01:33:30,079 --> 01:33:31,579 Pero os animo a que lo intentéis 1192 01:33:31,579 --> 01:33:34,319 Que si sigue la trayectoria, llegarían a tocar 1193 01:33:34,319 --> 01:33:35,279 Fijaos 1194 01:33:35,279 --> 01:33:37,819 Aunque yo las desactivo en cierto momento 1195 01:33:37,819 --> 01:33:39,039 Llegaría a tocar ese 1196 01:33:39,039 --> 01:33:41,199 Ahí habría desencadenado 1197 01:33:41,199 --> 01:33:43,840 Que se reseteara 1198 01:33:43,840 --> 01:33:45,380 Se recargara el nivel 1199 01:33:45,380 --> 01:33:46,779 Por eso hay que filtrar 1200 01:33:46,779 --> 01:33:48,600 Las balas no tienen el layer 1201 01:33:48,600 --> 01:33:51,300 El tag de player, pero el robot 1202 01:33:51,300 --> 01:33:53,520 Si nos fijamos, sí, porque se lo he puesto yo 1203 01:33:53,520 --> 01:33:55,779 ¿Vale? Entonces eso sirve para ir 1204 01:33:55,779 --> 01:33:56,460 Discriminando 1205 01:33:56,460 --> 01:33:59,880 Qué desencadena o qué influencia 1206 01:33:59,880 --> 01:34:00,359 En qué 1207 01:34:00,359 --> 01:34:05,329 Vale, contadme cosas, dudas 1208 01:34:05,329 --> 01:34:06,210 ¿Cómo os quedáis? 1209 01:34:07,890 --> 01:34:11,689 ¿Cómo se aumenta la dimensión de la escena del juego para que sea más grande? 1210 01:34:13,170 --> 01:34:24,729 La dimensión de... es decir, si te estoy entendiendo bien, cuando creáis un juego en 2D vais a ver que viene incorporada esta opción de 2D. 1211 01:34:24,729 --> 01:34:35,529 En realidad es la misma escena 3D que hemos tenido siempre, pero básicamente cuando jugamos en 2D, aunque podemos colocar cosas en profundidad, 1212 01:34:35,529 --> 01:34:38,590 lo que va a reaccionar 1213 01:34:38,590 --> 01:34:40,210 o va a interactuar una cosa con otra 1214 01:34:40,210 --> 01:34:41,949 en el mismo nivel de profundidad 1215 01:34:41,949 --> 01:34:43,489 la dimensión es 1216 01:34:43,489 --> 01:34:46,489 por defecto ya viene todo esto 1217 01:34:46,489 --> 01:34:47,630 de grande, es decir 1218 01:34:47,630 --> 01:34:49,810 lo que es la dimensión en sí no se cambia 1219 01:34:49,810 --> 01:34:52,310 entiendo que lo que te refieres 1220 01:34:52,310 --> 01:34:53,430 es la apariencia del fondo 1221 01:34:53,430 --> 01:34:56,289 porque aquí si no hubiera este fondo 1222 01:34:56,289 --> 01:34:57,770 básicamente si yo lo desactivara 1223 01:34:57,770 --> 01:34:59,449 y yo voy poniendo aquí plataformas 1224 01:34:59,449 --> 01:34:59,909 plataformas 1225 01:34:59,909 --> 01:35:03,670 el juego empezaría en donde 1226 01:35:03,670 --> 01:35:06,550 básicamente tengamos la cámara y se vea 1227 01:35:06,550 --> 01:35:06,789 ¿vale? 1228 01:35:07,810 --> 01:35:10,909 y bueno, y todo para que tenga sentido de lo que se vea 1229 01:35:10,909 --> 01:35:12,609 si queremos 1230 01:35:12,609 --> 01:35:14,409 que el fondo pues sea más 1231 01:35:14,409 --> 01:35:15,930 grande o lo ponemos más grande 1232 01:35:15,930 --> 01:35:18,569 ¿vale? o otra cosa importante 1233 01:35:18,569 --> 01:35:19,850 que ahora os explico es 1234 01:35:19,850 --> 01:35:21,890 si no es tileable hay que ir diseñando 1235 01:35:21,890 --> 01:35:23,649 es decir, si es un diseño en el que 1236 01:35:23,649 --> 01:35:25,649 digamos que no se van repitiendo edificios 1237 01:35:25,649 --> 01:35:27,869 y es un diseño muy grande, hay que hacer una imagen 1238 01:35:27,869 --> 01:35:29,949 muy grande y ponerla detrás como hemos hecho aquí 1239 01:35:29,949 --> 01:35:31,670 ¿sí? no hace falta 1240 01:35:31,670 --> 01:35:33,670 tampoco que esté en otra dimensión del eje Z 1241 01:35:33,670 --> 01:35:35,829 como aquí, que aquí lo hago 1242 01:35:35,829 --> 01:35:37,590 porque a mí me resultaba más fácil 1243 01:35:37,590 --> 01:35:40,050 pero en los ejemplos que os dejo 1244 01:35:40,050 --> 01:35:41,630 de la Nubis 1245 01:35:41,630 --> 01:35:43,810 que en realidad está bajado 1246 01:35:43,810 --> 01:35:45,930 de la SetStore, en alguna modificación 1247 01:35:45,930 --> 01:35:46,930 pero está ahí 1248 01:35:46,930 --> 01:35:49,689 o bueno, pues 1249 01:35:49,689 --> 01:35:51,850 es decir, en el tema 1250 01:35:51,850 --> 01:35:54,029 pone que se puede jerarquizar la profundidad 1251 01:35:54,029 --> 01:35:55,210 con los Sorting Layers 1252 01:35:55,210 --> 01:35:57,829 del Sprite Renderer, por ejemplo 1253 01:35:57,829 --> 01:35:58,189 aquí 1254 01:35:58,189 --> 01:36:00,430 si voy a... 1255 01:36:00,430 --> 01:36:02,109 Claro, es que aquí lo he metido como si fuera 1256 01:36:02,109 --> 01:36:04,210 un 3D. Es otra forma. Se pueden 1257 01:36:04,210 --> 01:36:06,390 combinar objetos 3D con el 2D 1258 01:36:06,390 --> 01:36:08,369 realmente. Ahora estamos centrándonos en el 2D 1259 01:36:08,369 --> 01:36:10,350 pero se puede. De hecho, también 1260 01:36:10,350 --> 01:36:12,010 en el tema se habla de que están los juegos 1261 01:36:12,010 --> 01:36:14,430 de apariencia 2D 1262 01:36:14,430 --> 01:36:16,369 pero que en realidad son 3Ds. Pero cuando 1263 01:36:16,369 --> 01:36:18,170 estamos en un... 1264 01:36:18,170 --> 01:36:20,409 solo con assets, con sprite 2D 1265 01:36:20,409 --> 01:36:21,949 ¿vale? Están estos 1266 01:36:21,949 --> 01:36:24,510 sorting layers, ¿vale? Para ir 1267 01:36:24,510 --> 01:36:26,310 agrupando en profundidades. 1268 01:36:26,310 --> 01:36:29,829 Esto en el Anubis se ve bien si os metéis en ese proyecto. 1269 01:36:30,590 --> 01:36:34,949 Entonces, bueno, si hay otra opción, y ya que lo ha sacado, pues os lo comento. 1270 01:36:35,489 --> 01:36:40,750 Si os fijáis en las plataformas, vuelvo al modo 2D, para estar en donde nos corresponde ahora. 1271 01:36:42,430 --> 01:36:49,529 Que yo tengo plataformas que en su Sprite Renderer vais a ver que son con este modo simple, 1272 01:36:49,609 --> 01:36:56,170 que es que la imagen yo la puedo escalar y se hace más o menos grande en base a estos sprites que os he pasado. 1273 01:36:56,310 --> 01:37:01,170 pasaba este vale pues aquí básicamente pues he cogido esto y lo he hecho tan 1274 01:37:01,170 --> 01:37:05,250 grande tan pequeño como he querido con él con la herramienta del red tool que 1275 01:37:05,250 --> 01:37:08,970 es la que más sirve para escalar vale y digo quiero así que sea así de grande 1276 01:37:08,970 --> 01:37:14,789 como tampoco tiene es blanco pues deforma y no se nota vale eso por 1277 01:37:14,789 --> 01:37:19,649 ejemplo en el techo también que es un blanco pues también puede ser rojo digo 1278 01:37:19,649 --> 01:37:25,649 es un color sólido pues se mueve y listo pero otro de los que os he pasado como 1279 01:37:25,649 --> 01:37:55,390 estas cajitas tienen un patrón, si os fijáis, fijaos que tienen unos cuadraditos, entonces escalarlo se ve feo, ¿no? De hecho yo en estas últimas sí que lo he escalado y se ve feo, si os fijáis, lo he pasado por alto, pues lo he escalado y ya está, del tamaño que quiera, pero en estas plataformas de aquí, ¿vale? Y eso es porque está en el modo simple, ¿vale? Pues que yo lo hago más grande o más pequeño y se deforma, no tiene más, pero en estas de aquí, si os fijáis, ¿vale? Los cuadradicos, 1280 01:37:55,649 --> 01:38:19,310 Sí que no se han deformado en proporción y se van sumando unos a otros. Es un único. Bueno, esto también es este. Aquí es un prefab que he metido dentro el Sprite Renderer. Lo que he hecho, y hay otra opción, por si tenéis un fondo que a lo mejor es tileable, es decir, es como una secuencia de los mismos edificios que cuando acaban empiezan otra vez. 1281 01:38:19,310 --> 01:38:22,170 no tenéis que hacerlo, podéis también 1282 01:38:22,170 --> 01:38:24,489 como yo he hecho en este ejemplo, hacerlo grande y ya está 1283 01:38:24,489 --> 01:38:26,510 pero si queréis que no sea 1284 01:38:26,510 --> 01:38:28,369 super grande el fondo y se vaya tileando 1285 01:38:28,369 --> 01:38:30,149 se vayan repitiendo una y otra vez 1286 01:38:30,149 --> 01:38:32,430 hay un modo de dibujado que es este 1287 01:38:32,430 --> 01:38:34,350 de Tile, y con este 1288 01:38:34,350 --> 01:38:36,329 hay una opción aquí, si os fijáis me pongo aquí 1289 01:38:36,329 --> 01:38:38,729 que si está en simple, se deforma 1290 01:38:38,729 --> 01:38:40,489 si lo pongo en Tile 1291 01:38:40,489 --> 01:38:42,489 sale esta opción que yo, lo que se va 1292 01:38:42,489 --> 01:38:43,770 haciendo es más grande y más pequeño 1293 01:38:43,770 --> 01:38:46,510 repitiéndose, veis que es ese mismo 1294 01:38:46,510 --> 01:38:48,470 patrón de los cuadrados, una y otra 1295 01:38:48,470 --> 01:38:50,430 vez. Esta es una forma de que los 1296 01:38:50,430 --> 01:38:52,569 sprites se tileen. 1297 01:38:52,569 --> 01:38:54,829 Luego hay otros modos, como este adaptativo 1298 01:38:54,829 --> 01:38:56,170 y tal, que se ajustan de otras formas 1299 01:38:56,170 --> 01:38:58,729 para que básicamente 1300 01:38:58,729 --> 01:39:00,010 se ajusten los bordes 1301 01:39:00,010 --> 01:39:01,909 y ya a partir de ahí se vaya tileando. 1302 01:39:02,510 --> 01:39:04,569 Pero con esto podéis hacer 1303 01:39:04,569 --> 01:39:06,050 que un mismo diseño sea el tileable, 1304 01:39:06,289 --> 01:39:07,010 incluido el fondo. 1305 01:39:09,340 --> 01:39:12,020 Para que esto vaya bien, si no me equivoco, 1306 01:39:13,039 --> 01:39:13,659 aparte de 1307 01:39:13,659 --> 01:39:14,619 ponerlo en modo tile, 1308 01:39:15,600 --> 01:39:17,439 lo suyo es, para que no de problemas, 1309 01:39:17,579 --> 01:39:19,579 que el mesh type pase 1310 01:39:19,579 --> 01:39:21,619 de el que viene por defecto de tight a full red 1311 01:39:21,619 --> 01:39:23,079 porque si no me equivoco 1312 01:39:23,079 --> 01:39:25,699 cuando me meto en el objeto 1313 01:39:25,699 --> 01:39:27,359 y 1314 01:39:27,359 --> 01:39:29,539 lo pones tileado, te sale 1315 01:39:29,539 --> 01:39:31,220 este error, puede no aparecer 1316 01:39:31,220 --> 01:39:33,260 correctamente, porque no, bueno 1317 01:39:33,260 --> 01:39:35,460 un conflicto, que aún así lo hace 1318 01:39:35,460 --> 01:39:37,539 ¿vale? pero sí que es verdad 1319 01:39:37,539 --> 01:39:39,699 que para que funcione de manera correcta 1320 01:39:39,699 --> 01:39:41,159 esto se pone en full rect 1321 01:39:41,159 --> 01:39:43,600 se aplica y ya está 1322 01:39:43,600 --> 01:39:45,659 y ya, pues se puede tilear 1323 01:39:45,659 --> 01:39:47,880 que ojo, que aunque se ponga en full red, si se pone en simple 1324 01:39:47,880 --> 01:39:49,380 también se puede escalar 1325 01:39:49,380 --> 01:39:52,159 el full red sobre todo es para 1326 01:39:52,159 --> 01:39:54,520 otro modo que hay que se llama slice 1327 01:39:54,520 --> 01:39:56,359 que lo que hace 1328 01:39:56,359 --> 01:39:57,640 que los botones por ejemplo 1329 01:39:57,640 --> 01:40:00,420 cuando se hacen más grandes o más pequeños 1330 01:40:00,420 --> 01:40:01,699 no se deforme el interior 1331 01:40:01,699 --> 01:40:02,880 en las interfaces 1332 01:40:02,880 --> 01:40:06,399 es un poco más allá 1333 01:40:06,399 --> 01:40:07,560 de lo que estamos viendo 1334 01:40:07,560 --> 01:40:11,670 más cosas que en 10 minutos 1335 01:40:11,670 --> 01:40:13,829 vale 1336 01:40:13,829 --> 01:40:16,369 para la entrega 1337 01:40:16,369 --> 01:40:17,989 con que hagáis una estructura de 1338 01:40:17,989 --> 01:40:19,750 plataformas, que se mueva el personaje 1339 01:40:19,750 --> 01:40:21,130 que haga las animaciones que se piden 1340 01:40:21,130 --> 01:40:23,250 que haya plataformas animadas 1341 01:40:23,250 --> 01:40:25,329 que el personaje vaya saltando 1342 01:40:25,329 --> 01:40:26,850 lo que son las torretas y tal 1343 01:40:26,850 --> 01:40:27,909 pone que es opcional 1344 01:40:27,909 --> 01:40:31,130 sí que es verdad que si lo intentáis hacer 1345 01:40:31,130 --> 01:40:33,250 de esas partes, en el enunciado 1346 01:40:33,250 --> 01:40:34,090 lo que os he dicho 1347 01:40:34,090 --> 01:40:37,090 hay un montón de código 1348 01:40:37,090 --> 01:40:38,890 para que lo vayáis 1349 01:40:38,890 --> 01:40:41,130 a ver, a medida que vais bajando 1350 01:40:41,130 --> 01:40:44,130 aquí veis que los códigos ya son bastante más largos 1351 01:40:44,130 --> 01:40:44,369 ¿vale? 1352 01:40:45,390 --> 01:40:47,609 pues bueno, si os atrevéis 1353 01:40:47,609 --> 01:40:49,810 si da por ello, porque además voy explicando más cosas 1354 01:40:49,810 --> 01:40:51,449 más avanzadas, ¿vale? Pero 1355 01:40:51,449 --> 01:40:53,550 si os veis con fuerza 1356 01:40:53,550 --> 01:40:55,369 la verdad es que sería genial porque le da 1357 01:40:55,369 --> 01:40:57,750 más gracia al nivel. Pero, de momento 1358 01:40:57,750 --> 01:40:59,449 con hacer plataformas que el personaje se vaya 1359 01:40:59,449 --> 01:41:01,489 moviendo y haya teniendo esas 1360 01:41:01,489 --> 01:41:03,310 animaciones, con el 1361 01:41:03,310 --> 01:41:05,189 Animator Controller según la acción que hagamos 1362 01:41:05,189 --> 01:41:07,250 pues más o menos se cumple 1363 01:41:07,250 --> 01:41:08,569 el objetivo del tema. 1364 01:41:12,659 --> 01:41:14,399 Pues decidme, venga, a ver 1365 01:41:14,399 --> 01:41:16,640 cosas o algo que queráis que veamos en los últimos 1366 01:41:16,640 --> 01:41:18,739 minutos. Bueno, no lo he dicho 1367 01:41:18,739 --> 01:41:20,739 pero está subido 1368 01:41:20,739 --> 01:41:27,380 el simulacro de examen, ¿vale? Sí que es verdad que no quiero repasar mucho cómo es, a no ser que tengáis dudas, 1369 01:41:27,500 --> 01:41:33,399 pero bueno, sois de segundo normalmente y lo tenéis aquí, ¿vale? A menos que tengáis alguna duda concreta, 1370 01:41:33,520 --> 01:41:38,939 bueno, ya cuando acabe el curso, me refiero, cuando se suban ya todos los temas, pues hablaré un poco más 1371 01:41:38,939 --> 01:41:45,520 del examen en sí. Ahora mismo me interesa que estudiéis los temas directamente. Pero bueno, eso, que sepáis, 1372 01:41:45,520 --> 01:42:00,520 si no lo habéis visto ya, que el simulacro de examen con la estructura, aunque no están planteadas las preguntas, pero un tipo de estructura y las normas iniciales que van a tener el examen de puntuación, etc., 1373 01:42:01,260 --> 01:42:13,449 y de normas de comportamiento también en el examen, pues ya están aquí. Una de las cosas que te faltaría, imagino, que no me contesta, 1374 01:42:13,449 --> 01:42:22,710 es que estos parámetros que son float, etcétera, eso, se van actualizando con los valores de un axis, por ejemplo. 1375 01:42:22,829 --> 01:42:30,010 Entonces, en todo momento se puede ir reflejando el valor para que haga una transición u otra, ¿vale? 1376 01:42:30,010 --> 01:42:33,390 Como hemos visto con la animación izquierda-derecha. 1377 01:42:33,770 --> 01:42:38,489 El salto, si os fijáis, y así lo vemos un poco por si acaso, la sugerencia. 1378 01:42:38,489 --> 01:43:06,470 A ver, ahora contesto a lo que ha puesto la compañera. Saltar, ¿vale? Pues saltar, por ejemplo, es si le he dado a la barra espaciadora, bueno, lo primero es que en algún momento, ¿vale? Yo he definido en el update que cuando le dé a la barra espaciadora, la variable estoy saltando se vuelva true, ¿vale? 1379 01:43:06,470 --> 01:43:24,430 No estoy activando el saltar desde aquí, estoy diciendo que sea true. Y en todo momento, el fix update está activando o desactivando ese saltar. Está todo el rato mirando en saltar, a ver si estoy saltando, se ha activado ya. 1380 01:43:24,430 --> 01:43:47,539 Si estoy vivo, si además estoy grounded y no estoy agachado, que es otra de las propiedades de las variables booleanas que se van activando y desactivando, si es así, pues oye, el trigger de jump que se active y le doy esta vez sí con un add force que vaya hacia arriba con modo impulso. 1381 01:43:47,539 --> 01:44:03,920 Vale, honestamente creo que la dificultad es bastante desproporcionada con el nivel que tengo, pero aún así lo intento hacer. Sinceramente, también es verdad, ¿eh? Bueno, entiendo completamente que os sintáis así, ¿vale? En ciertos momentos del curso, ¿vale? 1382 01:44:03,920 --> 01:44:24,520 Pero todo esto, hasta que no os pongáis a hacerlo, ¿vale? Y sé que son tareas largas, pero es que hasta que no os pongáis a hacerlo y a pensarlo, por mucho temario que veáis, por muchos vídeos que veáis, por todo lo que sea, hasta que no os pongáis a hacerlo, poco a poco no vais a saber hacerlo. 1383 01:44:24,520 --> 01:44:42,939 Es decir, vais a tener las herramientas, pero hasta que no os ponéis a pensarlo, no. Porque una vez os ponéis a pensarlo, es ir creando condiciones y variables. Sí que toma tiempo, pero realmente aquí hay mucho más código, porque yo tengo más cosas de las que os pido y aquí hay mucho más scripts. 1384 01:44:42,939 --> 01:44:45,039 pero por ejemplo 1385 01:44:45,039 --> 01:44:47,380 poner los distintos 1386 01:44:47,380 --> 01:44:48,819 estados y transiciones 1387 01:44:48,819 --> 01:44:50,800 e ir pensando los distintos 1388 01:44:50,800 --> 01:44:52,859 métodos que hay 1389 01:44:52,859 --> 01:44:55,140 con las instrucciones que más o menos he seguido dando 1390 01:44:55,140 --> 01:44:56,479 creo que 1391 01:44:56,479 --> 01:44:58,619 lleva tiempo pero no es tan complicado 1392 01:44:58,619 --> 01:45:00,899 lo de las torretas por ejemplo ya tendría 1393 01:45:00,899 --> 01:45:02,819 otras migas más distintas 1394 01:45:02,819 --> 01:45:03,760 porque además se ponen en juego 1395 01:45:03,760 --> 01:45:07,060 muchos más scripts independientes y hay que conectarlos 1396 01:45:07,060 --> 01:45:08,640 pero lo que es mover el personaje 1397 01:45:08,640 --> 01:45:10,920 y hacer las plataformas, colocarlas en el 1398 01:45:10,920 --> 01:45:12,039 espacio con sus colliders 1399 01:45:12,039 --> 01:45:16,180 y que el personaje se vaya moviendo entre una y otra con las animaciones, 1400 01:45:17,119 --> 01:45:19,239 yo estoy convencido de que si os ponéis, lo sacáis. 1401 01:45:20,239 --> 01:45:26,960 Sé que lleva tiempo, pero es el nivel de plataforma más básico que podemos hacer 1402 01:45:26,960 --> 01:45:30,000 y en principio hay que aprender a hacer uno. 1403 01:45:30,399 --> 01:45:33,659 Y en el tema creo que se explica todo lo necesario. 1404 01:45:34,760 --> 01:45:39,680 Pero también os lo digo así, si me dieran esta tarea, 1405 01:45:39,680 --> 01:45:41,779 al principio, incluso 1406 01:45:41,779 --> 01:45:43,479 diciendo, yo sé hacerla, vamos 1407 01:45:43,479 --> 01:45:45,239 sé hacerla, pero 1408 01:45:45,239 --> 01:45:47,680 ya simplemente el tener que sentarme 1409 01:45:47,680 --> 01:45:50,060 a pensarlo, a desgranarlo, es un ejercicio 1410 01:45:50,060 --> 01:45:51,560 que lleva siempre tiempo, siempre 1411 01:45:51,560 --> 01:45:53,159 hagas el videojuego que hagas un poco 1412 01:45:53,159 --> 01:45:55,779 que ponga en juego varias cosas y es ir 1413 01:45:55,779 --> 01:45:57,880 poco a poco, pues ir haciendo los distintos 1414 01:45:57,880 --> 01:45:59,800 métodos, ah, necesito una 1415 01:45:59,800 --> 01:46:01,359 boleana para activar que está 1416 01:46:01,359 --> 01:46:03,359 tocando el suelo 1417 01:46:03,359 --> 01:46:05,579 vale, pues ahí empiezas a añadirla 1418 01:46:05,579 --> 01:46:07,119 en donde necesitas, entonces 1419 01:46:07,119 --> 01:46:11,279 Incluso yo también, aunque me ponga aquí a enseñaros cosas 1420 01:46:11,279 --> 01:46:12,939 Aquí veis muchos elementos 1421 01:46:12,939 --> 01:46:15,000 Pero la primera vez que hice el saltar 1422 01:46:15,000 --> 01:46:17,260 Solo ponía la condición de estoy saltando 1423 01:46:17,260 --> 01:46:20,600 Hasta que vi que, bueno, es que también necesito que esté una life 1424 01:46:20,600 --> 01:46:22,279 Porque si no, cuando se muere el personaje 1425 01:46:22,279 --> 01:46:23,920 Que hay unos segundos, ¿vale? 1426 01:46:23,920 --> 01:46:25,779 Entre que se muere el personaje y se lanza la siguiente 1427 01:46:25,779 --> 01:46:27,880 Se recarga el nivel, ¿vale? 1428 01:46:27,899 --> 01:46:28,779 Con este morir, ¿vale? 1429 01:46:28,979 --> 01:46:30,739 Pasan tres segundos, ¿vale? 1430 01:46:30,739 --> 01:46:32,819 Y luego se recarga el nivel, ¿vale? 1431 01:46:33,539 --> 01:46:36,380 En esos tres segundos, si no pongo esa condición de alive 1432 01:46:36,380 --> 01:46:38,159 Claro, el personaje muerto 1433 01:46:38,159 --> 01:46:40,100 Después de hacer la animación de muerto 1434 01:46:40,100 --> 01:46:43,039 Seguiría saltando, cosa que no tiene sentido 1435 01:46:43,039 --> 01:46:44,399 Y ahí es cuando haces el alive 1436 01:46:44,399 --> 01:46:46,880 Ah, y aparte si no detecto de alguna forma 1437 01:46:46,880 --> 01:46:48,619 Para limitar que está posado en el suelo 1438 01:46:48,619 --> 01:46:50,920 Siempre que le dé a la barra espaciadora 1439 01:46:50,920 --> 01:46:53,000 Va a saltar y va a hacer dobles, triples 1440 01:46:53,000 --> 01:46:54,239 Cuádruples saltos 1441 01:46:54,239 --> 01:46:56,779 Entonces hay que hacer algo que vaya activando y desactivando 1442 01:46:56,779 --> 01:46:58,380 Una booleana según toca suelos 1443 01:46:58,380 --> 01:47:00,300 O deja de tocar suelos 1444 01:47:00,300 --> 01:47:02,960 Y aparte si creo luego una animación de agachado 1445 01:47:02,960 --> 01:47:04,859 Y se cambia ese boss collider 1446 01:47:04,859 --> 01:47:05,859 Para que esté agachado 1447 01:47:05,859 --> 01:47:11,899 Sabéis, es complicado porque conlleva pensar 1448 01:47:11,899 --> 01:47:16,920 Es decir, te quiero decir que hay otras cosas que es a lo mejor seguir más pasos 1449 01:47:16,920 --> 01:47:19,800 Pero cuando se quiere hacer algo que no es seguir un paso a paso 1450 01:47:19,800 --> 01:47:23,260 Claro, hay que sentarse e ir viendo a ver qué necesito, a ver qué tal 1451 01:47:23,260 --> 01:47:24,640 Y es complicado, sí 1452 01:47:24,640 --> 01:47:28,100 Es el problema a estas alturas 1453 01:47:28,100 --> 01:47:30,800 Es decir, no lo digo para desanimaros, lo digo para animaros 1454 01:47:30,800 --> 01:47:31,640 No sé si lo consigo 1455 01:47:31,640 --> 01:47:51,140 Pero lo bueno de la programación es, bueno, en realidad es lo malo, que es que hay que ir dándole muchas vueltas y luego parece que algo funciona y no, pero es sobre todo ir teniendo todo como escrito, en plan, yo quiero conseguir hacer esto y para que se haga esto y traducirlo a código. 1456 01:47:51,140 --> 01:47:53,319 Pero yo estoy bastante convencido de que a código 1457 01:47:53,319 --> 01:47:56,079 Al menos esta parte sí que la sabéis hacer ya 1458 01:47:56,079 --> 01:47:58,279 No sé si os he desanimado 1459 01:47:58,279 --> 01:47:59,260 Si os he desanimado 1460 01:47:59,260 --> 01:48:02,119 Pero con lo que sabéis podéis hacer 1461 01:48:02,119 --> 01:48:03,859 Al menos lo de colocar las plataformas 1462 01:48:03,859 --> 01:48:06,100 Y que el personaje se mueva entre ellas 1463 01:48:06,100 --> 01:48:07,000 Y llegue hasta un final 1464 01:48:07,000 --> 01:48:08,560 Sí que sabéis hacerlo 1465 01:48:08,560 --> 01:48:10,279 Otra cosa es que lleva tiempo 1466 01:48:10,279 --> 01:48:14,359 Y eso no lo va a quitar nadie 1467 01:48:14,359 --> 01:48:18,720 Pues nada, muchas gracias por asistir a la tutoría 1468 01:48:18,720 --> 01:48:22,460 y nos vemos en la siguiente. 1469 01:48:22,739 --> 01:48:23,560 Mucho ánimo con la tarea.