1 00:00:02,220 --> 00:00:16,859 Al final de la tarea, una vez teníamos el script realizado, hay que conseguir que al lanzar el juego, dado que se ubica en el start, si no me equivoco, aquí está descrito, solo se hará una vez y se instanciará ese prefab, que es la nave, una sola vez. 2 00:00:16,859 --> 00:00:29,140 Es cierto que, y abro aquí un código, lo pongo por aquí, que dependiendo de qué sobrecarga hayas usado del método Instantiate, hará una opción u otra. 3 00:00:29,760 --> 00:00:40,880 El otro día dijimos, veis que aquí hay tres formas, pasarán tres cosas y se instanciarán tres naves y cada una tiene unas diferentes consecuencias. 4 00:00:40,880 --> 00:01:00,280 Cuando empezamos a escribir el método instantiate, a ver si quiere, empieza a escribir ya incorrectamente, cuando abrimos estos paréntesis que definen a las funciones o métodos, teníamos estas sobrecargas que nos iban indicando qué propiedades está esperando. 5 00:01:00,280 --> 00:01:26,140 En principio las tres primeras, digamos las cuatro primeras casi, son las que más se utilizan. Bueno, cada una tiene sus propias consecuencias, pero no es lo mismo, no es exactamente lo mismo, suele estar todo relacionado y instantiate sirve para generar un clon de lo que se haya referenciado, pero no es lo mismo realizar, y ahora aquí paso a ejecutar tres si queréis, 6 00:01:26,140 --> 00:01:29,120 una instancia en la que solo se le pasa un parámetro 7 00:01:29,120 --> 00:01:30,040 que es el objeto 8 00:01:30,040 --> 00:01:32,280 que hemos 9 00:01:32,280 --> 00:01:34,840 introducido, digamos 10 00:01:34,840 --> 00:01:36,739 capturado a través del 11 00:01:36,739 --> 00:01:38,640 serialized field, que recordemos que es 12 00:01:38,640 --> 00:01:41,040 que luego, una vez tenemos 13 00:01:41,040 --> 00:01:43,159 este script, a ver, perdonad 14 00:01:43,159 --> 00:01:44,560 que es 15 00:01:44,560 --> 00:01:46,799 importante cuando queramos ver 16 00:01:46,799 --> 00:01:49,159 lo relativo a un 17 00:01:49,159 --> 00:01:51,239 a un script, no olvidar 18 00:01:51,239 --> 00:01:52,480 que ese script tiene que ser 19 00:01:52,480 --> 00:01:54,859 componente de alguno de los elementos que están 20 00:01:54,859 --> 00:02:02,420 en la escena ejecutándose vale por tanto voy a poner este instante prefab vale que es el script 21 00:02:02,420 --> 00:02:08,719 que estaba revisando hace un segundito está aquí está siempre fab y perdón en inglés instancia 22 00:02:08,719 --> 00:02:17,500 prefab si yo guardo vale tengo aquí 3 instancia y diferentes cada uno tiene sus particularidades 23 00:02:17,500 --> 00:02:24,460 como acabo de decir y cuando yo ejecuto no en el estar se van a generar los tres o eso debería 24 00:02:24,460 --> 00:02:26,280 hacer, vamos a darle a play y 25 00:02:26,280 --> 00:02:27,500 a ver si lo hace 26 00:02:27,500 --> 00:02:32,139 no hace nada y de hecho da fallo, ¿por qué? 27 00:02:32,240 --> 00:02:34,219 porque ya que os tengo aquí 28 00:02:34,219 --> 00:02:36,240 y entiendo que habéis estado con la tarea, ¿por qué no 29 00:02:36,240 --> 00:02:38,159 ¿por qué no se ha instanciado nada? 30 00:02:38,259 --> 00:02:42,939 ¿por qué da error? que esto ya lo vimos 31 00:02:42,939 --> 00:02:44,979 el otro día y bueno, si habéis hecho la tarea pues 32 00:02:44,979 --> 00:02:47,520 lo tendréis 33 00:02:47,520 --> 00:02:48,139 claro 34 00:02:48,139 --> 00:02:50,139 ¿por qué no lo tienes instanciado, no? 35 00:02:51,300 --> 00:02:53,020 ¿a qué te refieres? porque yo aquí 36 00:02:53,020 --> 00:02:54,180 básicamente 37 00:02:54,180 --> 00:02:56,259 ya tengo 38 00:02:56,259 --> 00:02:58,419 un instancy de myPrefab 39 00:02:58,419 --> 00:03:00,280 que está aquí preparado y debería 40 00:03:00,280 --> 00:03:02,639 instanciar ese prefab. Pero no tienes vinculado 41 00:03:02,639 --> 00:03:04,860 Unity en la columna de la derecha. 42 00:03:05,000 --> 00:03:05,840 Efectivamente. Es genial. 43 00:03:06,580 --> 00:03:08,319 Aquí, si nos damos cuenta, se han 44 00:03:08,319 --> 00:03:10,500 generado los campos para introducir 45 00:03:10,500 --> 00:03:12,259 pues, ojo, qué es 46 00:03:12,259 --> 00:03:14,280 mi prefab y qué GameObject 47 00:03:14,280 --> 00:03:16,180 es el que quiero instanciar. Aquí es donde 48 00:03:16,180 --> 00:03:18,139 podemos arrastrar este prefab 49 00:03:18,139 --> 00:03:20,400 y pues está 50 00:03:20,400 --> 00:03:22,240 aquí preparado y ahora todo lo que en el código 51 00:03:22,240 --> 00:03:24,599 tenga una variable referenciada 52 00:03:24,599 --> 00:03:26,120 con mi prefab, con myPrefab, 53 00:03:26,120 --> 00:03:34,139 pues se refiere a ese objeto. Por tanto, esta línea, por ejemplo, este primer instant shade, ya tiene lo que necesita para hacer la instancia. 54 00:03:34,659 --> 00:03:47,460 Cuando solo se usa uno de los parámetros, que además es la primera sobrecarga, ¿vale? Hacemos el instant shade solo dando un objeto que es el original que se va a clonar, 55 00:03:47,580 --> 00:03:54,800 que es lo que acabamos de hacer aquí, ¿vale? Cuando yo ahora, no olvidéis de guardar siempre que hagáis algún cambio en el código para que se ejecute, 56 00:03:54,800 --> 00:04:22,800 ¿Vale? Yo ahora cuando lance el juego, al menos una nave tiene que aparecer, ¿vale? Y de hecho se han generado alguna más. Y ve, de hecho, que si nos fijamos, a ver, tenemos una aquí, tenemos otra aquí, las estoy moviendo, bueno, perdonad que estoy cogiendo partes de la nave, de este prefab si la arrastro para acá y de este prefab para acá, ¿vale? Se han generado dos naves y las dos, si nos damos cuenta, están, deshago y marco una en el 000, ¿vale? 57 00:04:22,800 --> 00:04:40,060 Por tanto, una de estas naves, básicamente esta primera, es la primera que ha aparecido, porque recordad que el código, como os dije el otro día, a medida que lo vayamos complicando, esto no es así, pero en este momento sí que lo es, el código se va ejecutando de arriba a abajo. 58 00:04:40,060 --> 00:04:52,540 Entonces la primera nave que se genera en la jerarquía de objetos, que si os dais cuenta a medida que voy incorporando se van añadiendo de arriba a abajo, la primera nave se hacía referencia a esa. 59 00:04:53,199 --> 00:05:00,819 Es verdad que aquí tenemos otros dos Instantiates que no se están produciendo. 60 00:05:00,819 --> 00:05:02,899 como ya os comenté 61 00:05:02,899 --> 00:05:05,060 para hacer pruebas de que funciona y que no 62 00:05:05,060 --> 00:05:06,939 y esto me sirve un poco para explicar 63 00:05:06,939 --> 00:05:09,040 que un mismo método como este InstanceAid 64 00:05:09,040 --> 00:05:10,519 tiene varias sobrecargas y cada una 65 00:05:10,519 --> 00:05:12,779 tiene unas consecuencias 66 00:05:12,779 --> 00:05:14,259 que es lo que iba diciendo del principio 67 00:05:14,259 --> 00:05:16,639 ahora si guardo y lanzo el juego 68 00:05:16,639 --> 00:05:18,540 pues nuevamente 69 00:05:18,540 --> 00:05:22,959 como el prefab está ahí 70 00:05:22,959 --> 00:05:24,079 instanciado pues 71 00:05:24,079 --> 00:05:26,920 placa y aquí tenemos la nave 72 00:05:26,920 --> 00:05:29,100 por tanto este InstanceAid 73 00:05:29,100 --> 00:05:30,220 primero está funcionando 74 00:05:30,220 --> 00:05:34,680 Bueno, pues ya si quisiéramos usar ese instant sheet, está ahí preparado 75 00:05:34,680 --> 00:05:36,920 Vamos a ver qué pasa con el resto 76 00:05:36,920 --> 00:05:40,240 Es decir, voy a comentar el resto y voy a ver 77 00:05:40,240 --> 00:05:46,180 Esta línea, según empieza, es verdad que aquí está generando como una variable 78 00:05:46,180 --> 00:05:48,680 Si os fijáis, que le está poniendo un nombre que se llama instancia 79 00:05:48,680 --> 00:05:54,120 Que si no vemos mal, aquí pone GameObjectMyPrefab 80 00:05:54,120 --> 00:05:58,319 Está generando una variable de un tipo de variable que es GameObject 81 00:05:58,319 --> 00:06:06,160 Es decir, una clase, un conjunto de código que se refiere a todo lo relativo a los GameObjects. 82 00:06:06,279 --> 00:06:09,920 Si ya habéis estado estudiando, un GameObject en Unity se refiere a cada uno, 83 00:06:10,240 --> 00:06:14,279 da igual que sea la cámara, la luz, un cubo, cualquier geometría. 84 00:06:14,620 --> 00:06:18,379 Todo lo que vamos teniendo aquí introducido genéricamente se llama como un GameObject. 85 00:06:18,920 --> 00:06:26,040 Esta cajita hecha de alambre, que no está rellena, es un GameObject aquí representado. 86 00:06:26,040 --> 00:06:28,519 Que no es lo mismo que meter un prefab que veis que sí que está lleno. 87 00:06:28,879 --> 00:06:32,259 Pero en genérico, todo lo que se va introduciendo aquí son GameObjects. 88 00:06:32,660 --> 00:06:40,879 Por eso, cuando queremos referenciar a un objeto, usamos esta clase GameObject que usamos como tipo de la variable. 89 00:06:40,879 --> 00:06:46,639 Y por eso, todo lo que metamos en esta caja, si recordáis la analogía que hacía el otro día con cajas, 90 00:06:47,120 --> 00:06:52,620 si lo que queremos es que recoja ese GameObject, pues habrá que usar la clase GameObject. 91 00:06:52,620 --> 00:06:58,100 Voy a seguir y ahora vamos al transform y vemos un par de cosas 92 00:06:58,100 --> 00:07:03,120 Si yo ahora guardo y digo, a ver qué ocurre cuando yo ahora lanzo el juego, ¿no? 93 00:07:03,120 --> 00:07:05,240 Que solo se va a ejecutar esta línea en el start 94 00:07:05,240 --> 00:07:06,740 Vamos a ver 95 00:07:06,740 --> 00:07:10,319 Me voy a poner aquí a mi lado 96 00:07:10,319 --> 00:07:21,699 Vale, acabo de lanzar el juego y hay una nave en el 15, bueno, perdón, en el 000, igual 97 00:07:21,699 --> 00:07:24,240 ¿vale? pues eso significa 98 00:07:24,240 --> 00:07:26,519 que crea una instancia 99 00:07:26,519 --> 00:07:28,100 en la posición, aquí os lo he comentado 100 00:07:28,100 --> 00:07:30,139 y está ya indicado, crea una instancia en la posición 101 00:07:30,139 --> 00:07:32,220 del objeto de referencia y como 102 00:07:32,220 --> 00:07:34,139 hijo suyo, pero es verdad que 103 00:07:34,139 --> 00:07:36,060 está ocurriendo algo, si os dais cuenta 104 00:07:36,060 --> 00:07:38,100 que es que, aunque aquí he puesto 105 00:07:38,100 --> 00:07:39,699 dos parámetros 106 00:07:39,699 --> 00:07:42,040 ¿vale? my prefab y referencia 107 00:07:42,040 --> 00:07:44,279 referencia, si lo pensamos bien 108 00:07:44,279 --> 00:07:45,319 me podéis contestar 109 00:07:45,319 --> 00:07:47,920 a qué se está refiriendo en este momento 110 00:07:47,920 --> 00:07:55,970 a la línea de objeciones que has ubicado 111 00:07:55,970 --> 00:07:57,050 hay vacío, ¿no? 112 00:07:57,370 --> 00:08:00,189 No, tened en cuenta que yo he generado aquí una variable 113 00:08:00,189 --> 00:08:03,930 de tipo transform, y transform, si recordáis, 114 00:08:04,050 --> 00:08:06,029 es el primer componente que tiene las coordenadas 115 00:08:06,029 --> 00:08:08,750 de posición, rotación y escala de cualquier objeto, 116 00:08:09,129 --> 00:08:09,889 de casi cualquiera. 117 00:08:10,170 --> 00:08:12,529 Todos suelen empezar teniendo ese componente, 118 00:08:13,189 --> 00:08:15,689 y luego muchos otros dependiendo de cuál sea la función. 119 00:08:16,829 --> 00:08:20,029 Fijaos que yo en referencia, que es otra variable 120 00:08:20,029 --> 00:08:24,050 que he generado por medio de un campo serializado, 121 00:08:24,050 --> 00:08:27,290 no le he dado ninguna referencia, ahora mismo está vacía 122 00:08:27,290 --> 00:08:28,730 es nula, no existe 123 00:08:28,730 --> 00:08:31,110 por eso la ha generado 124 00:08:31,110 --> 00:08:33,049 en el 0.0.0 y no es hija de nada 125 00:08:33,049 --> 00:08:34,190 como pongo ahí que es 126 00:08:34,190 --> 00:08:37,190 si os fijáis es exactamente el prefab 127 00:08:37,190 --> 00:08:38,750 el 0.0 128 00:08:38,750 --> 00:08:41,070 porque no tiene esa referencia, es decir, ahora mismo 129 00:08:41,070 --> 00:08:42,950 esta línea está funcionando como esta 130 00:08:42,950 --> 00:08:45,070 primera, porque aquí lo que tiene 131 00:08:45,070 --> 00:08:46,789 es nada, no le existe 132 00:08:46,789 --> 00:08:48,990 para aprovechar esta sobrecarga y que tenga 133 00:08:48,990 --> 00:08:49,950 sentido meter 134 00:08:49,950 --> 00:08:52,610 dos variables aquí dentro 135 00:08:52,610 --> 00:08:57,389 Pues habría que decir cuál es esa referencia 136 00:08:57,389 --> 00:09:05,789 Y ahora mismo pone ninguna y está esperando un objeto, un vínculo, digamos, en este campo del tipo transform 137 00:09:05,789 --> 00:09:07,789 ¿Eso qué significa lo de transform? 138 00:09:08,029 --> 00:09:12,970 Que si yo en este campo, igual que he hecho en este de aquí arriba, arrastro aquí la nave 139 00:09:12,970 --> 00:09:16,389 Vais a ver que pone esa nave prefab, es el mismo objeto 140 00:09:16,389 --> 00:09:18,009 Pero fijaos en dos cosas 141 00:09:18,009 --> 00:09:27,190 Primero cambia el icono y cambia, también da como una indicación de qué es lo que está cogiendo de esta referencia que hemos metido ahí. 142 00:09:27,669 --> 00:09:32,409 Si os fijáis además, esto no sé si lo dije el otro día, este iconito es el mismo que el del componente transform, 143 00:09:32,889 --> 00:09:38,610 porque de esta variable solo está recogiendo lo relativo al transform del objeto. 144 00:09:39,289 --> 00:09:46,809 De este, por ejemplo, no se va a poder decir, si este GameObject tiene un componente de otro tipo, haz tal. 145 00:09:46,809 --> 00:09:53,070 No podremos hacer ningún tipo de operación en algo que no sea el componente transform de ese objeto. 146 00:09:53,309 --> 00:09:58,029 Igual que aquí accedemos al objeto completo, que aquí lo hemos hecho para que se instancie completamente, 147 00:09:58,870 --> 00:10:02,809 aquí solo estamos cogiendo una parte de ese objeto, ese componente transform. 148 00:10:03,190 --> 00:10:10,289 Esto me sirve, nuevamente el otro día, para introducir que las variables pueden ser de tipos casi ilimitados 149 00:10:10,289 --> 00:10:13,230 en relación con la cantidad de componentes que hay. 150 00:10:13,230 --> 00:10:26,450 Es decir, aquí si yo busco, no hay un transform porque como ya viene aplicado no está preparado, pero también os dije el otro día que, por ejemplo, lo vais a ver en la lección 3, existe este RigidBody. 151 00:10:26,450 --> 00:10:28,610 pues yo si por ejemplo 152 00:10:28,610 --> 00:10:31,029 en este objeto que le he añadido un RigidBody 153 00:10:31,029 --> 00:10:32,889 quisiera en algún momento 154 00:10:32,889 --> 00:10:34,789 cambiar las propiedades del componente 155 00:10:34,789 --> 00:10:36,649 RigidBody, esto ya lo iremos viendo 156 00:10:36,649 --> 00:10:38,750 que es básicamente 157 00:10:38,750 --> 00:10:40,909 lo que activa el motor de físicas de 158 00:10:40,909 --> 00:10:42,929 Unity, siempre va a haber 159 00:10:42,929 --> 00:10:44,509 la posibilidad de 160 00:10:44,509 --> 00:10:46,809 imaginaos que yo también puedo hacer 161 00:10:46,809 --> 00:10:48,629 una variable, fijaos que está aquí preparada 162 00:10:48,629 --> 00:10:50,570 y RigidBody2D es otro tipo de variable 163 00:10:50,570 --> 00:10:52,649 pues haremos una 164 00:10:52,649 --> 00:10:54,250 variable de tipo 165 00:10:54,250 --> 00:10:56,629 físicas, yo que sé, recordad que 166 00:10:56,629 --> 00:10:58,690 esto es el tipo de variable y esto 167 00:10:58,690 --> 00:11:00,909 es el nombre, que podemos poner el que queramos 168 00:11:00,909 --> 00:11:02,750 que asignamos a esta 169 00:11:02,750 --> 00:11:04,309 caja que recoge lo de variable 170 00:11:04,309 --> 00:11:06,289 y ahora fijaos que si 171 00:11:06,289 --> 00:11:08,250 bueno, si yo guardo lo primero 172 00:11:08,250 --> 00:11:10,629 recordad la estrellita de aquí 173 00:11:10,629 --> 00:11:12,730 si yo guardo y vuelvo 174 00:11:12,730 --> 00:11:14,590 a ir al objeto en el que he puesto 175 00:11:14,590 --> 00:11:16,190 el script, ahora hay otra 176 00:11:16,190 --> 00:11:17,929 bueno, tiene que estar este rigidbody 177 00:11:17,929 --> 00:11:20,509 para poder referenciarlo ahora, pero ahora está 178 00:11:20,509 --> 00:11:21,610 esperando otro 179 00:11:21,610 --> 00:11:24,710 que introduzcamos algo en este campo 180 00:11:24,710 --> 00:11:27,190 de tipo RigidBody, un poco del tipo 181 00:11:27,190 --> 00:11:28,269 de la caja que hemos creado 182 00:11:28,269 --> 00:11:29,990 si yo aquí arrastro ahora la nave 183 00:11:29,990 --> 00:11:33,350 veréis que la nave prefab 184 00:11:33,350 --> 00:11:34,850 como no tiene RigidBody 185 00:11:34,850 --> 00:11:36,750 no lo va a coger 186 00:11:36,750 --> 00:11:39,049 porque sí que tiene transform, sí que se puede 187 00:11:39,049 --> 00:11:40,730 arrastrar como todos los GameObjects 188 00:11:40,730 --> 00:11:43,289 un GameObject, pero no tiene un RigidBody 189 00:11:43,289 --> 00:11:45,090 por tanto, aunque yo intente 190 00:11:45,090 --> 00:11:46,889 podéis hacer la prueba, arrastrar 191 00:11:46,889 --> 00:11:49,710 igual que si me deja introducirlo en los otros 192 00:11:49,710 --> 00:11:51,110 dos campos, aquí no me deja 193 00:11:51,110 --> 00:11:55,750 sí que podré, por ejemplo, meter el propio GameObject del script 194 00:11:55,750 --> 00:11:58,450 fijaos que si yo lo arrastro, sí me deja, ¿por qué? 195 00:11:58,970 --> 00:12:03,029 porque tiene un RigidBody al cual yo podré acceder luego para cambiar variables 196 00:12:03,029 --> 00:12:08,529 y veis que además el iconito, en estos componentes que ya vienen generados directamente por Unity 197 00:12:08,529 --> 00:12:11,070 pues les ponen estos iconitos para facilitar 198 00:12:11,070 --> 00:12:14,730 veis que aunque la caja parece que es un poco lo mismo 199 00:12:14,730 --> 00:12:19,049 esto ya profundizaremos más 200 00:12:19,049 --> 00:12:21,470 luego al final cada variable tiene su tipo 201 00:12:21,470 --> 00:12:23,850 aquí lo que estamos haciendo en esta línea 202 00:12:23,850 --> 00:12:27,850 es crear sin pasar por el comienzo 203 00:12:27,850 --> 00:12:31,149 de la clase, que es donde vamos generando 204 00:12:31,149 --> 00:12:33,350 lo que se llama las variables miembro 205 00:12:33,350 --> 00:12:36,149 que son variables que podréis usar en todo el código 206 00:12:36,149 --> 00:12:38,629 porque su ámbito, esto si ya habéis visto 207 00:12:38,629 --> 00:12:41,409 ahora vamos un poco a esto, pero si ya habéis leído el tema 0 208 00:12:41,409 --> 00:12:44,590 cosa que deberíais haber hecho, al menos una pasada 209 00:12:44,590 --> 00:12:49,309 hay un tipo de variables que si se ubican al comienzo 210 00:12:49,309 --> 00:12:52,409 de la clase podrán ser luego empleadas 211 00:12:52,409 --> 00:12:54,610 por cualquier método, en este caso start 212 00:12:54,610 --> 00:12:58,250 lo que también se puede hacer es declarar 213 00:12:58,250 --> 00:13:01,049 es decir, construir esta caja dentro ya de un método 214 00:13:01,049 --> 00:13:04,409 no dentro de la clase en general, sino dentro de un método 215 00:13:04,409 --> 00:13:06,730 de su propio bloque, entonces estamos generando 216 00:13:06,730 --> 00:13:09,649 una caja de tipo GameObject 217 00:13:09,649 --> 00:13:13,370 que estamos llamando instancia y a diferencia 218 00:13:13,370 --> 00:13:15,490 de aquí, lo que estamos 219 00:13:15,490 --> 00:13:17,429 haciendo es que en ningún momento hemos 220 00:13:17,429 --> 00:13:19,370 creado un serialize que te 221 00:13:19,370 --> 00:13:21,389 permita arrastrar y saber 222 00:13:21,389 --> 00:13:23,549 que esta caja se llena con un objeto 223 00:13:23,549 --> 00:13:25,350 que metes por el inspector, no 224 00:13:25,350 --> 00:13:27,110 aquí lo que estamos haciendo es 225 00:13:27,110 --> 00:13:28,769 rellenar la caja instancia 226 00:13:28,769 --> 00:13:31,090 de tipo GameObject con la instancia 227 00:13:31,090 --> 00:13:33,149 que generamos, es decir 228 00:13:33,149 --> 00:13:34,830 que si yo en esta instancia 229 00:13:34,830 --> 00:13:37,429 luego cambio alguno de sus 230 00:13:37,429 --> 00:13:38,629 parámetros, ahora lo vemos 231 00:13:38,629 --> 00:13:41,590 no está refiriéndose a 232 00:13:41,590 --> 00:13:42,909 nada que hemos capturado por 233 00:13:42,909 --> 00:13:47,929 el inspector, sino que hemos llenado la caja directamente con una instrucción 234 00:13:47,929 --> 00:13:50,769 que hemos dado aquí. ¿Esto qué significa? 235 00:13:52,070 --> 00:13:56,190 Un ejemplo rápido. Veremos que hay un montón de instrucciones y recordad 236 00:13:56,190 --> 00:13:59,529 esto lo vimos el otro día, que había un operador al escribir 237 00:13:59,529 --> 00:14:02,009 sentencias, que es el punto. 238 00:14:02,629 --> 00:14:07,929 Esto lo indiqué, por ejemplo, cuando ponemos transform, podemos acceder a la 239 00:14:07,929 --> 00:14:11,950 posición de un objeto si escribimos position, porque estamos 240 00:14:11,950 --> 00:14:14,230 accediendo a las 241 00:14:14,230 --> 00:14:16,070 propiedades del transform 242 00:14:16,070 --> 00:14:18,210 lo único es que, como ya os dije 243 00:14:18,210 --> 00:14:19,929 que como el transform es tan utilizado 244 00:14:19,929 --> 00:14:21,929 porque es todo lo que se refiere a las coordenadas 245 00:14:21,929 --> 00:14:23,929 de los GameObjects, pues han 246 00:14:23,929 --> 00:14:25,830 generado, aparte de la clase transform 247 00:14:25,830 --> 00:14:28,190 que siempre se describe en las clases con mayúscula 248 00:14:28,190 --> 00:14:29,409 empezando por mayúscula 249 00:14:29,409 --> 00:14:31,970 importante, esto también lo pone las buenas prácticas 250 00:14:31,970 --> 00:14:33,889 en el tema cero, han generado 251 00:14:33,889 --> 00:14:35,929 una propiedad 252 00:14:35,929 --> 00:14:38,090 que se llama transform con minúscula 253 00:14:38,090 --> 00:14:39,929 que es el nombre en el que se da 254 00:14:39,929 --> 00:14:41,669 a las propiedades como por ejemplo 255 00:14:41,669 --> 00:14:43,450 positian. No estamos aquí 256 00:14:43,450 --> 00:14:45,330 refiriéndonos a la clase directamente, 257 00:14:45,929 --> 00:14:47,809 sino que es una especie de... 258 00:14:47,809 --> 00:14:49,710 Es un poco ambiguo porque al final es la misma 259 00:14:49,710 --> 00:14:51,990 palabra, pero las mayúsculas 260 00:14:51,990 --> 00:14:53,789 y las minúsculas tienen influencia al escribir 261 00:14:53,789 --> 00:14:56,029 código. Entonces, una manera de simplificar 262 00:14:56,029 --> 00:14:57,990 y, digamos, no tener que acceder 263 00:14:57,990 --> 00:14:59,649 a una clase que es como una entidad superior, 264 00:15:00,409 --> 00:15:01,789 sino de meter una operación 265 00:15:01,789 --> 00:15:03,389 que se puede hacer de manera más simple, 266 00:15:03,809 --> 00:15:05,769 podemos acceder a las propiedades 267 00:15:05,769 --> 00:15:07,789 del transform con este transform en minúscula 268 00:15:07,789 --> 00:15:09,809 y luego al ir poniendo el positian, pues podemos decir 269 00:15:09,809 --> 00:15:15,570 igual a 10 que va a dar fallo porque por más cuestiones pero veis que lo 270 00:15:15,570 --> 00:15:19,950 importante de esto ahora mismo es que cuando ponemos un punto 271 00:15:19,950 --> 00:15:24,509 vamos abriendo opciones hijas de ese primer elemento que hemos puesto como lo 272 00:15:24,509 --> 00:15:30,870 que el otro día os dije de país comunidad autónoma vale o estado si fuera 273 00:15:30,870 --> 00:15:37,169 eeuu ciudad punto calle punto número vale si estas propiedades existieran 274 00:15:37,169 --> 00:15:41,990 configuradas vale pues sería esta la forma la sintaxis para ir accediendo 275 00:15:41,990 --> 00:15:47,629 digamos de un elemento a otro pero para poder acceder por ejemplo al elemento 276 00:15:47,629 --> 00:15:51,870 ciudad si no lo hemos configurado de otra forma siempre que hay que ir 277 00:15:51,870 --> 00:15:55,669 accediendo de un padre digamos que reconozca o que hemos guardado como 278 00:15:55,669 --> 00:15:59,289 variable como punto de partida y luego podemos ir 279 00:15:59,289 --> 00:16:04,250 llegando a los hijos esto qué quiere decir que si hemos generado y les 280 00:16:04,250 --> 00:16:20,710 Comento esto que tengo aquí. Si hemos generado un GameObject que llamamos instancia, que será esa instancia que hemos generado, luego podremos acceder, esto también es ir sabiendo poco a poco más y más herramientas, podemos acceder, por ejemplo, al nombre de esa instancia. 281 00:16:20,710 --> 00:16:38,429 ¿Eso qué significa? Que si decimos, vale, aparte de guardar esta instancia con el nombre de instancia, yo quiero que esta instancia tenga el nombre, ¿vale? El nombre del objeto, del GameObject y que se llame hola, ¿vale? Voy a probar a ejecutarlo y ahora vemos su utilidad de esta línea. 282 00:16:39,129 --> 00:16:49,289 Si yo arranco este juego, vais a ver, bueno, lo primero que algo se cae porque le puse el Rigipodi, ¿vale? 283 00:16:49,289 --> 00:16:51,309 Ya veis que al meter un componente está haciendo algo. 284 00:16:51,429 --> 00:16:55,950 Pero lo importante, la nave ahora no se llama clon como se llamaba antes, ahora se llama hola. 285 00:16:56,370 --> 00:16:59,850 Y aquí está dentro todo lo de la nave, el prefab que habíamos ejecutado, ¿vale? 286 00:17:00,710 --> 00:17:05,430 Fijaos, y esto me sirve para ir introduciendo que las variables se pueden ir creando en muchos sitios, 287 00:17:05,430 --> 00:17:07,309 que aquí he puesto varias juntas 288 00:17:07,309 --> 00:17:09,289 y si por ejemplo examináis 289 00:17:09,289 --> 00:17:11,390 que esto también lo iremos viendo en el script 290 00:17:11,390 --> 00:17:13,990 de la unidad 0 de la tarea que os he dejado 291 00:17:13,990 --> 00:17:15,269 como referencia 292 00:17:15,269 --> 00:17:17,349 habrá variables que se van generando al principio 293 00:17:17,349 --> 00:17:18,789 para tenerlas todas digamos 294 00:17:18,789 --> 00:17:20,930 usables a lo largo de todo el proyecto 295 00:17:20,930 --> 00:17:23,049 pero también en momentos nos puede interesar 296 00:17:23,049 --> 00:17:25,450 que esa variable se cree al empezar el juego 297 00:17:25,450 --> 00:17:27,430 ¿vale? en este momento se crea esta instancia 298 00:17:27,430 --> 00:17:28,670 de tipo GameObject 299 00:17:28,670 --> 00:17:31,269 y aquí hemos generado una instancia 300 00:17:31,269 --> 00:17:33,089 que ojo todavía no hemos resuelto 301 00:17:33,089 --> 00:17:35,190 que diferencia hay entre esto y esto 302 00:17:35,190 --> 00:17:37,109 Porque no hemos asignado nada de referencia 303 00:17:37,109 --> 00:17:38,269 Bueno, está ahí preparado 304 00:17:38,269 --> 00:17:40,109 Pero no lo hemos llegado a hacer 305 00:17:40,109 --> 00:17:43,769 A ver, que detengo esto 306 00:17:43,769 --> 00:17:47,910 Y aquí está esperando 307 00:17:47,910 --> 00:17:48,910 A que sigamos trabajando 308 00:17:48,910 --> 00:17:51,210 Ahora sí que está cogiendo una referencia 309 00:17:51,210 --> 00:17:53,809 Ahora usamos a conveniencia 310 00:17:53,809 --> 00:17:55,710 Lo que queramos, pero lo importante es 311 00:17:55,710 --> 00:17:57,190 Que una vez guardamos 312 00:17:57,190 --> 00:17:58,990 Una instancia de tipo GameObject 313 00:17:58,990 --> 00:18:01,730 También podemos acceder a las propiedades de ese GameObject 314 00:18:01,730 --> 00:18:02,890 Como acabamos de hacer aquí 315 00:18:02,890 --> 00:18:11,630 Entonces, vamos a hacer un poco la lógica que pone aquí que tiene usar esta sobrecarga de instancia 316 00:18:11,630 --> 00:18:14,529 Que es que crea una instancia a la posición del objeto de referencia 317 00:18:14,529 --> 00:18:16,470 Que es este segundo que tenemos aquí 318 00:18:16,470 --> 00:18:20,910 Y como hijo suyo, es decir, de esta referencia 319 00:18:20,910 --> 00:18:24,390 Todo esto yo me lo sé, aparte de porque ya lo he usado más veces 320 00:18:24,390 --> 00:18:29,130 Porque, os vuelvo a repetir, que si vamos pasando por las sobrecargas 321 00:18:29,130 --> 00:18:29,990 que en este caso 322 00:18:29,990 --> 00:18:33,289 es esta, la que estamos usando 323 00:18:33,289 --> 00:18:35,269 nos pide un GameObject, aquí lo pone 324 00:18:35,269 --> 00:18:37,470 como Object, cuando pone Object significa GameObject 325 00:18:37,470 --> 00:18:38,730 es otra forma de llamarlo 326 00:18:38,730 --> 00:18:40,730 y bueno, si luego 327 00:18:40,730 --> 00:18:43,150 bueno, es que no quiero liar más 328 00:18:43,150 --> 00:18:45,069 la madeja, necesita un objeto 329 00:18:45,069 --> 00:18:47,009 que es el que va a referenciar y luego 330 00:18:47,009 --> 00:18:48,869 un transform que va a ser ese padre 331 00:18:48,869 --> 00:18:51,349 y pone, clona el objeto existente y retorna 332 00:18:51,349 --> 00:18:53,109 el clon, si quisiéramos 333 00:18:53,109 --> 00:18:55,269 saber más, esto ya lo comenté el otro 334 00:18:55,269 --> 00:18:57,210 día, saber más de 335 00:18:57,210 --> 00:18:59,289 que hace cada método 336 00:18:59,289 --> 00:19:01,369 la buena forma de hacerlo es 337 00:19:01,369 --> 00:19:02,710 meternos en el API 338 00:19:02,710 --> 00:19:05,490 en el manual de uso 339 00:19:05,490 --> 00:19:06,950 del código 340 00:19:06,950 --> 00:19:08,910 en el propio 341 00:19:08,910 --> 00:19:11,329 desde el propio Google se puede hacer 342 00:19:11,329 --> 00:19:13,309 si ponemos el método 343 00:19:13,309 --> 00:19:15,789 o la propiedad que queramos consultar 344 00:19:15,789 --> 00:19:16,789 y ponemos Unity después 345 00:19:16,789 --> 00:19:18,009 lo primero que va a poner 346 00:19:18,009 --> 00:19:19,170 va a ser 347 00:19:19,170 --> 00:19:23,009 el acceso 348 00:19:23,009 --> 00:19:25,750 a cómo se 349 00:19:25,750 --> 00:19:28,410 usa este elemento 350 00:19:28,410 --> 00:19:30,329 o este método, aquí veis que vienen 351 00:19:30,329 --> 00:19:31,750 ya varias sobrecargas 352 00:19:31,750 --> 00:19:34,170 y si vamos pasando, aquí pone 353 00:19:34,170 --> 00:19:35,190 object original 354 00:19:35,190 --> 00:19:38,170 que aquí es lo mismo que ponía en el IntelliSense 355 00:19:38,170 --> 00:19:40,009 que hemos visto antes en el código, y aquí sí que 356 00:19:40,009 --> 00:19:42,230 podemos ir más con detalle, por si 357 00:19:42,230 --> 00:19:44,250 tenemos dudas, ir viendo qué significa 358 00:19:44,250 --> 00:19:46,130 cada cosa, pues oye, es algo de tipo objeto 359 00:19:46,130 --> 00:19:47,990 de GameObject, no podemos meterle otra cosa 360 00:19:47,990 --> 00:19:49,690 quiere un GameObject, aquí 361 00:19:49,690 --> 00:19:52,130 y en original es el nombre que le ha dado 362 00:19:52,130 --> 00:19:54,190 a esta variable, digamos 363 00:19:54,190 --> 00:19:57,730 a este parámetro que está esperando que hagamos algo con él, ¿vale? 364 00:19:57,869 --> 00:20:01,650 Y aquí si bajamos en los parámetros nos dice, vale, lo que yo ponga como original, 365 00:20:01,789 --> 00:20:05,990 que es en todas estas, en esta posición de los parámetros, dice un objeto existente 366 00:20:05,990 --> 00:20:10,349 del que quieras hacer una copia, ¿vale? Pues ya sabemos que aquí habría que meter 367 00:20:10,349 --> 00:20:15,509 ese objeto que queremos copiar, ¿vale? Cuando pone parent, pues podemos ir a parent. 368 00:20:16,009 --> 00:20:22,309 Padre que será asignado al nuevo objeto, ¿vale? Pues aquí meteremos un transform, ¿vale? 369 00:20:22,309 --> 00:20:23,910 Y ese será padre en este caso. 370 00:20:24,509 --> 00:20:26,190 Podemos hacer igual con más tipos. 371 00:20:26,690 --> 00:20:35,109 Para que vayáis viendo cómo se usa, aquí os puedo ir diciendo más, pues más, digamos, características de, en este caso, Instance 8. 372 00:20:35,470 --> 00:20:38,410 Y si vais bajando incluso podréis ir viendo ejemplos, ¿vale? 373 00:20:38,849 --> 00:20:42,130 El problema de los ejemplos igual a estas alturas es que son siempre más avanzados, 374 00:20:42,650 --> 00:20:47,710 pero a medida que vayáis teniendo más bagaje iréis entendiendo más todos los ejemplos. 375 00:20:47,710 --> 00:21:12,150 Fijaos que luego incluso Instantiate, bueno, yo lo he hecho así un poco a las bravas, pero incluso fijaos que Instantiate, si lo vuelvo a declarar aquí, tiene más tipos, ¿vale? Con estas llavecicas que se abren aquí y si me pongo encima, pues no da muchas descripciones y en ese caso, para desambiguar, para saber qué significa, pues tendríamos que meternos nuevamente en el manual o en la API, ¿vale? 376 00:21:12,150 --> 00:21:33,130 Aquí más abajo están las declaraciones de este estático, que es diferente. En vez de un objeto tiene una referencia de tipo. Esto ahora mismo nos da un poco igual, pero sí que me sirve para que vayáis viendo que las sobrecargas se pueden ir entendiendo mejor si vamos viendo este manual. 377 00:21:33,130 --> 00:21:51,410 Y luego, importante, aquí arriba en la documentación de Unity, que es a donde os va a referenciar si ponéis la propiedad, el parámetro, la función seguida de Unity en Google, podéis acceder al API, que es donde os va a decir el uso, digamos, a nivel de programación, como estamos haciendo ahora mismo, y también al manual. 378 00:21:51,410 --> 00:21:55,309 al manual, bueno, es el manual del programa 379 00:21:55,309 --> 00:21:58,049 para acceder al manual de esta operación 380 00:21:58,049 --> 00:22:00,690 en vez de hacerlo desde aquí, se puede cambiar a manual 381 00:22:00,690 --> 00:22:04,009 que si tiene una sección en el manual del propio programa 382 00:22:04,009 --> 00:22:07,529 pues os puede contar una descripción que no está tan basada 383 00:22:07,529 --> 00:22:08,890 en el código, sino del uso 384 00:22:08,890 --> 00:22:12,769 esto lamentablemente no suele estar en español 385 00:22:12,769 --> 00:22:15,470 igual que el software en sí, el Unity no está en español 386 00:22:15,470 --> 00:22:18,589 pero bueno, con poco a poco en inglés 387 00:22:18,589 --> 00:22:42,910 Es bastante técnico, pero bueno, se puede ir traduciendo y veis que aquí un poco ya va explicando qué hace. Nuevamente, estas explicaciones a veces pueden pecar un poco de muy técnicas en el momento que nos encontramos, pero sí que nos puede dar ciertas pistas. A lo mejor hay líneas que empieza a hablar de herencia, de bueno, behavior. Bueno, pues esto no sé, si seguimos seguramente algo iremos pillando y poco a poco podremos seguir avanzando. 388 00:22:42,910 --> 00:23:01,430 Que me importaba ver un poco qué significan estos nombres que aparecen bajo original, position, ¿veis? En la sobrecarga pone object original. Pues original es un nombre que sirve de referencia para luego ver en la API qué significa o qué te está pidiendo en cada momento. 389 00:23:01,430 --> 00:23:03,170 ¿Vale? Vuelvo aquí 390 00:23:03,170 --> 00:23:06,490 ¿Vale? ¿Qué tal hasta aquí? 391 00:23:06,690 --> 00:23:07,849 Más o menos me vais siguiendo 392 00:23:07,849 --> 00:23:10,789 Doy vueltas que poco a poco 393 00:23:10,789 --> 00:23:11,930 Se irán completando ¿Vale? 394 00:23:11,970 --> 00:23:14,809 Que de primera es muy complicado explicar todo 395 00:23:14,809 --> 00:23:16,369 Vale 396 00:23:16,369 --> 00:23:18,930 Vamos a quedarnos con lo más mundano 397 00:23:18,930 --> 00:23:19,750 De todo esto ¿Vale? 398 00:23:20,190 --> 00:23:23,150 Que es que estamos generando una variable de tipo GameObject 399 00:23:23,150 --> 00:23:24,730 Y dentro de esa caja 400 00:23:24,730 --> 00:23:26,210 ¿Vale? Llamada instancia 401 00:23:26,210 --> 00:23:28,569 Si esto 402 00:23:28,569 --> 00:23:30,549 Claro 403 00:23:30,549 --> 00:23:32,509 Bueno me está diciendo un compañero 404 00:23:32,509 --> 00:23:34,049 que es un poco complicado acordarse de todo 405 00:23:34,049 --> 00:23:36,210 esto, lo dije el primer día 406 00:23:36,210 --> 00:23:38,410 va a ser una constante iteración 407 00:23:38,410 --> 00:23:40,250 va a haber que ir volviendo todo el rato 408 00:23:40,250 --> 00:23:41,609 a lo mismo e ir machacándolo 409 00:23:41,609 --> 00:23:43,650 es importante 410 00:23:43,650 --> 00:23:45,990 no sé si lo estáis haciendo, leer bien los temas 411 00:23:45,990 --> 00:23:48,049 e ir intentando hacer las tareas, poco a poco 412 00:23:48,049 --> 00:23:49,089 pues 413 00:23:49,089 --> 00:23:52,029 acordarse es ir teniendo 414 00:23:52,029 --> 00:23:53,789 conciencia de cómo era 415 00:23:53,789 --> 00:23:55,950 pero una vez vamos usando las cosas 416 00:23:55,950 --> 00:23:58,049 varias veces, y ya os digo, con el uso de la app 417 00:23:58,049 --> 00:24:00,130 y del IntelliSense, por eso soy tan 418 00:24:00,130 --> 00:24:02,109 pesado con ir entendiendo 419 00:24:02,109 --> 00:24:18,569 Cuando escribimos algo aquí, ¿qué significa? Si ponemos invoke, yo a lo mejor no sé qué es invoke, pero me suena que algo se usaba y aquí podemos ir sabiendo, cuando es un método, podemos ir sabiendo qué cosas son, deduciéndolo o metiéndonos en la API. 420 00:24:18,569 --> 00:24:35,829 Y poco a poco iremos salvando todo, ya veréis. Si seguimos viendo esto, nos falta decirle cuál es la referencia de este prefab. Y la referencia que nosotros queramos. Aquí la tenemos preparada, la variable, para usarla, pero todavía no lo estamos haciendo bien. 421 00:24:35,829 --> 00:24:38,069 Porque aquí os lo he puesto como ejemplo 422 00:24:38,069 --> 00:24:41,690 La voy a quitar, ¿vale? 423 00:24:41,690 --> 00:24:43,630 Si dais a este circulito podéis decirle 424 00:24:43,630 --> 00:24:45,210 Que no queréis ninguna, que es como estaba 425 00:24:45,210 --> 00:24:47,910 Y claro, yo lo que voy a querer en cierto momento 426 00:24:47,910 --> 00:24:49,690 Es usar las capacidades 427 00:24:49,690 --> 00:24:50,349 Que me está dando 428 00:24:50,349 --> 00:24:53,430 Esa sobrecarga de Instanciate 429 00:24:53,430 --> 00:24:55,970 Para decirle yo el punto en el que quiero que se instancie 430 00:24:55,970 --> 00:24:58,289 No quiero que se instancie a lo mejor en el 0, 0, 0 431 00:24:58,289 --> 00:24:59,049 ¿Vale? 432 00:24:59,450 --> 00:25:01,549 Sino que yo quiero que se instancie donde 433 00:25:01,549 --> 00:25:03,269 Punto, ¿vale? 434 00:25:03,269 --> 00:25:05,109 Estoy generando un GameObject vacío 435 00:25:05,109 --> 00:25:11,150 recordad que igual que se puede generar estos cubos y estos elementos con los que habéis hecho el prefab de la nave 436 00:25:11,150 --> 00:25:15,769 puede generar un vacío, un empty, que es como los nulos en los software de 3D 437 00:25:15,769 --> 00:25:18,450 que sirve simplemente para tener una referencia en el espacio 438 00:25:18,450 --> 00:25:21,710 no contiene nada más allá de una referencia del espacio 439 00:25:21,710 --> 00:25:25,730 y lo voy a llamar, borro este que he generado dos en el proceso 440 00:25:25,730 --> 00:25:29,730 lo voy a llamar punto referencia para saber bien que es ese 441 00:25:29,730 --> 00:25:34,009 y ojo que cuando generamos un nuevo empty object o cualquier elemento 442 00:25:34,009 --> 00:25:38,109 puede no estar ubicado en el 00 que de partida no nos gustaría. 443 00:25:38,269 --> 00:25:40,670 Nos lo pone en el centro del visor donde estamos mirando. 444 00:25:41,130 --> 00:25:45,930 Ojo que suelen ir ya a las posiciones modificadas. 445 00:25:46,309 --> 00:25:51,990 Si queremos colocar algo en origen en el 00, en los tres puntos de ese componente, 446 00:25:52,390 --> 00:25:54,450 si le damos a Reset, se colocará ahí. 447 00:25:56,029 --> 00:25:58,529 Esto lo he hecho un poco para que veáis el punto de partida. 448 00:25:58,529 --> 00:26:02,549 Pero ahora lo que puedo hacer es decir, no, yo quiero que este elemento, la nave, 449 00:26:02,549 --> 00:26:04,690 se instancie en el 450 00:26:04,690 --> 00:26:06,329 y lo voy a meter a mano 451 00:26:06,329 --> 00:26:08,490 menos 40 y en i 452 00:26:08,490 --> 00:26:10,529 10, ¿vale? porque es donde 453 00:26:10,529 --> 00:26:11,349 yo quiero que comience 454 00:26:11,349 --> 00:26:14,630 si, y en z incluso 455 00:26:14,630 --> 00:26:16,390 vamos a ponerle un 15 456 00:26:16,390 --> 00:26:18,509 el punto que sea, da un poco 457 00:26:18,509 --> 00:26:20,490 igual, esto lo que nos va a 458 00:26:20,490 --> 00:26:22,210 permitir es que luego cuando nosotros 459 00:26:22,210 --> 00:26:24,089 digamos que este GameObject 460 00:26:24,089 --> 00:26:25,289 punto de referencia, ¿vale? 461 00:26:25,730 --> 00:26:28,109 y teniendo aquí abierta 462 00:26:28,109 --> 00:26:30,049 en el inspector donde tenemos el código 463 00:26:30,049 --> 00:26:31,269 y las variables preparadas 464 00:26:31,269 --> 00:26:37,670 arrastramos ese objeto, lo que va a hacer es coger el transform de este punto de referencia 465 00:26:37,670 --> 00:26:40,329 que nosotros hemos ubicado donde queremos que esté. 466 00:26:41,430 --> 00:26:47,869 Entonces, ahora mismo ya tenemos preparada una referencia que se coge con esta variable referencia 467 00:26:47,869 --> 00:26:55,349 y que nosotros usamos aquí como segundo parámetro del InstanceAid. 468 00:26:55,769 --> 00:26:59,329 Si yo ahora ejecuto el juego, va a hacer dos cosas, como bien dice aquí. 469 00:26:59,329 --> 00:27:01,869 crea una instancia en la posición del objeto de referencia 470 00:27:01,869 --> 00:27:04,269 en esta ubicación 471 00:27:04,269 --> 00:27:04,990 que acabamos de poner 472 00:27:04,990 --> 00:27:07,690 y como hijo suyo además, tiene una pequeña 473 00:27:07,690 --> 00:27:08,809 sutileza 474 00:27:08,809 --> 00:27:11,769 entonces, yo cuando ahora arranque el juego 475 00:27:11,769 --> 00:27:12,369 vais a ver 476 00:27:12,369 --> 00:27:15,369 que esa nave 477 00:27:15,369 --> 00:27:17,730 primero se ha colocado, si recordáis 478 00:27:17,730 --> 00:27:18,950 en este punto donde está 479 00:27:18,950 --> 00:27:21,849 punto de referencia y además se ha hecho su hijo 480 00:27:21,849 --> 00:27:23,289 ¿vale? se llama hola 481 00:27:23,289 --> 00:27:25,329 porque en el código hemos dicho 482 00:27:25,329 --> 00:27:26,970 que la instancia 483 00:27:26,970 --> 00:27:34,289 que el nombre de esa instancia sea hola vale entonces ver que no es lo mismo tener activo 484 00:27:34,289 --> 00:27:42,470 este esta instancia acción bien referenciado todo que simplemente generar el instante a secas vale 485 00:27:42,470 --> 00:27:50,410 esto me sirve para que poco a poco vayáis viendo que lo que hay dentro de estos paréntesis en un 486 00:27:50,410 --> 00:27:58,250 método vale pues influye un método o una función que son lo mismo ya os comenté el otro día que 487 00:27:58,250 --> 00:28:04,210 son digamos operaciones de acción de algo que ocurre en este caso vamos a instanciar en este 488 00:28:04,210 --> 00:28:10,410 caso esto es otro método que sirve para marcar qué va a ocurrir al empezar el juego o al iniciarse 489 00:28:10,410 --> 00:28:16,329 este script no recordad que era cuando el objeto se iniciaba y si veis cuando hay un método tiene 490 00:28:16,329 --> 00:28:18,950 el nombre de esa acción que va a hacer 491 00:28:18,950 --> 00:28:21,529 y siempre va a ir a continuación 492 00:28:21,529 --> 00:28:23,309 un paréntesis. 493 00:28:23,710 --> 00:28:25,630 A veces vacío, a veces lleno. 494 00:28:26,369 --> 00:28:27,289 Pero cuando vemos 495 00:28:27,289 --> 00:28:29,890 una palabra que está escrita en mayúsculas 496 00:28:29,890 --> 00:28:31,109 la primera letra 497 00:28:31,109 --> 00:28:33,410 y luego tiene paréntesis, eso significa 498 00:28:33,410 --> 00:28:35,390 que estamos usando lo que se llama un método función. 499 00:28:35,910 --> 00:28:37,609 Es decir, una acción que vamos a hacer. 500 00:28:38,289 --> 00:28:39,730 Que no es lo mismo que si yo pongo 501 00:28:39,730 --> 00:28:41,789 transform 502 00:28:41,789 --> 00:28:42,430 position 503 00:28:42,430 --> 00:28:44,549 igual a 504 00:28:44,549 --> 00:28:47,930 referencia, ¿vale? 505 00:28:49,029 --> 00:28:53,230 Que esto, básicamente, a ver, reference position, había que 506 00:28:53,230 --> 00:28:53,910 aprender, ¿vale? 507 00:28:57,150 --> 00:28:59,670 Esto ya os explicaré un poco más qué es, ¿vale? 508 00:28:59,710 --> 00:29:04,369 Pero al final no es lo mismo decir, oye, instanciate aquí y 509 00:29:04,369 --> 00:29:07,250 tal cosa, que en esta línea que no vemos ni un solo paréntesis. 510 00:29:07,390 --> 00:29:09,509 Esto significa que aquí no hay ningún método. 511 00:29:09,789 --> 00:29:12,369 Los paréntesis pueden indicar más cosas, pero en lo general son 512 00:29:12,369 --> 00:29:15,569 métodos o funciones 513 00:29:15,569 --> 00:29:17,349 ¿vale? ahora volveremos otra vez 514 00:29:17,349 --> 00:29:18,569 a los métodos 515 00:29:18,569 --> 00:29:21,170 entonces, ya simplemente por terminar 516 00:29:21,170 --> 00:29:23,190 esta 517 00:29:23,190 --> 00:29:25,309 explicación como de las sobrecargas 518 00:29:25,309 --> 00:29:27,549 de las sobrecargas que puede tener Instantiate 519 00:29:27,549 --> 00:29:29,369 ya a ver un segundo que esto 520 00:29:29,369 --> 00:29:30,769 este, vale 521 00:29:30,769 --> 00:29:32,349 tenemos una tercera 522 00:29:32,349 --> 00:29:35,329 forma de instanciar, vale, comento todo 523 00:29:35,329 --> 00:29:37,250 menos esta última, que yo sé 524 00:29:37,250 --> 00:29:38,829 que es, y borro 525 00:29:38,829 --> 00:29:40,829 todo lo relacionado con 526 00:29:40,829 --> 00:29:43,150 con los comentarios 527 00:29:43,150 --> 00:29:46,430 que es que crea una instancia en el punto de referencia 528 00:29:46,430 --> 00:29:47,869 pero sin rotación 529 00:29:47,869 --> 00:29:48,869 ¿vale? 530 00:29:49,869 --> 00:29:51,950 vale, aquí si os fijáis tenemos 531 00:29:51,950 --> 00:29:53,970 tres elementos y es igual que 532 00:29:53,970 --> 00:29:55,950 el anterior en el sentido de que 533 00:29:55,950 --> 00:29:57,529 primero, el primero de ellos es 534 00:29:57,529 --> 00:30:00,230 el prefab ¿vale? y voy a ir a la API un segundo 535 00:30:00,230 --> 00:30:01,170 de 536 00:30:01,170 --> 00:30:04,049 Instantiate, la tenía por aquí 537 00:30:04,049 --> 00:30:06,049 abierta si no me equivoco, aquí está 538 00:30:06,049 --> 00:30:08,109 ¿vale? esta es la primera que hemos usado 539 00:30:08,109 --> 00:30:09,890 esta es la segunda y ahora 540 00:30:09,890 --> 00:30:16,029 vamos a ir a esta tercera, ¿vale? Esta no la saltamos porque tampoco aporta mucho, pero 541 00:30:16,029 --> 00:30:24,150 aquí básicamente nos pide, ¿vale? Un objeto. Ahora, el segundo parámetro, aunque es parecido, 542 00:30:24,289 --> 00:30:29,509 es una posición, ¿vale? De tipo vector 3. Esto es verdad que todavía no lo hemos visto. 543 00:30:30,029 --> 00:30:35,150 Y luego la rotación. Esto ahora mismo es un poco enrevesado y por eso no voy a meterme 544 00:30:35,150 --> 00:30:40,849 mucho volvemos a ello si queréis más adelante pero esta sobrecarga al final lo que me está 545 00:30:40,849 --> 00:30:50,009 pidiendo son otro tipo de valores entonces si os fijáis incluso aquí cuando vemos esta referencia 546 00:30:50,009 --> 00:30:56,970 aquí no me está pidiendo un transform un transform completo como como si que hacía en la otra 547 00:30:56,970 --> 00:31:02,730 sobrecarga vale aquí me pedía el transform completo del objeto que iba a ser el padre aquí me pide 548 00:31:02,730 --> 00:31:10,049 solo la posición. Entonces quiero que vayáis también teniendo en la cabeza que ciertos 549 00:31:10,049 --> 00:31:15,289 parámetros tienen más parámetros dentro, como hemos dicho antes, que podemos ir abriendo 550 00:31:15,289 --> 00:31:20,049 con punto. Porque pensad una cosa, si me está pidiendo la posición de un elemento y yo 551 00:31:20,049 --> 00:31:26,710 tengo un transform en referencia, yo al final lo que estoy haciendo es, en este transform 552 00:31:26,710 --> 00:31:32,349 estoy cogiendo todo lo que hay en este componente, la posición, la rotación y la escala, que 553 00:31:32,349 --> 00:31:37,410 Al final son tres valores de la posición, tres valores de la rotación y tres valores de la escala, ¿verdad? 554 00:31:38,329 --> 00:31:45,390 Entonces, cuando me piden solo la posición, vais a ver que al final lo que estoy haciendo aquí es decirle, 555 00:31:45,390 --> 00:31:49,789 vale, de este transform que yo he llamado reference, solo voy a coger la posición. 556 00:31:50,569 --> 00:31:59,430 Porque si intento meter todo, esto me da fallo porque dice, vale, no sé que de todo lo que tiene dentro en la posición o en la rotación, 557 00:31:59,430 --> 00:32:15,849 Pues yo que sé, si yo pongo aquí rotation, veis que puedo meter la rotación. Me da fallo también por otras sutilezas, porque habría que ponerlo en ángulo Seuler, básicamente, que es una cosa que ya veremos en este tema. 558 00:32:15,849 --> 00:32:24,609 Pero veis que a medida que yo le voy dando la instrucción correcta, esto me puede dar que algo se puede ejecutar o no. 559 00:32:25,309 --> 00:32:29,309 Sutilezas. Que a veces hay que ir pensando, ¿qué valores estoy guardando en este transform? 560 00:32:29,710 --> 00:32:34,930 Pues estoy guardando los de posición, los de rotación, los de escala, y aquí solo me pide posición. 561 00:32:35,970 --> 00:32:40,710 Y luego aquí me pide la rotación, que esto sí que es verdad que es más avanzado, entonces no me voy a meter mucho. 562 00:32:40,710 --> 00:32:45,730 Pero aquí básicamente con esta instrucción estoy diciéndole, cógeme la rotación que tenga por defecto. 563 00:32:45,849 --> 00:33:07,630 el objeto. Entonces yo cuando use esta forma de este método de instanciación, vais a ver que a diferencia de antes, cuando yo lo genero, me lo genera la posición, pero ahora no es hijo de nada, no es hijo del punto de referencia como ocurría antes, que lo usaba como padre. 564 00:33:07,630 --> 00:33:26,109 E igualmente, como no estoy poniendo que esta instancia sea una caja a la que yo puedo cambiar el nombre, pues no se llama hola, se llama nave prefab clon, que es el nombre genérico que ha cogido del objeto. Cuando le hemos metido aquí el objeto, como se llama nave prefab, pues dice, vale, por de nave prefab he hecho un clon. 565 00:33:26,109 --> 00:33:44,849 Hasta aquí un poco lo relacionado con Instantiate. Cuando ya vayáis entendiendo cómo se usan más métodos, pues Instantiate lo iréis entendiendo mucho mejor. Voy a otro archivo que tengo aquí preparado para ir al tema 0, que es el que me interesa en esta tutoría, si no tenéis más dudas de la tarea del tema 1. 566 00:33:44,849 --> 00:33:56,130 Vale, vamos al tema cero. Voy a guardar, ¿vale? Recordad esta estrella, esta pequeña estrella y voy a ello. 567 00:33:56,690 --> 00:34:04,990 Vale, tengo aquí otro script que simplemente va a servir para practicar ahora. 568 00:34:05,109 --> 00:34:09,710 No va a tener, como hemos hecho ahora en InstanceAid, que se vea un resultado claro en el visor, 569 00:34:09,710 --> 00:34:28,889 Pero me sirve para que vayamos entendiendo mejor qué tipos de variables existen y usos y aplicaciones que se pueden hacer. De momento quizá un poco abstractas en el sentido de, pues solo estamos viendo sumas y restas, pero luego es que esas sumas y restas, como dije el otro día, puede ser como sube y baja el número de puntos que tiene un contador. 570 00:34:28,889 --> 00:34:46,449 Y se va a basar un poco en lo mismo. Recordad cómo se generaba un script. Lo voy a hacer en esta carpeta de script que tengo aquí preparada durante la tutoría. 571 00:34:46,449 --> 00:34:49,110 Pues yo hago este script. 572 00:34:49,789 --> 00:34:56,210 Recordad que en este Cesar script podemos generar un script que vamos a llamar durante. 573 00:34:56,869 --> 00:35:03,329 Recordad que el nombre que vayamos asignando aquí luego debe ser el mismo de la clase de dentro del script. 574 00:35:03,469 --> 00:35:08,150 Esto ya lo he dicho como en dos tutorías previas, por tanto entiendo que no habrá problema. 575 00:35:08,150 --> 00:35:27,070 Y además en el tema cero va poniendo buenas prácticas de cómo escribir los nombres de los scripts, los nombres de los métodos, de las variables, ¿vale? Y habla de una cosa que es el Pascal case y el Camel case, ¿vale? 576 00:35:27,070 --> 00:35:45,050 Cuando generamos una clase o lo que es lo mismo, generamos dentro de Unity un script, siempre, ¿vale? Lo digo porque luego nos va a ayudar a que todo sea más fácil de ir siguiendo, siempre deberíamos empezar a escribir el nombre del script con mayúscula, ¿vale? 577 00:35:45,050 --> 00:36:05,289 Y, a diferencia de nuestro lenguaje del día a día, los espacios no existen o no se usan correctamente cuando estamos escribiendo órdenes. Si os fijáis, todo lo que os he ido enseñando antes no había espacios. Había muy pocos. Hasta que no termine de escribir esto no quiero volver a enseñaros un script. 578 00:36:05,289 --> 00:36:24,550 Pero vais a ver que normalmente se escriben las palabras juntas. ¿Y cómo se distingue que una palabra, pues hay un espacio entre ellos? En vez de dar el típico espacio que hacemos con la barra espaciadora, lo que hacemos es empezar la siguiente palabra con mayúscula durante la tutoría. 579 00:36:24,550 --> 00:36:26,630 importante, lo que son 580 00:36:26,630 --> 00:36:28,369 tildes y eñes 581 00:36:28,369 --> 00:36:30,590 no las uséis nunca 582 00:36:30,590 --> 00:36:32,190 en nada relacionado con programación 583 00:36:32,190 --> 00:36:34,210 me explico, incluso 584 00:36:34,210 --> 00:36:36,429 aunque esto sea el nombre de un script, recordad 585 00:36:36,429 --> 00:36:38,590 que, vale, guardo y se genera 586 00:36:38,590 --> 00:36:40,570 que cuando yo genero este script, al final 587 00:36:40,570 --> 00:36:42,230 estoy realizando un código 588 00:36:42,230 --> 00:36:44,349 cuyo nombre de clase 589 00:36:44,349 --> 00:36:45,989 también está dentro del código 590 00:36:45,989 --> 00:36:48,550 si yo empiezo a poner tildes, esto va a 591 00:36:48,550 --> 00:36:50,289 empezar a dar ciertos problemas, vale 592 00:36:50,289 --> 00:36:52,369 y aunque ahora parezca a lo mejor 593 00:36:52,369 --> 00:36:54,530 que no lo da, tarde o temprano 594 00:36:54,530 --> 00:37:01,809 no lo va a dar. Igual sucede si ponemos una ñ o si ponemos un signo que no esté reconocido, 595 00:37:02,230 --> 00:37:08,050 que puede haber algunos. Entonces, atención, fijaos que siempre he escrito con la primera 596 00:37:08,050 --> 00:37:13,929 letra mayúscula en lo que se llama Pascal Case. Pascal fue un, si no recuerdo mal, un 597 00:37:13,929 --> 00:37:18,190 matemático y como es un nombre propio, por eso se llama así, con mayúscula, Pascal 598 00:37:18,190 --> 00:37:22,329 Case, que no es lo mismo si nos fijamos a lo que hemos estado... Bueno, y fijaos también 599 00:37:22,329 --> 00:37:25,630 que los métodos, los de los paréntesis, también van con mayúsculas. 600 00:37:25,730 --> 00:37:28,829 Es decir, instantiate existe con mayúsculas, ¿vale? 601 00:37:29,510 --> 00:37:32,929 Pero si yo me pongo a buscarlos con minúscula, no existe. 602 00:37:33,449 --> 00:37:36,710 Es decir, sí que intenta ayudarme diciéndome que esto está en mayúsculas, 603 00:37:36,809 --> 00:37:39,610 pero vais a ver que yo cuando lo ponga, me lo ponen en mayúsculas, ¿vale? 604 00:37:39,610 --> 00:37:45,949 Los métodos, esas palabras que sirven para indicar que se ejecute una acción, 605 00:37:46,110 --> 00:37:49,010 que van con estos paréntesis, siempre empiezan a escribirse con mayúsculas. 606 00:37:49,010 --> 00:37:54,170 Y lo mismo, si instantiate tuviera otra palabra, sería instantiate double, yo que sé. 607 00:37:54,809 --> 00:38:03,170 Pues no se separa, no se separa así, porque esto significa hacer dos instrucciones distintas o otro tipo de orden. 608 00:38:03,690 --> 00:38:07,730 Si es solo una orden llamada instantiate double, no hay espacio en el medio. 609 00:38:08,489 --> 00:38:15,429 Se van separando, digamos, marcando la separación de palabras con esta mayúscula, que va separando estas palabras. 610 00:38:15,429 --> 00:38:39,489 Del mismo modo, si pongo el script que hemos estado viendo antes, si os fijáis, ojo, las clases, y os recuerdo que siempre digo que esto es una clase, el nombre que le ponemos al script es una clase. 611 00:38:39,489 --> 00:39:03,469 Y estos son clases que os recuerdo que si le dais con la letra control os podéis meter, ¿vale? Esto es simplemente curiosidad. Y podéis ver todo el código que digamos ya alguien ha preparado para que nosotros podamos usarlo, ¿vale? Vuelvo aquí. Entonces, cuando generamos clases, fijaos cómo es la gramática de esta declaración del tipo de variable que es una clase, ¿no? Como hemos dicho antes. Una G mayúscula y para separar, mayúscula, ¿no? 612 00:39:03,469 --> 00:39:22,329 Y luego aquí hay un espacio que si yo no pusiera significa que es todo la misma palabra, ¿vale? Y daría fallo porque significa otra cosa. Cuidado, los espacios se usan, se deben usar cuando se deben usar. Y las variables, ¿vale? Por convención se escriben del mismo modo pero empezando en minúscula, ¿vale? 613 00:39:22,329 --> 00:39:40,289 Igual que instant set va con mayúscula, fijaos que my prefab, cuando lo hemos declarado aquí al principio, va con minúscula, ¿vale? Igual cuando queramos separar, veis que el my bien, porque es el nombre que le hemos dado a GameObject, pero este prefab aquí no pinta nada para que lo interprete como el nombre de la caja. 614 00:39:40,289 --> 00:39:46,730 Aunque sean dos palabras distintas, empieza con minúscula y para separar las palabras hay que poner una mayúscula aquí. 615 00:39:47,150 --> 00:39:53,309 Y os lo dije el otro día, y si no os habéis dado cuenta, fijaos si está preparado esto, que aunque no dejemos esos espacios, 616 00:39:53,750 --> 00:39:59,510 el propio Unity ya va viendo dónde meter los espacios. 617 00:39:59,510 --> 00:40:03,429 Aquí nos ha metido un espacio en donde en el nombre del script no lo había, recordad. 618 00:40:03,429 --> 00:40:08,690 o incluso en el MyPrefab, que es el nombre de la variable que hemos puesto, 619 00:40:09,170 --> 00:40:12,010 la MSI la ha puesto en mayúsculas y ha puesto este espacio. 620 00:40:12,510 --> 00:40:16,309 Fijaos que el propio software sabe interpretarlo. 621 00:40:16,769 --> 00:40:20,230 Entonces nosotros nos tenemos que hacer a la forma en la que tenemos que escribir el código. 622 00:40:20,889 --> 00:40:21,369 Importante. 623 00:40:22,030 --> 00:40:25,510 Es decir, recapitulando, las clases, barra, porque es lo mismo, scripts, 624 00:40:26,130 --> 00:40:27,889 siempre comenzando con mayúsculas, 625 00:40:29,110 --> 00:40:32,989 los métodos, a medida que vayamos sabiendo cómo llamarlos 626 00:40:32,989 --> 00:40:40,630 o cómo crearlos. También en mayúsculas, ¿vale? Y lo que son las variables en minúsculas, ¿vale? 627 00:40:41,269 --> 00:40:46,769 La diferencia de esto es que esto es PascalCase porque empieza en mayúscula y esto es lo que se llama CamelCase. 628 00:40:47,170 --> 00:40:51,769 Lo de camel porque aparece como la joroba de un camello, ¿vale? Esto también viene en los apuntes. 629 00:40:52,190 --> 00:40:57,909 Si os sirve para acordaros, pues CamelCase es cuando empieza en minúscula. PascalCase cuando es un nombre propio, ¿vale? 630 00:40:57,909 --> 00:41:00,329 vamos un poco con 631 00:41:00,329 --> 00:41:02,869 durante la tutoría 632 00:41:02,869 --> 00:41:04,550 que son digamos operaciones 633 00:41:04,550 --> 00:41:06,769 más básicas para ir viendo el tema 634 00:41:06,769 --> 00:41:08,849 cero, vale, sobre las variables 635 00:41:08,849 --> 00:41:10,070 el otro día estuvimos ya hablando 636 00:41:10,070 --> 00:41:12,570 bastante y de hecho aquí volvemos a hablar 637 00:41:12,570 --> 00:41:14,769 de hecho lo de camel case está aquí puesto 638 00:41:14,769 --> 00:41:16,130 que hay que darle un nombre 639 00:41:16,130 --> 00:41:18,710 a la variable, que cada uno puede tener 640 00:41:18,710 --> 00:41:20,750 un tipo de valor, que es lo que el otro 641 00:41:20,750 --> 00:41:22,110 día estuvimos hablando que eran los 642 00:41:22,110 --> 00:41:24,909 ints, los floats, los strings 643 00:41:24,909 --> 00:41:26,750 las cadenas, recordáis esto, ¿verdad? 644 00:41:26,750 --> 00:41:41,250 Esto ya lo hemos visto. Más o menos hasta aquí lo tenemos. Hemos visto incluso ya tipos de variables de tipo clase, como este GameObject o este Transform en el que guardábamos la referencia que cogíamos por el inspector en el SerializeField. 645 00:41:41,250 --> 00:41:58,190 ¿Sí? Por ejemplo, imaginaos que yo en el código, ¿vale? Aquí, justo dentro de la clase, recordad que las llaves delimitan qué hay dentro de cada uno de los apartados del código, ¿vale? 646 00:41:58,849 --> 00:42:08,849 Y las clases, ¿vale? Cuando empezamos una clase, vamos generando estas variables, como he dicho antes, que luego podrán ser usadas dentro de todo este bloque. 647 00:42:08,849 --> 00:42:20,630 Cuando vamos trabajando en un lenguaje como C-SARP, al final existe un proceso, una lógica, que es el encapsulamiento. 648 00:42:21,150 --> 00:42:28,789 El encapsulamiento significa que dentro de estas llaves, de cada uno de los bloques, de esta o de esta, que es otro bloque, o de este, que es otro bloque, 649 00:42:29,349 --> 00:42:36,070 podemos ir usando variables que queremos, nos puede interesar, que solo existan dentro de este bloque o que existan en este bloque 650 00:42:36,070 --> 00:42:39,030 y por defecto también existen los de dentro. 651 00:42:39,590 --> 00:42:44,650 El encapsulamiento sirve para que, digamos, partes del código se puedan comunicar entre sí o no. 652 00:42:45,150 --> 00:42:46,190 Esto también lo iremos viendo. 653 00:42:46,510 --> 00:42:49,969 Pero este concepto de encapsulamiento, si a alguien le interesa, existe. 654 00:42:51,150 --> 00:42:53,630 Y ya me sirve para explicar eso, que cuando tenemos una clase, 655 00:42:53,730 --> 00:42:57,070 que es donde vamos generando todas las instrucciones que hay dentro de este script, 656 00:42:57,349 --> 00:42:59,070 pues ya vamos, a lo mejor, haciendo variables. 657 00:42:59,190 --> 00:43:03,010 Si esto es el script del movimiento del jugador, 658 00:43:03,489 --> 00:43:05,469 imaginaos que fuera esta la función de este script, 659 00:43:05,469 --> 00:43:07,610 que luego meteremos como componente 660 00:43:07,610 --> 00:43:09,349 al GameObject del jugador 661 00:43:09,349 --> 00:43:12,010 pues ese jugador 662 00:43:12,010 --> 00:43:13,730 a lo mejor vamos a querer que 663 00:43:13,730 --> 00:43:14,849 tenga una vida inicial 664 00:43:14,849 --> 00:43:17,650 y quiero que esa vida inicial 665 00:43:17,650 --> 00:43:19,530 sea de 100 puntos, imaginaos 666 00:43:19,530 --> 00:43:21,570 vale, esto 667 00:43:21,570 --> 00:43:23,690 veis que yo por defecto si pongo 668 00:43:23,690 --> 00:43:25,730 un 100 no sirve para nada, me da 669 00:43:25,730 --> 00:43:27,650 falla, 100 que no sabe 670 00:43:27,650 --> 00:43:29,869 que es, incluso cuando empieza el juego 671 00:43:29,869 --> 00:43:31,650 yo puedo 672 00:43:31,650 --> 00:43:33,690 decir aquí 100 y punto 673 00:43:33,690 --> 00:43:35,570 y coma, ¿vale? Pero me va a decir 100 que 674 00:43:35,570 --> 00:43:37,449 ¿no? Tenéis que ir 675 00:43:37,449 --> 00:43:38,530 entendiendo que es que 676 00:43:38,530 --> 00:43:41,190 los números y los datos 677 00:43:41,190 --> 00:43:43,590 no existen en el 678 00:43:43,590 --> 00:43:45,090 código, no son operativos 679 00:43:45,090 --> 00:43:47,469 hasta que no se encierran en una variable 680 00:43:47,469 --> 00:43:48,710 que es lo que ya vimos el otro día 681 00:43:48,710 --> 00:43:51,289 Si queremos generar una variable 682 00:43:51,289 --> 00:43:53,389 de la vida del personaje que guarde 683 00:43:53,389 --> 00:43:54,070 un valor 100 684 00:43:54,070 --> 00:43:56,329 ¿qué habría que generar? 685 00:43:57,030 --> 00:43:59,349 ¿Cómo sería? Que esto el otro día 686 00:43:59,349 --> 00:44:00,150 un poco vimos 687 00:44:00,150 --> 00:44:04,179 Una variable, ¿no? 688 00:44:04,179 --> 00:44:06,639 vale, y como, dime un poco 689 00:44:06,639 --> 00:44:08,300 que, como la genero 690 00:44:08,300 --> 00:44:09,820 pues pones int 691 00:44:09,820 --> 00:44:12,320 vale, int, ahora la vemos 692 00:44:12,320 --> 00:44:13,579 espacio, vale 693 00:44:13,579 --> 00:44:15,599 vida, muy bien 694 00:44:15,599 --> 00:44:18,340 igualación, y punto y coma 695 00:44:18,340 --> 00:44:20,599 vale, mira, que me digas esto 696 00:44:20,599 --> 00:44:22,619 así, significa que ya has aprendido como se declara 697 00:44:22,619 --> 00:44:24,599 una variable, muy bien, ha aprendido 698 00:44:24,599 --> 00:44:25,519 así que vamos a ello 699 00:44:25,519 --> 00:44:28,460 ¿por qué ha sido int y no float? 700 00:44:28,760 --> 00:44:30,579 o string o otra cosa, porque es un 701 00:44:30,579 --> 00:44:32,559 número entero, vale, entonces 702 00:44:32,559 --> 00:44:48,659 Entonces también esto habría que ver el juego, pero la vida normalmente si tiene un valor como 100 que es el máximo acabo de decir y vamos a decir ya por defecto que la muerte es que llega al cero, pues normalmente en un contador de eso no va a ir tan fino como ir a decimales. 703 00:44:48,659 --> 00:45:01,900 Entonces, para no complicar al programa, pues no declaramos un float, que si no recordamos, para refrescar un float, era un parámetro, una variable, perdonad, con decimales, ¿vale? 704 00:45:01,900 --> 00:45:07,840 Imaginaos que quisiera guardar una con decimales, y en ese caso, pues podríamos decir cosas como 5 con 5, ¿no? 705 00:45:08,579 --> 00:45:15,400 ¿Vale? Esto lo recordamos del otro día, que la f sirve para indicar que este punto al final es el separador de los decimales. 706 00:45:15,400 --> 00:45:26,500 Y si no lo ponemos, o ponemos una coma, veis que ya empieza a dar errores, o si no ponemos el punto también, el F también empieza a dar errores, ¿vale? La sintaxis hay que aprenderla. 707 00:45:26,940 --> 00:45:40,360 Entonces, tenemos aquí una variable que es vida 100, y esto significa que en este script ya podremos ir, en cualquier momento, ir diciendo que la vida, cuando arranca el juego, la vida del personaje es 100, ¿vale? 708 00:45:40,360 --> 00:46:02,760 Y veis que yo tengo esta vida y es verdad que cuando declaramos una variable, que es darle una forma a la caja y un nombre, ¿vale? También la inicializamos o podemos decir, ¿vale? Que la vida, cuando arranque el juego dentro de esa caja al empezar, ¿vale? Tenga un 100, ¿no? Que esto lo vimos el otro día también. 709 00:46:02,760 --> 00:46:17,679 Ahora es verdad que hemos guardado este dato, pero como el dato está declarado aquí arriba, todos los cambios que vayamos haciendo se estarán guardando en la caja que está aquí arriba. 710 00:46:18,079 --> 00:46:26,820 ¿Eso qué significa? Que antes os he hablado de que existían bloques para ir declarando las variables, incluso usándolas. 711 00:46:26,820 --> 00:46:29,480 porque os he dicho también antes cuando hemos visto 712 00:46:29,480 --> 00:46:31,619 lo de la instancia que guardamos 713 00:46:31,619 --> 00:46:33,659 como variable, que se puede generar 714 00:46:33,659 --> 00:46:35,239 incluso una instancia dentro de 715 00:46:35,239 --> 00:46:36,860 un start, de un método 716 00:46:36,860 --> 00:46:39,559 de un momento de acción, yo puedo decir 717 00:46:39,559 --> 00:46:41,699 vale, esta variable vida se genera 718 00:46:41,699 --> 00:46:42,820 aquí con un valor de 100 719 00:46:42,820 --> 00:46:45,320 y luego decir vale 720 00:46:45,320 --> 00:46:47,280 y en el update que vida 721 00:46:47,280 --> 00:46:49,320 pase a llamarse, pase a valer 722 00:46:49,320 --> 00:46:51,119 500, porque 723 00:46:51,119 --> 00:46:53,460 cuando el primer frame queremos que sea 100 724 00:46:53,460 --> 00:46:55,539 pero ya los siguientes 500, veis que aquí 725 00:46:55,539 --> 00:47:05,320 vida da un fallo. Y esto es simple. ¿Alguien me sabría decir el por qué? A ver si eso más o menos, vamos, se explica en el tema cero, pero oye. 726 00:47:07,199 --> 00:47:17,219 Vale, os he dicho antes que existía este encapsulamiento que servía para ir, digamos, generando bloques. Fijaos que cuando yo genero la caja, barra la variable, 727 00:47:17,219 --> 00:47:28,659 le pongo el tipo de variable que es. Y yo he generado esta caja aquí, en el start. Y esto es un bloque. A diferencia de cuando lo generamos en la clase, que veis que comprende todo, aquí solo comprende esto. 728 00:47:29,199 --> 00:47:40,639 Por tanto, cuando llamamos a esta variable en otro punto que no es de su bloque, pues no existe. Aquí podríamos incluso generar otra variable llamada vida, que es una vida diferente a esta. 729 00:47:40,639 --> 00:48:01,460 Son dos variables distintas. Esto no es lo mismo que lo que habíamos hecho antes de decir, yo genero, declaro esta variable aquí arriba y ahora existe esta caja preparada en todo este ámbito y aquí es donde digo, vida 100 y aquí el 100 se está guardando aquí arriba. 730 00:48:01,460 --> 00:48:16,579 Es decir, este 100 se está guardando en todo este tránsito. Si yo aquí, por ejemplo, dijera, voy a enseñar por consola, esto ya lo vimos el otro día, que es el debug log, voy a querer que me vaya en cada fotograma enseñando lo que vale vida. 731 00:48:16,579 --> 00:48:37,920 Y veis que no me da ningún fallo. Me está enseñando vida, que está aquí creada la caja y la he cargado con un valor aquí. Es verdad que este ámbito donde he dicho que vale 100, y vais a ver que lo que me va a mostrar es 100, que este valor de 100 lo he generado aquí y este 100 ya está fuera del bloque. 732 00:48:37,920 --> 00:48:47,099 Pero es que la caja donde está guardando los valores sí está fuera y sí que está en la cápsula, digamos, en el bloque, que luego permite que se comunique con una inferior, que es el update. 733 00:48:47,480 --> 00:48:54,920 Si yo ahora ejecuto esta instrucción, lo primero es que probablemente desfalle o pase algo raro. 734 00:48:55,980 --> 00:49:01,539 Yo voy a la consola y no veo ni 100, ni 0, ni nada. ¿Por qué? A ver quién me lo sabe responder. 735 00:49:07,349 --> 00:49:09,210 Esto si habéis hecho la tarea 1 deberíais saberlo. 736 00:49:09,329 --> 00:49:11,289 No has asignado el código, ¿no? 737 00:49:11,289 --> 00:49:14,070 efectivamente, no hay ningún objeto 738 00:49:14,070 --> 00:49:16,030 dentro del juego, ni le hemos 739 00:49:16,030 --> 00:49:17,590 dicho de otra forma que se ejecute 740 00:49:17,590 --> 00:49:20,110 no hay ningún objeto en el juego que tenga este script 741 00:49:20,110 --> 00:49:22,329 por tanto el script no se está ejecutando 742 00:49:22,329 --> 00:49:24,210 es decir, no hay ningún momento start 743 00:49:24,210 --> 00:49:26,130 de nada en donde se ejecute 744 00:49:26,130 --> 00:49:27,530 esto, ¿no? entonces 745 00:49:27,530 --> 00:49:29,769 pues en punto 746 00:49:29,769 --> 00:49:32,130 referencia, me da igual porque solo van a ser números 747 00:49:32,130 --> 00:49:33,989 ¿vale? voy a asignar 748 00:49:33,989 --> 00:49:35,789 este durante la tutoría como 749 00:49:35,789 --> 00:49:37,710 componente, ¿vale? 750 00:49:38,769 --> 00:49:39,849 a ver, he guardado 751 00:49:39,849 --> 00:49:41,809 recordad que hay que guardar el script 752 00:49:41,809 --> 00:49:43,510 ahí está, y ahora lanzo el juego 753 00:49:43,510 --> 00:49:45,750 a ver, y ahora sí que 754 00:49:45,750 --> 00:49:47,789 cada fotograma está generando 755 00:49:47,789 --> 00:49:49,769 un 100, aquí se van sumando hasta que llega a 1000 756 00:49:49,769 --> 00:49:51,409 que ya no sea más, pero aquí 757 00:49:51,409 --> 00:49:53,530 se van 100, 100, 100, 100, vale 758 00:49:53,530 --> 00:49:55,670 entendéis que al final lo que estamos 759 00:49:55,670 --> 00:49:57,750 consiguiendo es cambiar las variables 760 00:49:57,750 --> 00:49:59,849 en distintos puntos del 761 00:49:59,849 --> 00:50:01,710 código, esto es importante entenderlo 762 00:50:01,710 --> 00:50:03,530 porque es lo que os he dicho antes 763 00:50:03,530 --> 00:50:06,070 si yo genero aquí la caja y aquí no existiera 764 00:50:06,070 --> 00:50:07,389 y guardo la caja aquí 765 00:50:07,389 --> 00:50:09,789 al final vida no existe para el update 766 00:50:09,789 --> 00:50:24,309 Porque está fuera del ámbito donde se ha generado esta caja. Esto también es por algo que se llama los ámbitos, que voy algunos pasos más adelante. Dentro del tema cero, aquí se habla de los ámbitos de las variables. 767 00:50:24,309 --> 00:50:48,750 Y habla un poquito de estos bloques y de estos ámbitos y un poco también de lo que os estoy comentando aquí, ¿vale? Igual este código es un poco más avanzado, por eso lo estoy simplificando, pero básicamente de lo que habla es que están las variables globales que se declaran al comienzo y están disponibles en todo el script, incluso dentro de las funciones, como sería el start y el update y aquí saludar, ¿vale? 768 00:50:48,750 --> 00:51:12,309 Y luego las locales, que se declaran dentro de una función, y por eso solo están disponibles dentro de ella, ¿vale? Por tanto, cuando más adelante hablemos, aquí he declarado una variable local, porque está en un bloque muy concreto, una función, y aquí las que se generan dentro de la clase son las variables que se llaman globales, ¿vale? 769 00:51:12,309 --> 00:51:38,030 Es verdad que el otro día ya os dejé caer también que cuando, y voy a quitar esta variable global y vuelve a dar este fallo, os dije que por defecto si una variable, y bueno vuelvo al de instanciar, si una variable le ponemos serialize fill es cuando conseguimos que podamos referenciar o capturar cosas desde el inspector, que es lo que hemos hecho con el prefab que hemos arrastrado. 770 00:51:38,030 --> 00:51:56,989 ¿Vale? Y también os dije otra forma de hacerlo que era poniendo delante la palabra public, pública. ¿Vale? Vais a ver que yo cuando ponga public aquí, a ver si quiere, a ver, public, uy va, espera, que algo he hecho y he abierto. 771 00:51:56,989 --> 00:52:22,780 A ver qué está pasando. Vale, cuando también tengamos... No, está bien. A ver, un segundo. Vale. Cuando tengamos variables públicas, aunque ahora me esté dando fallo, ya veremos que esto no sucede cuando lo hagamos en otros momentos. 772 00:52:22,780 --> 00:52:42,000 Voy a volver a declararla como variable global. Cuando es pública, significa que va a trascender su propia cápsula e incluso en otros scripts distintos, en otras clases que tengamos, podremos acceder a esta variable. 773 00:52:42,000 --> 00:53:00,559 Esto es más avanzado, pero me sirve para entender que por defecto, si no pone nada aquí, como hemos tenido hasta ahora, como me ha dicho Elisa, las variables son privadas. Es lo mismo poner esto de private que no poner nada, porque se entiende que una variable que no declaramos su ámbito es privada. 774 00:53:00,559 --> 00:53:10,599 Cuando es privada es cuando ocurre esto que os estoy diciendo de que se encierra en su cápsula y solo se puede referenciar a esta variable en su bloque. 775 00:53:11,280 --> 00:53:20,840 Cuando la ponemos en pública, además Unity tiene la, aparte de permitir que en otros scripts podamos acceder, 776 00:53:20,840 --> 00:53:33,980 Si yo ahora mismo, por ejemplo, pusiera... Bueno, es que es un poco avanzado esto, ya lo veremos. Si pusiera un acceso a esta clase, podría acceder a variable con decimales desde otro punto, desde otro código. 777 00:53:34,760 --> 00:53:47,159 Pero aparte tiene la capacidad de que cuando guardamos y volvemos a Unity, vais a ver que ahora existe esa variable igual que con el serializeField, que lo podemos aquí modificar. 778 00:53:47,159 --> 00:54:10,360 Venía por defecto el 5.5 que está declarado aquí, pero aquí lo podemos modificar, si os fijáis. Está preparada. Esto significa que no es lo mismo, para que veáis y leéis una cosa, que no es lo mismo poner serialize fill de tipo in, lo que sea, y variable serializada. 779 00:54:10,360 --> 00:54:12,539 también me sirve para que veáis 780 00:54:12,539 --> 00:54:14,099 como voy escribiendo las variables 781 00:54:14,099 --> 00:54:15,579 es algo muy importante 782 00:54:15,579 --> 00:54:17,679 y le asigno y le pongo un 783 00:54:17,679 --> 00:54:20,280 5.8f 784 00:54:20,280 --> 00:54:21,860 porque es un float 785 00:54:21,860 --> 00:54:24,320 ¿vale? vais a ver que yo cuando 786 00:54:24,320 --> 00:54:26,119 bueno, ¿por qué da fallo? 787 00:54:26,400 --> 00:54:28,440 porque he intentado guardar una variable float 788 00:54:28,440 --> 00:54:30,139 en un int ¿vale? entonces 789 00:54:30,139 --> 00:54:32,340 es importante los tipos 790 00:54:32,340 --> 00:54:34,000 de variables como los vamos gestionando 791 00:54:34,000 --> 00:54:36,079 cuando ahora vaya 792 00:54:36,079 --> 00:54:37,360 al 793 00:54:37,360 --> 00:54:40,079 al script tengo las dos variables 794 00:54:40,079 --> 00:55:01,079 Veis que aquí en apariencia hacen lo mismo, pero si aterrizamos aquí, vemos que una es pública, ¿vale? Y eso será accesible desde otras clases. De hecho, veis que la clase ya por defecto nos la declara pública también, para que podamos comunicarnos con esta clase en otros puntos del juego, con esta script en otros puntos del juego, en otros códigos. 795 00:55:01,079 --> 00:55:18,659 Pero esta, realmente, al no poner nada del ámbito, en realidad privada, no podremos acceder a esta variable desde otros puntos del script. De los scripts. De este sí, porque está dentro de su ámbito, pero no podremos ir a otros códigos que se llamen tal cual. 796 00:55:18,659 --> 00:55:33,739 De hecho, lo voy a hacer muy rápido, ¿vale? Aunque no entendamos tampoco. Tengo el script durante la tutoría y el script Instanced Prefab que he preparado antes. Imaginaos que yo quiero cambiar desde Instanced Prefab la variable con decimales. 797 00:55:33,739 --> 00:55:45,659 Pues lo primero que habrá que hacer, igual que hemos hecho aquí, es decir, durante la tutoría, y veis que ahora voy a generar una variable que se llama igual que otro script. 798 00:55:45,940 --> 00:55:52,119 Y es que recordad, al final las clases, como os he dicho aquí, se corresponden con el nombre de los componentes. 799 00:55:52,599 --> 00:56:00,619 Y cuando arrastramos un script como componente, al final, igual que existe transform, pues existe el componente durante la tutoría. 800 00:56:00,619 --> 00:56:14,300 Es una caja que podemos crear, ¿no? Entonces por eso existe aquí una caja y no da ningún fallo que se llama durante la tutoría y aquí lo puedo llamar como otro, en minúscula porque es una variable, ¿vale? Otro script. 801 00:56:14,300 --> 00:56:32,780 Y aquí está preparado. Y yo en el transform puedo decirle, oye, quiero que otro script acceder a sus propiedades. Y vais a ver que yo a medida que me vaya metiendo en sus propiedades con el punto, como estoy apelando aquí, hay una variable suya de durante la tutoría que se llama variable con decimales. 802 00:56:32,780 --> 00:56:47,340 Pues vais a ver que, cuando yo doy el punto, aquí existe una variable llamada variable con decimales. Y yo puedo decir, oye, pues esto quiero que valga 10. Y aquí está cambiando el valor, ¿vale? 803 00:56:47,340 --> 00:56:54,380 Si yo guardo esto desde otro código, estoy cambiando el valor de este 5,5, ¿vale? 804 00:56:54,380 --> 00:56:58,460 Y de hecho vais a ver cuando empiece el juego, ¿vale? 805 00:56:58,460 --> 00:57:05,480 Que variable con decimales, que por defecto debería ser 5,5, ahora como lo he cambiado, pues está cambiado. 806 00:57:06,260 --> 00:57:07,519 Ahora os explico otra cosa. 807 00:57:07,860 --> 00:57:12,760 Como lo he cambiado en el componente, pues se ha quedado con otro comportamiento. 808 00:57:12,760 --> 00:57:33,239 Pero yo cuando arranco el juego y pasa por ese start, vais a ver que vale. A ver, hazme caso. Claro, lo he cambiado aquí. Un segundito. Variable con decimales durante la tutoría. Instanced prefab. Y no se está ejecutando porque nuevamente este instanced prefab ahora no está en ninguno de los objetos. 809 00:57:33,239 --> 00:57:58,659 Ah, pues sí, sí que está. A ver, está en script retainer. Entonces, bueno, vamos a hacer otra cosa porque no lo está cambiando en el editor, pero sí que lo está cambiando realmente. Si aquí decimos en el update, borro esto, que en vez de enseñarme la vida me enseña lo que vale variable con decimales, ¿vale? Vais a ver que lo que pone cada fotograma es 10 y no el 5,5 que está ahí. 810 00:57:58,659 --> 00:58:38,500 Vale, entonces, vuelvo a ejecutar, me está enseñando 5.5, pero bueno, ¿esto qué está haciendo? A ver, un segundito, ¿eh? 5.5, bla, bla, bla, me enseña esto, bien, pues, vale, un segundo, solo por probar si es esto, hasta luego, Jesús. 811 00:58:38,500 --> 00:58:44,530 hay otro problema 812 00:58:44,530 --> 00:58:46,570 que es por lo que se usa 813 00:58:46,570 --> 00:58:48,230 el serialize fill en ocasiones 814 00:58:48,230 --> 00:58:50,170 que es que cuando tenemos aquí 815 00:58:50,170 --> 00:58:52,849 un script que vamos cambiando 816 00:58:52,849 --> 00:58:54,769 el valor, lo que vamos escribiendo 817 00:58:54,769 --> 00:58:55,929 aquí se sobre impone 818 00:58:55,929 --> 00:58:57,789 a todo lo que vayamos cambiando 819 00:58:57,789 --> 00:58:59,510 entonces, si aquí dejamos 820 00:58:59,510 --> 00:59:01,710 un valor ya puesto 821 00:59:01,710 --> 00:59:03,570 que es diferente al que venía por defecto 822 00:59:03,570 --> 00:59:04,969 se sobre escribe ese 823 00:59:04,969 --> 00:59:07,849 de hecho veis que yo aquí pongo 33.2 824 00:59:07,849 --> 00:59:09,650 y el que sale es 33.2 825 00:59:09,650 --> 00:59:19,070 En ese caso, habrá que ir operando de distinto modo, porque como está haciendo público, lo está variando aquí. 826 00:59:19,070 --> 00:59:36,239 Pero bueno, no debería... Perdona, porque esto en realidad lo estoy haciendo, pero por que veáis una cosa que no es ni siquiera esto. A ver, espera un segundo, que ya es por saber qué estoy haciendo yo. 827 00:59:36,239 --> 00:59:41,380 A ver, papá, iba a ponerte entre 3 con 2, claro, porque es el que está sobreescribiendo. 828 00:59:42,420 --> 00:59:46,739 Vale, este es el típico problema que pasa cuando tenemos un public, ¿vale? 829 00:59:47,139 --> 00:59:55,199 Y al final lo que estamos haciendo es cambiar el valor, igual que hemos hecho con los valores de estos puntos, ¿vale? 830 00:59:55,300 --> 01:00:04,500 Lo estamos cambiando en el editor, que es que básicamente en el editor estamos marcando qué tiene que hacer Unity y está sobreponiéndose a lo que hace el código. 831 01:00:04,500 --> 01:00:29,280 Lo que me importa de todo esto es simplemente que veáis, esto suele tener otro uso, pero lo que me interesa es que veáis que variable serializada como es private, si yo voy aquí durante la tutoría e intento acceder a variable con decimales, a variable serializada, otro script, no va a aparecer. 832 01:00:29,280 --> 01:00:41,280 Es decir, no va a aparecer variable serializada e incluso aunque yo me ponga a intentar escribir que valga 20, yo qué sé, me da fallo. ¿Por qué? Simplemente... 833 01:00:41,280 --> 01:00:46,139 Ah, y bueno, ya sé por qué no se está ejecutando, no estaba guardando, creo. Vale, lo escribo bien. 834 01:00:47,480 --> 01:00:54,800 Durante la tutoría, yo aunque tengo esta variable aquí serializada, no me la coge. ¿Por qué? Porque es privada. 835 01:00:54,800 --> 01:00:59,300 Hasta que yo no la haga pública, yo no voy a poder acceder. 836 01:00:59,519 --> 01:01:01,099 Veis que ahora ya ha dejado de tener error. 837 01:01:01,599 --> 01:01:05,219 Esto simplemente me sirve, que lo mismo, todavía no sabemos aplicarlo, 838 01:01:05,280 --> 01:01:09,260 me sirve para que veáis que las variables en ocasiones no se podrá acceder a ellas 839 01:01:09,260 --> 01:01:17,260 o no se podrá ver en el editor porque no tienen el ámbito, el acceso al ámbito correcto. 840 01:01:17,260 --> 01:01:40,179 Perfecto. Voy, me estoy enrevesando mucho quizá con ciertas cosas y vamos a volver a donde nos hemos quedado con el ISA. Pero lo que me importa es que ya sabemos que cada bloque, ¿veis? Irá dando fallo o no según el ámbito que tenga, en donde se declara esta caja. Que no es lo mismo declararla aquí al comienzo de la clase que dentro del start, por ejemplo. 841 01:01:40,179 --> 01:01:41,739 ¿vale? Luego 842 01:01:41,739 --> 01:01:43,519 tenemos aquí un int 843 01:01:43,519 --> 01:01:45,960 y hago aquí un float que es 844 01:01:45,960 --> 01:01:48,159 vida 845 01:01:48,159 --> 01:01:49,059 y 846 01:01:49,059 --> 01:01:52,000 power 847 01:01:52,000 --> 01:01:53,940 up, yo que sé 848 01:01:53,940 --> 01:01:56,360 que es como los puntos que va a dar a la vida 849 01:01:56,360 --> 01:01:58,099 el power up cuando lo recojamos, le voy a poner 850 01:01:58,099 --> 01:01:59,840 que 50, recupera media vida ¿no? 851 01:02:00,840 --> 01:02:02,199 Lo suyo sería que si hubiera 852 01:02:02,199 --> 01:02:04,280 más de 100, pues el power up no te permitirá 853 01:02:04,280 --> 01:02:06,139 tener más de 100, pero vamos a obviar eso de momento 854 01:02:06,139 --> 01:02:08,159 ¿vale? Lo que podemos 855 01:02:08,159 --> 01:02:13,079 hacer el otro día dijimos es que podemos hacer operaciones de vida más power up 856 01:02:13,079 --> 01:02:18,099 vale y que esto pues signifique algo no pero lo mismo hasta que no lo metemos 857 01:02:18,099 --> 01:02:23,480 dentro de un contexto de una caja vale no va a dar ningún resultado voy a poner 858 01:02:23,480 --> 01:02:28,099 vida actual y de actual que va a ser igual a la vida 859 01:02:28,099 --> 01:02:33,559 más power up vale y esto da un problema ahora mismo he generado dentro de estar 860 01:02:33,559 --> 01:02:36,420 Porque digamos que solo lo voy a ejecutar en el start 861 01:02:36,420 --> 01:02:40,960 Una variable llamada vida actual que deneda error 862 01:02:40,960 --> 01:02:43,179 ¿Y por qué pensáis que puede ser? 863 01:02:43,239 --> 01:02:45,679 A ver, así rápido, igual no caéis 864 01:02:45,679 --> 01:02:47,139 Pero ¿por qué podría ser que dé error? 865 01:02:47,440 --> 01:02:49,260 Porque realmente está bien configurado 866 01:02:49,260 --> 01:02:51,019 Hemos hecho las cajas, le hemos dado unos valores 867 01:02:51,019 --> 01:02:54,559 Y estamos guardando dentro de otra caja tipo int 868 01:02:54,559 --> 01:02:56,659 Estos dos valores 869 01:02:56,659 --> 01:02:58,920 Que el otro día ya vimos que se podía operar de este modo 870 01:02:58,920 --> 01:03:00,719 ¿Por qué pensáis que da fallo? 871 01:03:01,659 --> 01:03:02,539 A ver si lo podéis 872 01:03:02,539 --> 01:03:09,219 por los paréntesis 873 01:03:09,219 --> 01:03:11,900 ¿qué paréntesis? 874 01:03:12,400 --> 01:03:13,880 entre, o sea, tendrías que poner 875 01:03:13,880 --> 01:03:15,539 entre paréntesis vida más power up 876 01:03:15,539 --> 01:03:18,280 vale, lo hago, esto en matemática 877 01:03:18,280 --> 01:03:20,519 los paréntesis es para dar el orden de ejecución 878 01:03:20,519 --> 01:03:21,480 de las operaciones 879 01:03:21,480 --> 01:03:24,199 pero aquí sería, es indistinto 880 01:03:24,199 --> 01:03:25,420 hacer esto que esto, ¿vale? 881 01:03:25,820 --> 01:03:27,800 me digo que ese no es el problema, vaya, pero vaya 882 01:03:27,800 --> 01:03:30,199 que buen intento, me encanta que participéis, por favor 883 01:03:30,199 --> 01:03:32,219 vale, simplemente también para que 884 01:03:32,219 --> 01:03:33,659 lo veáis, los tipos de cajas 885 01:03:33,659 --> 01:03:36,239 cuando 886 01:03:36,239 --> 01:03:55,559 Cuando sumamos 100 más 50 da 150 y es un entero, ¿no? Pero es verdad que aunque sea un entero, esto lo hemos generado como un float, es decir, está esperando decimales. Y una vez tenemos decimales en una operación, como sucede en PowerApp, ya no podemos meterlo en un float, en un int, perdón, hay que meterlo en un float. 887 01:03:55,559 --> 01:04:15,780 ¿Por qué? Porque será susceptible a meter decimales. Porque pensad que si yo hubiera puesto esto, ¿vale? ¿Qué podría ser? Aquí el int jamás va a saber qué meter en esta caja porque se sale de su rango. ¿Vale? Vais a ver que si yo pongo float, el fallo deja de suceder. ¿Vale? Importante. Hay, digamos, tipos de variables más restrictivas que otras. 888 01:04:15,780 --> 01:04:25,800 Y esto, por lógica, en el caso de los números, por ejemplo, es el que más flexibilidad va a tener, pues es el que permite tanto tener números enteros como decimales. 889 01:04:26,079 --> 01:04:28,619 Pero veis que el int no lo permite. 890 01:04:29,260 --> 01:04:39,039 Hay formas de resolver esto, como hacer conversiones, pero bueno, esto sí que es más avanzado, lo usaremos más adelante, como es transformar un objeto en otro tipo de variable. 891 01:04:39,039 --> 01:04:52,059 Con esto, poniendo entre paréntesis el tipo de variable al que queremos convertir otra, hemos dicho que el 50.5, bueno, pues que como vamos a operar y nos interesa por lo que sea que sea un int, pues que lo convierta en un int redondeando. 892 01:04:52,719 --> 01:05:01,360 Siempre redondea la baja en este caso, pero estamos haciendo lo que se llama una conversión explícita. Estamos diciéndole cómo convertirlo. 893 01:05:01,360 --> 01:05:03,659 simplemente lo que me sirve es que veáis 894 01:05:03,659 --> 01:05:05,659 que a veces os pueden dar fallos que decís 895 01:05:05,659 --> 01:05:06,679 ¿de dónde me viene esto? 896 01:05:07,059 --> 01:05:08,579 y es simplemente por el tipo de caja 897 01:05:08,579 --> 01:05:10,019 porque es más restrictiva del otro 898 01:05:10,019 --> 01:05:13,480 facilidad para saber identificar eso 899 01:05:13,480 --> 01:05:15,760 si os ponéis encima de un fallo y lo dejáis quieto 900 01:05:15,760 --> 01:05:18,699 os va a poner en la segunda línea en este caso 901 01:05:18,699 --> 01:05:22,000 no se puede convertir implícitamente el tipo float en int 902 01:05:22,000 --> 01:05:24,059 ya existe conversión explícita 903 01:05:24,059 --> 01:05:25,280 compruebe si le falta una conversión 904 01:05:25,280 --> 01:05:26,860 básicamente aquí lo que está diciendo es 905 01:05:26,860 --> 01:05:28,420 que no se puede convertir 906 01:05:28,420 --> 01:05:30,320 si no lo hacemos de manera explícita nosotros 907 01:05:30,320 --> 01:05:33,739 Como he hecho antes con una orden que se puede ejecutar 908 01:05:33,739 --> 01:05:35,599 No se puede convertir un float en int 909 01:05:35,599 --> 01:05:37,280 Porque es que no cabe en esa caja 910 01:05:37,280 --> 01:05:37,500 ¿Vale? 911 01:05:38,340 --> 01:05:38,780 Importante 912 01:05:38,780 --> 01:05:40,460 Importante también 913 01:05:40,460 --> 01:05:41,139 Eso 914 01:05:41,139 --> 01:05:43,039 Que el tipo de variable puede determinar 915 01:05:43,039 --> 01:05:44,199 Qué puede haber dentro 916 01:05:44,199 --> 01:05:46,599 Luego, el otro día vimos también 917 01:05:46,599 --> 01:05:47,699 Que había otro tipo 918 01:05:47,699 --> 01:05:48,679 Entiendo que entre 919 01:05:48,679 --> 01:05:51,659 Con todos estos problemas que pueden ir surgiendo 920 01:05:51,659 --> 01:05:53,400 Lo que es un int y es un float, ¿no? 921 01:05:53,420 --> 01:05:54,579 Y cómo se escribe un float 922 01:05:54,579 --> 01:05:55,400 Para que no dé error 923 01:05:55,400 --> 01:05:57,440 Hasta aquí entiendo que bien, ¿no? 924 01:06:00,679 --> 01:06:02,079 Y bueno, así de fácil 925 01:06:02,079 --> 01:06:11,280 Si yo ahora quisiera ver este valor en la consola, como que lo está recibiendo, lo está ejecutando. 926 01:06:11,639 --> 01:06:17,960 Si veo vida actual y guardo, pues ahora al empezar el juego vamos a ver qué valor. 927 01:06:22,760 --> 01:06:24,000 150,5. 928 01:06:24,719 --> 01:06:25,280 Perfecto. 929 01:06:25,400 --> 01:06:25,519 Vale. 930 01:06:26,539 --> 01:06:28,360 A ver que algo hay por aquí. 931 01:06:29,079 --> 01:06:30,300 A ver, lo mismo. 932 01:06:31,199 --> 01:06:33,360 Pueden ser varias cosas, algo de lo que he tocado por ahí. 933 01:06:33,360 --> 01:06:36,360 variable con decimales 934 01:06:36,360 --> 01:06:39,780 variable con decimales, eso es que 935 01:06:39,780 --> 01:06:42,940 ah bueno, os acordáis que yo había puesto 936 01:06:42,940 --> 01:06:43,599 varias 937 01:06:43,599 --> 01:06:59,780 esto es básicamente, fijaos 938 01:06:59,780 --> 01:07:03,019 la que salía aquí, nuevamente por lo de los 939 01:07:03,019 --> 01:07:06,059 hacerlo público o no y operar mal, yo he borrado las variables 940 01:07:06,059 --> 01:07:07,719 que eran públicas para acceder desde aquí 941 01:07:07,719 --> 01:07:11,559 y ahora, dice durante la tutoría otro script 942 01:07:11,559 --> 01:07:13,960 pero ahora ya no existen estas variables, el error 943 01:07:13,960 --> 01:07:16,179 aunque ha sido que hemos borrado aquí cosas 944 01:07:16,179 --> 01:07:18,239 está afectando a estas variables que ahora 945 01:07:18,239 --> 01:07:19,460 no saben dónde existen, ¿vale? 946 01:07:19,820 --> 01:07:21,900 como no las queremos, lo voy a borrar, pero ved 947 01:07:21,900 --> 01:07:24,199 que cuando comunicamos scripts entre sí 948 01:07:24,199 --> 01:07:26,460 ¿vale? y guardo, pueden venir los errores 949 01:07:26,460 --> 01:07:28,239 porque estamos hablando entre unos y otros 950 01:07:28,239 --> 01:07:29,320 y esto sirve también 951 01:07:29,320 --> 01:07:32,099 para hablar del ámbito que estamos hablando 952 01:07:32,099 --> 01:07:34,260 de que salga del bloque, porque cuando empezamos a hacer 953 01:07:34,260 --> 01:07:36,179 códigos muy grandes, si 954 01:07:36,179 --> 01:07:38,219 empezamos a hacer todo público, que se puede 955 01:07:38,219 --> 01:07:40,280 hacer desde un lado a otro, que suele 956 01:07:40,280 --> 01:07:42,219 parecer muy conveniente, muy 957 01:07:42,219 --> 01:07:44,059 cómodo al principio, como estamos 958 01:07:44,059 --> 01:07:46,199 comunicando distintos scripts, surgen este tipo 959 01:07:46,199 --> 01:07:48,320 de problemas, que es que, vale, estamos cambiando aquí un script 960 01:07:48,320 --> 01:07:50,320 pero también estamos afectando a otros 961 01:07:50,320 --> 01:07:52,239 scripts. Entonces, si no tenemos un control 962 01:07:52,239 --> 01:07:53,920 claro de qué está afectando a qué 963 01:07:53,920 --> 01:07:56,219 o no lo restringimos con cosas privadas 964 01:07:56,219 --> 01:07:57,639 o lo redirigimos de otras formas 965 01:07:57,639 --> 01:08:00,059 que ya iremos viendo también, pues 966 01:08:00,059 --> 01:08:01,800 al final lo que sucede es que 967 01:08:01,800 --> 01:08:03,900 empiezan a surgir estos fallos y ahora es 968 01:08:03,900 --> 01:08:06,239 bastante pequeño el código, pero nos puede 969 01:08:06,239 --> 01:08:08,219 volver un poco la cabeza del revés. 970 01:08:08,699 --> 01:08:10,320 Bueno, iba a dar 15,5 971 01:08:10,320 --> 01:08:11,079 si no me equivoco, ¿no? 972 01:08:11,079 --> 01:08:13,539 150 con 5, perdón, pues ahí está 973 01:08:13,539 --> 01:08:15,360 150 con 5, con su decimal 974 01:08:15,360 --> 01:08:16,100 ¿vale? 975 01:08:18,359 --> 01:08:19,840 imaginaos que yo quiero hacer una variable 976 01:08:19,840 --> 01:08:21,420 que se va a llamar 977 01:08:21,420 --> 01:08:23,939 nombre, ¿vale? y esto es de repaso del otro día 978 01:08:23,939 --> 01:08:24,680 voy a pasar rápido 979 01:08:24,680 --> 01:08:27,300 y yo quiero que ponga mi nombre 980 01:08:27,300 --> 01:08:29,319 que ponga Daniel, ¿vale? 981 01:08:30,060 --> 01:08:31,579 he creado aquí una variable y como 982 01:08:31,579 --> 01:08:33,739 genero una variable que ponga Daniel 983 01:08:33,739 --> 01:08:34,560 ¿qué tendría que poner? 984 01:08:35,420 --> 01:08:37,520 ¿de qué tipo tiene que ser? una variable de texto 985 01:08:37,520 --> 01:08:46,779 esto lo vimos el otro día 986 01:08:46,779 --> 01:09:08,640 A ver, vuelvo a la unidad 0, que la tengo por aquí. Aquí, ¿vale? En las variables, pues ponemos las numéricas, int y float y luego lar de tipo string, ¿no? ¿Qué más pone? Podemos usar, su valor se introduce delimitado por comillas, ¿vale? Vale, sí, bueno, esto es otra cosa. 987 01:09:08,640 --> 01:09:11,060 va delimitado por comillas, ¿no? 988 01:09:11,140 --> 01:09:14,420 Si os acordáis, existe otro tipo de variable que se llama string, 989 01:09:15,159 --> 01:09:17,619 en donde puedo llamarlo nombre, ¿vale? 990 01:09:17,960 --> 01:09:21,640 Dado que así es como se va a llamar aquí abajo cuando la mentemos. 991 01:09:22,260 --> 01:09:23,779 Y esto va a significar que se llama, 992 01:09:24,359 --> 01:09:28,319 que yo quiero que aquí se guarde el valor Daniel, entre comillas, ¿vale? 993 01:09:28,699 --> 01:09:31,140 Ahora yo cuando lance el juego, esto lo vimos el otro día. 994 01:09:31,439 --> 01:09:33,079 No sé si tenemos dudas de esto. 995 01:09:34,340 --> 01:09:37,260 Es muy importante que entendamos bien cómo funcionan las variables. 996 01:09:37,260 --> 01:09:57,880 Aquí tenemos a Daniel, ¿vale? Que esto nuevamente yo puedo declarar aquí la variable y aquí, como está dentro del ámbito en donde se ha declarado la variable, pues aquí es donde puedo decirle, aquí quiero que se llame Daniel, ¿vale? Y ahora el resultado será el mismo, se verá Daniel, ¿vale? 997 01:09:57,880 --> 01:10:01,239 si queremos por ejemplo 998 01:10:01,239 --> 01:10:02,960 que en cierto momento del juego 999 01:10:02,960 --> 01:10:05,640 cuando vayamos metiendo datos en un menú 1000 01:10:05,640 --> 01:10:07,399 pues por ejemplo podamos meter 1001 01:10:07,399 --> 01:10:09,359 nuestra edad, la edad importante 1002 01:10:09,359 --> 01:10:11,520 pues siempre va a ser un entero 1003 01:10:11,520 --> 01:10:12,979 pues no ponemos decimales 1004 01:10:12,979 --> 01:10:15,180 25, este es el mismo ejemplo del otro día 1005 01:10:15,180 --> 01:10:17,600 lo doy rápido, recordad que 1006 01:10:17,600 --> 01:10:19,100 como hemos visto antes 1007 01:10:19,100 --> 01:10:20,739 dependiendo del tipo de variable 1008 01:10:20,739 --> 01:10:23,239 pues aquí se va a lanzar de una forma 1009 01:10:23,239 --> 01:10:24,699 u otra, eso que significa 1010 01:10:24,699 --> 01:10:26,020 que si yo pongo 1011 01:10:26,020 --> 01:10:31,220 nombre, más, recordad que esto es la concatenación 1012 01:10:31,220 --> 01:10:34,180 de textos, esto también viene aquí explicado 1013 01:10:34,180 --> 01:10:39,140 declarando variables, aquí se va hablando un poco 1014 01:10:39,140 --> 01:10:43,079 de lo que vamos hablando, ahora vamos a hablar de booleano, pero vais a ver 1015 01:10:43,079 --> 01:10:46,479 que en Unity, a ver si no me equivoco 1016 01:10:46,479 --> 01:10:48,659 viene por aquí 1017 01:10:48,659 --> 01:10:54,119 vale, empezar 1018 01:10:54,119 --> 01:10:58,979 bueno, todo lo que os estoy comentando está más o menos recogido por aquí 1019 01:10:58,979 --> 01:11:03,779 y aquí se habla de cómo se van 1020 01:11:03,779 --> 01:11:08,479 bueno, aquí lo de que se ignoran los espacios en blanco, las líneas, que también lo hemos visto 1021 01:11:08,479 --> 01:11:12,859 que cuando vamos sumando distintos, aquí están los operadores 1022 01:11:12,859 --> 01:11:16,579 de hecho seguro que está aquí, cuando vamos hilando strings con 1023 01:11:16,579 --> 01:11:20,560 números, lo que va haciendo es concatenar ese texto 1024 01:11:20,560 --> 01:11:39,520 Es decir, que no es una soma como tal, igual que el igual no es igual y sirve para asignar una variable, cuando hacemos nombre más edad, que aquí no da ningún fallo, al final lo que está haciendo es poner un string Daniel y luego un número, pero un número que en realidad no es un texto. 1025 01:11:39,520 --> 01:11:56,479 Lo que pasa es que hay que entender que cuando en una concatenación de elementos, con este más, cuando unimos varios elementos, unos de tipo texto, el resto también se convierte en uno de tipo texto, ¿vale? Pasan a ser todo de tipo texto, igual que hemos hecho antes con lo de convertir el floating in, ¿vale? 1026 01:11:56,479 --> 01:12:12,060 Daniel 25, no pone ningún espacio porque si recordáis también aquí dentro podemos empezar con las comillas y las comillas sirven siempre para ir escribiendo nosotros textos literales, no son cantidades que se suman ni que se van a operar, son textos literales. 1027 01:12:12,060 --> 01:12:41,239 A mí poner la edad de espacio, ¿vale? Porque los espacios también son literales. Concatenamos Daniel, ¿no? Y ahora concatenamos es de 25, en este caso, años. ¿Vale? Esto cuando hagamos una UI para ir metiendo nuestro nombre al jugar, etc., es vital que vayamos conociendo cómo se declaran. 1028 01:12:41,239 --> 01:13:11,140 Yo ahora lo que voy a ver es la edad de, aquí hemos dejado una especie de variable que yo podría ir cambiando el valor, incluso se puede ir cambiando durante el juego, o guardará el valor que introduzcamos nosotros en un menú, en plan, ponerá la nombre y ponemos Jesús, pues se guarda Jesús en esta caja y aquí sabe perfectamente que lo que esté guardado en esta caja, que en ese caso será Jesús, y la edad pues la metemos también y podrá ser 35, pues en ese momento cambiará para mostrar otro mensaje en otro punto del juego. 1029 01:13:11,239 --> 01:13:16,340 y la edad de Daniel es de 35 años 1030 01:13:16,340 --> 01:13:17,819 fijaos que aquí falta un espacio 1031 01:13:17,819 --> 01:13:19,399 básicamente porque 1032 01:13:19,399 --> 01:13:21,939 deberíamos 1033 01:13:21,939 --> 01:13:23,800 decir que literalmente aquí haya 1034 01:13:23,800 --> 01:13:25,600 un espacio para que lo respete 1035 01:13:25,600 --> 01:13:27,920 vale, hasta aquí, de hecho es el mismo 1036 01:13:27,920 --> 01:13:30,000 ejemplo de la semana pasada, hasta aquí más o menos 1037 01:13:30,000 --> 01:13:31,720 vais pillando cómo funcionan los strings 1038 01:13:31,720 --> 01:13:33,739 quedarse con que se 1039 01:13:33,739 --> 01:13:35,600 escriben con estos 1040 01:13:35,600 --> 01:13:39,920 ah, mira, alguien me lo había escrito 1041 01:13:39,920 --> 01:13:45,619 antes con estas comillas vale y es importante que lo interpreta como una 1042 01:13:45,619 --> 01:13:51,020 cadena de textos literal luego por otro lado existe un nuevo tipo 1043 01:13:51,020 --> 01:13:54,739 de caja que el otro día no hablamos que son las booleanas vale y una booleana 1044 01:13:54,739 --> 01:14:01,020 sólo puede guardar dos valores verdadero y falso vale una booleana cuando 1045 01:14:01,020 --> 01:14:05,239 generamos una variable pues será de tipo pool en este caso para que decir que es 1046 01:14:05,239 --> 01:14:12,020 una booleana, y aquí voy a poner semáforo encendido, ¿vale? 1047 01:14:12,119 --> 01:14:17,520 Y voy a decir por defecto que sea true o false, ¿vale? 1048 01:14:18,300 --> 01:14:23,020 Tiene dos variables, es decir, que estas booleanas, las booleanas, 1049 01:14:23,119 --> 01:14:27,300 se escribe así, pueden ser true o false, ¿vale? 1050 01:14:27,520 --> 01:14:30,640 Igualmente que siempre, cuando sabemos que algo es booleano, 1051 01:14:30,640 --> 01:14:33,579 si yo pongo un 5, no es la caja que corresponde y da fallo. 1052 01:14:33,579 --> 01:14:50,680 Si yo hasta ahora pongo José, ¿vale? Entre comillas, como haría un string, da fallo, porque en esta caja booleana, llamada semáforo encendido, solo puede estar, o lo que suele significar true, que está encendido, ¿vale? Que es verdadero esto que ocurre o es falso, ¿vale? 1053 01:14:50,680 --> 01:14:57,739 Lo mismo, esto en el tema, cuando hablamos de las variables, lo siguiente que pone aquí es booleanos. 1054 01:14:57,880 --> 01:15:05,819 Pueden adoptar solo dos valores predefinidos, muy útiles para crear lo que se llaman interruptores o para indicar que algo está ocurriendo o no. 1055 01:15:06,260 --> 01:15:12,880 Estas booleanas se usan mucho y por eso he puesto lo de semáforo, sirven para decir si algo está ocurriendo o no. 1056 01:15:12,880 --> 01:15:24,239 Y cuando hagamos condicional es decir, como he dicho antes, si la vida del personaje ya es 100, no se le puede cargar el power up, porque está superando la cifra máxima que damos. 1057 01:15:24,920 --> 01:15:35,380 A veces podemos decir, oye, mientras el personaje tenga, y voy a poner indicador, en vez de semáforo, indicador máximo, vida. 1058 01:15:35,380 --> 01:15:37,479 ¿vale? si yo empiezo 1059 01:15:37,479 --> 01:15:38,960 el juego con la vida llena 1060 01:15:38,960 --> 01:15:40,600 pues aquí estará true 1061 01:15:40,600 --> 01:15:43,520 y entonces mientras esto sea true, pues el power up 1062 01:15:43,520 --> 01:15:45,420 no se va a poder coger, porque no nos 1063 01:15:45,420 --> 01:15:47,439 interesa, ¿vale? ahora ya iremos 1064 01:15:47,439 --> 01:15:49,359 viendo con las, y esto está aquí 1065 01:15:49,359 --> 01:15:51,479 introducido, ¿vale? para que lo tengáis, con las estructuras 1066 01:15:51,479 --> 01:15:53,600 de control, con los ifs principalmente 1067 01:15:53,600 --> 01:15:55,300 pero hay más, ¿vale? iremos 1068 01:15:55,300 --> 01:15:57,380 diciendo, dando condiciones para que una cosa 1069 01:15:57,380 --> 01:15:59,439 se ocurra 1070 01:15:59,439 --> 01:16:01,100 o no ocurra, ¿no? entonces 1071 01:16:01,100 --> 01:16:03,539 en el momento que le demos un golpe 1072 01:16:03,539 --> 01:16:05,399 a este y baje a 25 1073 01:16:05,399 --> 01:16:07,020 cuando pongamos una condición 1074 01:16:07,020 --> 01:16:09,300 va a decir, vale, pues como baja de 25 1075 01:16:09,300 --> 01:16:10,680 y está comprobando que ya no es 100 1076 01:16:10,680 --> 01:16:13,239 esto va a decir, pues ya no es falso 1077 01:16:13,239 --> 01:16:14,939 no está con el indicador al máximo de vida 1078 01:16:14,939 --> 01:16:17,340 y entonces en ese caso sí que le permitirá 1079 01:16:17,340 --> 01:16:19,399 que cuando cojamos un power up de suma de la vida 1080 01:16:19,399 --> 01:16:21,180 para que pase de 25 1081 01:16:21,180 --> 01:16:23,220 hasta 75,5 1082 01:16:23,220 --> 01:16:24,680 ¿vale? son como 1083 01:16:24,680 --> 01:16:26,899 ahí pone pues eso, conmutadores 1084 01:16:26,899 --> 01:16:29,060 interruptores, semáforos, ¿vale? 1085 01:16:29,100 --> 01:16:31,220 pues un semáforo puede estar encendido o apagado 1086 01:16:31,220 --> 01:16:33,279 ¿vale? entonces 1087 01:16:33,279 --> 01:16:38,819 las booleanas van a ser sobre todo muy útiles en el momento de 1088 01:16:38,819 --> 01:16:44,140 pues de ir planteando ejecuciones e ir viendo si ciertas condiciones se van se 1089 01:16:44,140 --> 01:16:49,439 están cumpliendo no vale ya veremos ejemplos de esto también importante vale 1090 01:16:49,439 --> 01:16:53,880 en un de backlog si decimos que enseñe lo que guarda indicador máximo vida vais 1091 01:16:53,880 --> 01:16:58,640 a ver que lo que enseña vale en este caso es falso pues cuando ejecute el 1092 01:16:58,640 --> 01:17:07,130 juego, pues falso. Lo pone. No es una cadena de texto, es que no está cumpliendo la condición. 1093 01:17:07,489 --> 01:17:12,229 De hecho, internamente el código lo que está leyendo es que este valor vale o 0 o 1. Es verdad 1094 01:17:12,229 --> 01:17:17,970 que lo traduce en falso o verdadero, pero falso es 0 y verdadero es 1. De hecho, el otro día os dije 1095 01:17:17,970 --> 01:17:25,189 que si una caja, una variable, no se inicializaba, es decir, no se le daba un valor, por defecto valía 1096 01:17:25,189 --> 01:17:27,149 cero, o en el caso de los textos 1097 01:17:27,149 --> 01:17:28,949 vale nulo, no tiene contenido 1098 01:17:28,949 --> 01:17:31,289 entonces, si yo ahora 1099 01:17:31,289 --> 01:17:33,590 ejecuto este 1100 01:17:33,590 --> 01:17:35,090 debug log, como no tiene 1101 01:17:35,090 --> 01:17:36,689 nada en su interior 1102 01:17:36,689 --> 01:17:38,470 lo que va a mostrar es 1103 01:17:38,470 --> 01:17:43,710 falso, ¿vale? en realidad 1104 01:17:43,710 --> 01:17:45,630 es un cero, pero digamos 1105 01:17:45,630 --> 01:17:47,789 que la condición es falsa, que no es lo mismo 1106 01:17:47,789 --> 01:17:49,770 simplemente por ver que existe también 1107 01:17:49,770 --> 01:17:51,630 si ponemos true, ¿vale? pues lo que 1108 01:17:51,630 --> 01:17:57,189 va a enseñar es true 1109 01:17:57,189 --> 01:17:59,329 a ver, espera, ahí está 1110 01:17:59,329 --> 01:18:01,270 true, ¿vale? todos sabéis 1111 01:18:01,270 --> 01:18:05,689 leído aunque no lo hayáis empezado a hacer el enunciado de la tarea 0 y lo 1112 01:18:05,689 --> 01:18:12,920 que se quiere conseguir vale si no leerlo vale y lo entenderéis mejor lo 1113 01:18:12,920 --> 01:18:15,619 que voy a decir ahora pero como doy por supuesto que sí que lo habéis leído 1114 01:18:15,619 --> 01:18:20,180 porque es una de las cosas que os pedía para la tutoría de hoy vale 1115 01:18:20,180 --> 01:18:23,939 al final lo que queremos conseguir es y voy a abrir el código que lo tenéis 1116 01:18:23,939 --> 01:18:29,539 también y así lo podéis revisar más adelante pero lo pongo aquí vale era 1117 01:18:29,539 --> 01:18:36,579 conseguir que una nave espacial en la que van impactando meteoritos vaya quitándole escudo, 1118 01:18:36,739 --> 01:18:44,359 vida, por decirlo de otra forma, hasta que muere. Y este es el código, hay más formas de plantearlo, 1119 01:18:44,359 --> 01:18:49,359 pero es un código que resuelve el enunciado. Tenemos esta clase que se llama diagrama, 1120 01:18:49,979 --> 01:18:55,920 como se podría llamar juego nave, porque es descriptivo, y al final lo que estamos haciendo 1121 01:18:55,920 --> 01:18:57,800 es generar 1122 01:18:57,800 --> 01:18:59,420 un float con la energía del escudo 1123 01:18:59,420 --> 01:19:00,859 que empezará al máximo 1124 01:19:00,859 --> 01:19:03,399 ahora mismo vale 0 1125 01:19:03,399 --> 01:19:05,260 porque no lo hemos declarado solo 1126 01:19:05,260 --> 01:19:07,159 un número de vidas 1127 01:19:07,159 --> 01:19:09,680 porque el juego aparte de que muera la nave 1128 01:19:09,680 --> 01:19:11,560 va a haber varias vidas 1129 01:19:11,560 --> 01:19:13,420 pierdes una vez y te resta una vida 1130 01:19:13,420 --> 01:19:15,859 va a haber la vida de 100 a 0 1131 01:19:15,859 --> 01:19:17,800 por ejemplo y luego 3 vidas 1132 01:19:17,800 --> 01:19:19,699 luego la fuerza 1133 01:19:19,699 --> 01:19:21,380 del impacto que va a ir restando 2 vidas 1134 01:19:21,380 --> 01:19:23,380 cuando se choquen estos meteoritos 1135 01:19:23,380 --> 01:19:25,140 luego va a haber un booleano 1136 01:19:25,140 --> 01:19:27,899 un interruptor 1137 01:19:27,899 --> 01:19:29,680 como estábamos diciendo, que nos va a decir 1138 01:19:29,680 --> 01:19:31,819 si estamos vivos o no, que este interruptor 1139 01:19:31,819 --> 01:19:33,100 básicamente lo que va a hacer es 1140 01:19:33,100 --> 01:19:35,319 que mientras estamos vivos va a ser true 1141 01:19:35,319 --> 01:19:37,739 porque sí, estamos vivos, pero cuando 1142 01:19:37,739 --> 01:19:39,399 nos muramos va a decir 1143 01:19:39,399 --> 01:19:41,439 que es falso, que estamos muertos 1144 01:19:41,439 --> 01:19:43,739 básicamente, si lo traducimos a nuestro lenguaje 1145 01:19:43,739 --> 01:19:45,680 y en el momento en el que este interruptor 1146 01:19:45,680 --> 01:19:47,720 pasa a ser falso, es decir, que estamos muertos 1147 01:19:47,720 --> 01:19:49,680 pues el juego va a saber decir 1148 01:19:49,680 --> 01:19:51,180 va a entender ya el código que 1149 01:19:51,180 --> 01:19:53,720 pues oye, que el juego se ha acabado porque no estamos 1150 01:19:53,720 --> 01:19:55,720 vivos. Hemos perdido toda la energía y 1151 01:19:55,720 --> 01:19:57,739 también todas las vidas. Y luego aquí 1152 01:19:57,739 --> 01:19:59,100 hay un mensaje 1153 01:19:59,100 --> 01:20:01,479 que vamos a ir dando como 1154 01:20:01,479 --> 01:20:03,020 avisos en pantalla. 1155 01:20:03,920 --> 01:20:05,680 Si os fijáis, ya para ir 1156 01:20:05,680 --> 01:20:07,800 viendo una especie de ejecución 1157 01:20:07,800 --> 01:20:09,640 o de puesta en 1158 01:20:09,640 --> 01:20:11,579 algo menos 1159 01:20:11,579 --> 01:20:13,640 abstracto, ¿qué es esto? 1160 01:20:13,779 --> 01:20:15,659 Cuando iniciamos el juego, cuando iniciamos 1161 01:20:15,659 --> 01:20:17,739 el script, lo que vamos a hacer es, en ese momento 1162 01:20:17,739 --> 01:20:19,279 arranca el juego, arranca este script 1163 01:20:19,279 --> 01:20:21,819 y vamos a llenar las cajas que nos 1164 01:20:21,819 --> 01:20:23,619 interesan en este momento para darle un sentido 1165 01:20:23,619 --> 01:20:25,579 también al juego, hasta este momento 1166 01:20:25,579 --> 01:20:27,939 solo hemos generado espacios que rellenar 1167 01:20:27,939 --> 01:20:29,560 pero al empezar el juego nos decimos 1168 01:20:29,560 --> 01:20:31,220 oye, quiero que el escudo 1169 01:20:31,220 --> 01:20:33,539 de la nave sea de 100 1170 01:20:33,539 --> 01:20:35,680 ¿vale? y como se va 1171 01:20:35,680 --> 01:20:36,739 a jugar con decimales 1172 01:20:36,739 --> 01:20:39,340 ¿vale? pues lo hemos 1173 01:20:39,340 --> 01:20:41,000 planteado como un float ¿vale? 1174 01:20:41,380 --> 01:20:43,340 esto hay que tenerlo en cuenta como hemos visto después para 1175 01:20:43,340 --> 01:20:45,279 pues para ir 1176 01:20:45,279 --> 01:20:47,659 teniendo en cuenta problemas que puedan 1177 01:20:47,659 --> 01:20:49,840 surgir ¿vale? que suelen ser fáciles de corregir 1178 01:20:49,840 --> 01:20:51,739 pero oye, que nos pueden 1179 01:20:51,739 --> 01:20:53,460 traer de cabeza, pues tiende 1180 01:20:53,460 --> 01:20:55,720 vida, ¿vale? y aunque no ponga decimales 1181 01:20:55,720 --> 01:20:57,659 como es un decimal, es decir, es un float 1182 01:20:57,659 --> 01:20:59,640 mejor dicho, ya pongo la F, ¿vale? 1183 01:20:59,939 --> 01:21:00,720 si no la pongo 1184 01:21:00,720 --> 01:21:03,600 puede no dar problema, pero veis que 1185 01:21:03,600 --> 01:21:05,279 ser correcto tampoco 1186 01:21:05,279 --> 01:21:07,000 conlleva ningún 1187 01:21:07,000 --> 01:21:09,520 castigo, ¿vale? luego 1188 01:21:09,520 --> 01:21:11,539 al comenzar el juego, ojo, estamos 1189 01:21:11,539 --> 01:21:13,239 arrancando el juego y evidentemente 1190 01:21:13,239 --> 01:21:15,479 pues arrancamos vivos, si empezáramos muertos 1191 01:21:15,479 --> 01:21:17,359 pues ya sería mal asunto, ¿vale? 1192 01:21:17,800 --> 01:21:19,619 luego, las vidas 1193 01:21:19,619 --> 01:21:21,600 con las que arrancamos, ¿vale? igual que está la energía 1194 01:21:21,600 --> 01:21:27,420 pues tendremos tres vidas vale y luego veis que hay en el estar al arrancar una operación aquí 1195 01:21:27,420 --> 01:21:34,500 que es por como os he dicho antes como bueno en realidad lo pone aquí pero veis que se escribe 1196 01:21:34,500 --> 01:21:38,699 igual que el instante de antes es verdad que no hay nada dentro del paréntesis pero esto es un 1197 01:21:38,699 --> 01:21:46,359 método o una función vale los métodos y funciones vale al arrancar el juego pone quiero que haya un 1198 01:21:46,359 --> 01:21:51,739 impacto e impacto si yo voy a cualquier otro script vale si yo voy a leer 1199 01:21:51,739 --> 01:21:54,539 durante la tutoría que estaba haciendo ahora y en start yo pongo esto de 1200 01:21:54,539 --> 01:21:59,920 impacto veis que no existe no sale vale no 1201 01:21:59,920 --> 01:22:03,560 existe no es como instancia instancia siempre 1202 01:22:03,560 --> 01:22:07,060 existe yo pongo instancia y ahí está esperando 1203 01:22:07,060 --> 01:22:11,140 hay que poner su paréntesis y ahora que está y sí que obliga a que haya aquí 1204 01:22:11,140 --> 01:22:14,039 unos parámetros 1205 01:22:14,039 --> 01:22:16,119 como yo que sé 1206 01:22:16,119 --> 01:22:18,260 vamos a poner aquí, aunque dé fallo 1207 01:22:18,260 --> 01:22:20,220 pues vamos a poner, bueno no tenemos ninguno de tipo 1208 01:22:20,220 --> 01:22:22,159 objeto, no puedo poner ningún 1209 01:22:22,159 --> 01:22:23,699 parámetro aquí 1210 01:22:23,699 --> 01:22:26,159 porque va a dar fallo, porque nuevamente lo que nos 1211 01:22:26,159 --> 01:22:28,560 está pidiendo es un GameObject 1212 01:22:28,560 --> 01:22:29,899 lo que hemos visto antes 1213 01:22:29,899 --> 01:22:32,199 que la primera sobrecarga, su tipo 1214 01:22:32,199 --> 01:22:33,279 tiene que ser objeto 1215 01:22:33,279 --> 01:22:36,119 pero no sale el impacto, que os estaba diciendo 1216 01:22:36,119 --> 01:22:38,180 antes, ni bien ni mal 1217 01:22:38,180 --> 01:22:40,579 no puedo hacer nada, porque los métodos 1218 01:22:40,579 --> 01:22:55,279 Lo que vamos a empezar a hacer también es que los creamos nosotros, es decir, bajo un nombre que nosotros ponemos, ¿vale? Podremos ir, y veis que está aquí, meter nosotros nuestras operaciones dentro de un bloque, en este caso, fijaos que es largo. 1219 01:22:55,279 --> 01:23:06,779 Y este bloque lo que va a hacer, que llega hasta aquí, el bloque impacto, hasta aquí, todo esto es impacto, cuando yo ponga esta palabra, ¿vale? Se va a ejecutar lo que hay aquí dentro. 1220 01:23:07,380 --> 01:23:17,479 Entonces, vais a ver, y esto también es importante, que por primera vez, cuando llegamos a un punto aquí, ¿vale? Saltamos de aquí a aquí en la ejecución. 1221 01:23:17,479 --> 01:23:27,260 Luego irá el update, que también tiene su impacto. Pero primero estamos llamando a este impacto, salta aquí y se va a reproducir lo que hay aquí dentro. 1222 01:23:28,619 --> 01:23:39,359 ¿Por qué instantiate sí existe? Y aquí existe, por ejemplo, si pongo el método instantiate, como os he dicho antes, impacto no existía en el otro lado. 1223 01:23:39,359 --> 01:23:54,439 Porque como os he dicho, en varias ocasiones, cuando empezamos cualquier script, tiene unas librerías y también hereda ciertos comportamientos, que es esto del MonoBehaviour, que os suene, que ya nos da operaciones prehechas. 1224 01:23:54,439 --> 01:24:17,199 Es decir, para que leemos más, cuando, a ver, un segundico, a ver si lo pone claramente aquí. Bueno, existe la clase objeto, ¿vale? Que cuando yo me meto en Instantiate, vais a ver, a ver, me meto en esta, con el control volvemos a meternos, ¿vale? 1225 01:24:17,199 --> 01:24:22,979 pone objeto instancia es una de las que ha cargado ya en la librería vale hay otra clase en otro 1226 01:24:22,979 --> 01:24:28,319 sitio que está guardada en la librería unity engine que cuando empezamos cualquier juego 1227 01:24:28,319 --> 01:24:35,180 está aquí si yo por ejemplo intentará poner instancia como siempre ocurre y cualquier cosa 1228 01:24:35,180 --> 01:24:40,260 bueno en esta como no como no lo voy a rellenar no me va a dar fallo siempre pero fijaos que 1229 01:24:40,260 --> 01:24:48,720 Este instantiate funciona sin problema hasta que yo me cargo el, o lo comento mejor aún, comento el Unity Engine. 1230 01:24:48,859 --> 01:24:54,739 Y veis que instantiate junto a otras muchas cosas, fijaos en las clases, dejan de funcionar, ¿vale? 1231 01:24:55,300 --> 01:25:00,220 Entonces, tenéis que ir entendiendo que existen las clases y los métodos que ya existen 1232 01:25:00,220 --> 01:25:04,199 y luego los métodos que nosotros podemos ir haciendo para ir recopilando distintas acciones 1233 01:25:04,199 --> 01:25:07,939 y que cada vez que pongamos esta frase, pues, oye, haga todo esto. 1234 01:25:07,939 --> 01:25:10,199 si yo quiero poner impacto varias veces 1235 01:25:10,199 --> 01:25:12,180 en mi código, pues no tengo que escribir 1236 01:25:12,180 --> 01:25:13,939 todas estas líneas, ya está recogido 1237 01:25:13,939 --> 01:25:15,079 dentro de su propio bloque 1238 01:25:15,079 --> 01:25:17,579 ¿hasta aquí qué tal? 1239 01:25:20,130 --> 01:25:20,449 bueno 1240 01:25:20,449 --> 01:25:24,699 te has quedado en lo de impacto, hasta aquí bien 1241 01:25:24,699 --> 01:25:26,920 sí, a ver, es que yo he estado 1242 01:25:26,920 --> 01:25:29,579 intentando hacerlo sin mirar esto que habías puesto 1243 01:25:29,579 --> 01:25:31,560 conseguí no dar ningún error 1244 01:25:31,560 --> 01:25:33,000 hasta lo de que me quedo sin escudo 1245 01:25:33,000 --> 01:25:34,340 que ya ahí colapsé 1246 01:25:34,340 --> 01:25:37,300 pero cuando meto el impacto no me lo 1247 01:25:37,300 --> 01:25:39,100 reconoce, me dice que no puedo hacer un boite 1248 01:25:39,100 --> 01:25:41,239 impacto, ya he entrado 1249 01:25:41,239 --> 01:25:43,260 ahí, me doy la tutoría 1250 01:25:43,260 --> 01:25:45,000 tranquilamente y supongo que 1251 01:25:45,000 --> 01:25:46,479 lo sacareis y no te pregunto 1252 01:25:46,479 --> 01:25:49,239 realmente todavía no hemos explicado 1253 01:25:49,239 --> 01:25:51,039 cómo se crea esto, es decir 1254 01:25:51,039 --> 01:25:53,199 todavía no he explicado cómo se crea esto 1255 01:25:53,199 --> 01:25:53,920 es decir, que estoy 1256 01:25:53,920 --> 01:25:56,899 más avanzada de lo que hemos explicado 1257 01:25:56,899 --> 01:25:59,039 entonces, ¿vale? así que bien 1258 01:25:59,039 --> 01:26:01,159 te quiero decir, solamente estoy 1259 01:26:01,159 --> 01:26:03,000 como dejando caer muchas veces que 1260 01:26:03,000 --> 01:26:04,920 cuando veamos una 1261 01:26:04,920 --> 01:26:06,880 orden de este tipo con mayúscula 1262 01:26:06,880 --> 01:26:08,800 y paréntesis, estamos llamando 1263 01:26:08,800 --> 01:26:10,840 un método y que hay métodos que ya vienen 1264 01:26:10,840 --> 01:26:12,939 prehechos, ¿vale? Por estas librerías 1265 01:26:12,939 --> 01:26:14,539 y otros que no, que los hacemos nosotros. 1266 01:26:15,279 --> 01:26:16,800 Ahora tenemos que aprender a hacerlos nosotros. 1267 01:26:17,399 --> 01:26:19,319 ¿Vale? Pero hasta... 1268 01:26:19,319 --> 01:26:20,479 Aunque... 1269 01:26:20,479 --> 01:26:23,060 Aquí llegamos y lo que pone aquí, invocamos a la función 1270 01:26:23,060 --> 01:26:24,319 que realiza el impacto. Es decir, 1271 01:26:24,880 --> 01:26:25,979 que al empezar el juego, 1272 01:26:26,699 --> 01:26:28,699 estamos metiendo dentro de esta palabra impacto 1273 01:26:28,699 --> 01:26:30,500 pues que haya un impacto, 1274 01:26:30,760 --> 01:26:32,619 que es lo que vamos a hacer aquí. ¿Vale? 1275 01:26:33,220 --> 01:26:34,800 Vale. ¿Da igual ponerlo 1276 01:26:34,800 --> 01:26:36,479 antes del Void Start o después? 1277 01:26:37,239 --> 01:26:38,720 ¿El impacto te refieres a esto? 1278 01:26:38,800 --> 01:26:42,079 Todo. O sea, las declaraciones de las variables. 1279 01:26:42,979 --> 01:26:49,600 Vale. Las variables, cuando son globales, ¿no? Como hemos dicho antes, pueden ir aquí o pueden ir al final. 1280 01:26:50,279 --> 01:26:55,939 Y vais a ver que cuando las pongo al final, ¿vale? Dentro de la clase, pero al final todo funciona. 1281 01:26:56,600 --> 01:26:58,180 ¿Por qué? Porque está dentro de la clase. 1282 01:26:59,300 --> 01:27:04,800 Entonces, todo lo que se va metiendo en bloques inferiores, pues puede acceder a estas clases. 1283 01:27:04,800 --> 01:27:07,699 pero sí que es verdad que es mucho más intuitivo 1284 01:27:07,699 --> 01:27:09,479 y es la convención aparte 1285 01:27:09,479 --> 01:27:11,140 que esto vive mucho de convenciones 1286 01:27:11,140 --> 01:27:13,439 de que todas las, incluso aunque luego 1287 01:27:13,439 --> 01:27:15,520 sigamos picando código aquí abajo y queramos 1288 01:27:15,520 --> 01:27:17,579 crear una nueva variable, si queremos 1289 01:27:17,579 --> 01:27:19,739 que sea global de toda la clase, subimos 1290 01:27:19,739 --> 01:27:21,600 y la ponemos aquí, porque así 1291 01:27:21,600 --> 01:27:22,939 de un vistazo rápido 1292 01:27:22,939 --> 01:27:25,539 tenemos todas las que son globales ya 1293 01:27:25,539 --> 01:27:27,399 englobadas, se puede mientras 1294 01:27:27,399 --> 01:27:29,300 esté dentro del bloque 1295 01:27:29,300 --> 01:27:31,140 correspondiente a donde queremos que funcione 1296 01:27:31,140 --> 01:27:33,460 que por eso he explicado lo del encapsulamiento 1297 01:27:33,460 --> 01:27:36,119 funcionaría, pero la convención dice que 1298 01:27:36,119 --> 01:27:38,159 lo hagamos aquí, ¿vale? De hecho hay 1299 01:27:38,159 --> 01:27:40,220 más convenciones, ¿vale? Porque ahora mismo 1300 01:27:40,220 --> 01:27:42,279 todas son private y a 1301 01:27:42,279 --> 01:27:43,819 veces iréis incluso viendo 1302 01:27:43,819 --> 01:27:45,840 o que 1303 01:27:45,840 --> 01:27:48,279 hay gente que dirá, siempre que creo una variable 1304 01:27:48,279 --> 01:27:50,119 private empiezo con una barra baja 1305 01:27:50,119 --> 01:27:52,180 para que así al ir cambiándolo 1306 01:27:52,180 --> 01:27:54,220 en el código, ¿vale? Saber 1307 01:27:54,220 --> 01:27:56,100 que es una variable privada, que no 1308 01:27:56,100 --> 01:27:58,159 la voy a declarar mediante el inspector, sino 1309 01:27:58,159 --> 01:28:00,140 que la voy a ir declarando yo siempre a mano 1310 01:28:00,140 --> 01:28:02,000 en el código, porque no se puede ir al 1311 01:28:02,000 --> 01:28:03,760 editorio Unity y cambiarlo si es privada, ¿no? 1312 01:28:04,520 --> 01:28:05,939 Luego hay gente, lo digo 1313 01:28:05,939 --> 01:28:07,899 por si encontráis, que siempre que haga 1314 01:28:07,899 --> 01:28:09,659 una variable global, le pone 1315 01:28:09,659 --> 01:28:12,020 m barra baja, vamos, habría 1316 01:28:12,020 --> 01:28:13,939 que ponerlo en todas, y todas las que va generando 1317 01:28:13,939 --> 01:28:16,000 dentro de métodos 1318 01:28:16,000 --> 01:28:17,859 o de niveles inferiores, como este int, por ejemplo, 1319 01:28:18,260 --> 01:28:19,500 pues va sin la barra baja. 1320 01:28:20,039 --> 01:28:22,199 Y esto sirve para saber cuáles son variables globales 1321 01:28:22,199 --> 01:28:23,920 y distinguirlas de las que no. Pero esto 1322 01:28:23,920 --> 01:28:26,060 ya son convenciones que van más adelante, 1323 01:28:26,199 --> 01:28:27,939 es decir, que vamos primero a lo básico. 1324 01:28:28,359 --> 01:28:29,619 Vale. Gracias. 1325 01:28:30,140 --> 01:28:31,859 Nada, perdona, que sé 1326 01:28:31,859 --> 01:28:34,520 Que me preguntas una cosa y te correspondo con tres. 1327 01:28:34,720 --> 01:28:35,819 No, no, no, no pasa nada. 1328 01:28:35,880 --> 01:28:37,239 Pero es que así van sonando las cosas. 1329 01:28:37,680 --> 01:28:38,039 Vale. 1330 01:28:38,460 --> 01:28:41,760 Entonces, se puede declarar incluso, fíjate, ¿vale? 1331 01:28:43,279 --> 01:28:46,079 La quito de aquí, pero aquí dentro, ¿vale? 1332 01:28:46,180 --> 01:28:49,180 Digamos que aquí hay un bloque que se cierra aquí y aquí empieza otro. 1333 01:28:49,659 --> 01:28:53,960 Es decir, si lo declarara aquí en medio, también lo estoy declarando dentro de la clase y no da problema. 1334 01:28:54,560 --> 01:28:58,340 Pero claro, tú cuando luego quieras descubrir dónde están las variables de toda la clase, 1335 01:28:58,340 --> 01:29:01,340 como empieces a no organizarlo bien, te vuelves loco. 1336 01:29:01,859 --> 01:29:12,380 Por eso, justo debajo de clase, las que son variables globales se declaran y además si trabajas en un equipo, pues todos saben dónde está la variable globales y todos están contentos de encontrarlo rápido. 1337 01:29:13,600 --> 01:29:19,420 Hay gente que lo pone al final por lo mismo, porque saben que están al final de la clase y lo encuentran antes. 1338 01:29:19,420 --> 01:29:32,619 Pero como luego dentro de un mismo script se pueden crear varias clases, que esta es otra cosa, se crea la clase a continuación y si lo pones justo debajo de donde se declara, pues más claro, el mejor sitio, vaya. 1339 01:29:32,619 --> 01:29:54,789 Vale, hasta aquí más o menos me vais siguiendo, ¿no? Más o menos. Vale, voy a seguir unos 10 minutillos más o 20, ¿vale? Pero voy a ver porque a veces me escriben las dudas aquí y necesito verlo por mi cuenta. 1340 01:29:54,789 --> 01:30:13,850 Vale, en las variables también habla de arrays, esto es más avanzado, pero es simplemente para que también os suene un array, que a veces se puede llamar matriz o arreglo, se pueden dentro de una sola caja meter muchos tipos de datos. 1341 01:30:13,850 --> 01:30:36,109 Y de hecho, un array, para que os hagáis cuenta, cuando metemos, aunque no está declarado específicamente, cuando generamos una variable, por ejemplo, de transform, no estamos metiendo un dato como los números que metemos, un 10, o Daniel, o 5. 1342 01:30:36,649 --> 01:30:39,529 Como os he dicho antes, se están guardando un montón de valores, ¿vale? 1343 01:30:39,529 --> 01:30:43,670 Al final esto, si habéis estudiado matrices en matemáticas, esto es un poco parecido a una matriz. 1344 01:30:44,090 --> 01:30:47,369 Es decir, que hay muchas posiciones de esa variable, ¿vale? 1345 01:30:47,409 --> 01:30:47,930 Que os suene. 1346 01:30:49,069 --> 01:30:51,430 Esto es más avanzada, así que me lo salto ahora mismo, ¿vale? 1347 01:30:51,949 --> 01:30:53,409 Ya tendrá más sentido más adelante. 1348 01:30:54,390 --> 01:30:57,909 En esta sección, voy un poco en el orden ahora para ir resolviendo dudas. 1349 01:30:58,829 --> 01:31:01,729 Aquí veis lo que acabamos de hablar, de cómo se declaran las variables, 1350 01:31:01,729 --> 01:31:07,350 un poco inconvenientes que se pueden encontrar, etc. 1351 01:31:07,850 --> 01:31:12,489 Y hay otras, digamos, instrucciones importantes, 1352 01:31:12,649 --> 01:31:15,850 otros operadores también, que son estos que tenemos aquí. 1353 01:31:15,970 --> 01:31:18,789 Estos son bastante importantes porque se usan de vez en cuando 1354 01:31:18,789 --> 01:31:23,210 y si no, pues de pronto saltáis esto porque no parece importante, 1355 01:31:23,369 --> 01:31:24,170 pero sí lo es. 1356 01:31:24,550 --> 01:31:26,590 Pone el truco de programador como un extra, 1357 01:31:26,710 --> 01:31:27,869 pero no es un extra, es importante. 1358 01:31:27,869 --> 01:31:41,750 Es los operadores más más, los operadores menos menos, más igual y menos igual. Me quedo en estos. Hoy no voy a avanzar más de aquí, de las variables y lo que hemos ido viendo de otras cosas. 1359 01:31:44,430 --> 01:31:54,069 En las variables acabamos de decir que existen estos operadores. Lo dejo aquí. El más más y el menos menos. A ver, me voy al de durante la tutoría. 1360 01:31:54,069 --> 01:32:05,770 Y voy a simplificar un poco esto. En indicador máximo de vida era un booleano. Me voy a cargar todo lo que ya no me interese y me voy a quedar con un int, por ejemplo, para hacerlo más simple. 1361 01:32:06,529 --> 01:32:17,369 Cuando estamos en cualquier punto del código puede haber momentos en los que queremos que una variable vaya sumando progresivamente de uno en uno su valor. 1362 01:32:17,369 --> 01:32:23,989 vale eso qué significa que a veces hacemos lo que se llaman bucles vale si vais más adelante se habla 1363 01:32:23,989 --> 01:32:32,989 del ford del wild del wild bueno hay varios más avanzado también pero que lo que van haciendo esos 1364 01:32:32,989 --> 01:32:41,050 bucles es ir recorriendo varios elementos y esos elementos van digamos siendo posiciones pues por 1365 01:32:41,050 --> 01:32:47,170 ejemplo imaginaos por decirlo así vemos el típico ranking de una recreativa antigua vale lo pongo 1366 01:32:47,170 --> 01:32:55,329 aquí ranking recreativa a ver si sale lo que yo quiero que salga que no lo sé imágenes vale lo 1367 01:32:55,329 --> 01:33:00,670 típico lo mejor es 5 resultados vale y esta va a ser la primera posición la segunda tercera cuarta 1368 01:33:00,670 --> 01:33:06,550 la quinta y ya no existen más entonces habrá un momento que nos va a ir interesando que vaya pues 1369 01:33:06,550 --> 01:33:11,529 eso muestra la 1 cuando muestra la 1 muestra la 2 cuando muestra la 2 muestra la 3 veis que va 1370 01:33:11,529 --> 01:33:15,789 sumando progresivamente. En ese momento se usa este operador 1371 01:33:15,789 --> 01:33:18,569 más más, ¿vale? Que es una forma de simplificar 1372 01:33:18,569 --> 01:33:23,350 que sumamos 1 1373 01:33:23,350 --> 01:33:27,130 a la variable, ¿vale? 1374 01:33:27,529 --> 01:33:31,010 ¿Esto qué significa? Que si yo ahora mismo pongo aquí vida, 1375 01:33:31,970 --> 01:33:34,750 ¿vale? ¿Qué me va a mostrar en consola? 1376 01:33:40,199 --> 01:33:43,720 27, no, 26. A ver, lo pongo, vale 25, 1377 01:33:43,720 --> 01:33:46,119 le sumo 1 y 26 1378 01:33:46,119 --> 01:33:46,960 vale, vamos a ello 1379 01:33:46,960 --> 01:33:51,489 26, perfecto, vale 1380 01:33:51,489 --> 01:33:54,029 esto luego habrá otras operaciones que puede sumar 1381 01:33:54,029 --> 01:33:56,010 más más 5 veces, porque digamos 1382 01:33:56,010 --> 01:33:57,710 que 5 veces, pues irá pasando 1383 01:33:57,710 --> 01:34:00,090 por las 5 posiciones para mostrar ese ranking 1384 01:34:00,090 --> 01:34:02,210 vale, es un operador muy importante 1385 01:34:02,210 --> 01:34:04,010 si pones 4 más eso 1386 01:34:04,010 --> 01:34:05,050 más 2, no, no 1387 01:34:05,050 --> 01:34:07,689 pregunto, no, no, no 1388 01:34:07,689 --> 01:34:08,970 si voy poniendo más 1389 01:34:08,970 --> 01:34:11,289 se vuelve loco, da fallo, vale 1390 01:34:11,289 --> 01:34:13,369 vale, esto es lo mismo 1391 01:34:13,369 --> 01:34:32,130 Y esto es otra sintaxis que suele dar problema al principio, ¿vale? Que esto mismo es la forma resumida de escribir esto, ¿vale? Y vais a decir, esto no tiene mucho sentido. Bueno, hasta que lo tenga, ¿vale? Esto y esto es exactamente lo mismo, ¿vale? 1392 01:34:32,130 --> 01:34:43,170 Y vais a decir, ¿cómo vida es igual a vida más uno, no? Si lo pensamos en álgebra humana, eso no tiene sentido porque estamos pensando como pensarían las matemáticas, ¿no? Las ecuaciones. 1393 01:34:43,810 --> 01:34:53,090 Pero recordad que aquí lo que estamos haciendo es, esta caja, esta variable, ¿vale? Es igual, ¿vale? Se le asigna lo que ya vale ahora mismo más uno. 1394 01:34:54,050 --> 01:34:59,850 Entonces, esto significa que lo que hay en esta caja es igual a lo que guarde la caja. 1395 01:35:00,050 --> 01:35:04,329 Aquí está refiriéndose a abrir la caja y aquí se está refiriendo al contenido de la caja. 1396 01:35:05,210 --> 01:35:10,229 Aquí siempre hablamos de declarar la variable o llamar a una variable e inicializarla o cambiar el valor. 1397 01:35:10,449 --> 01:35:14,869 El igual no es igual, no es un igual de matemáticas, es un asignador. 1398 01:35:15,489 --> 01:35:17,409 Entonces, vida es igual a vida más uno. 1399 01:35:17,670 --> 01:35:20,890 Es decir, en esta caja vamos a guardar lo que valga vida más uno. 1400 01:35:20,890 --> 01:35:35,829 Y si volviéramos a poner aquí vida, pongo otra vez esta línea, ¿vale? Cuando yo muestre otra vez la misma instrucción, no son lo mismo, ¿vale? ¿Qué pensáis que va a poner ahora en la consola? 1401 01:35:36,770 --> 01:35:38,189 Lo mismo, 26. 1402 01:35:39,229 --> 01:35:44,109 Aquí 26, ¿vale? Pero estoy diciéndole otra vez, recordad, esta... 1403 01:35:44,109 --> 01:35:51,670 ¿Y te coge la segunda orden que estás dando el resultado de la primera y no el resultado del que has declarado? 1404 01:35:51,949 --> 01:35:56,569 Vale, ahora lo explico. Simplemente lo voy a enseñar para que me creáis y luego os lo explico. 1405 01:35:57,529 --> 01:36:02,689 Esto es bastante simple y a la vez bastante complicado. Veis que pone 26 y 27. 1406 01:36:03,569 --> 01:36:06,689 Volvemos a lo del encoapsulamiento y cuando se declaran las variables. 1407 01:36:07,289 --> 01:36:13,529 Tenemos una variable global aquí arriba, con su caja, y la inicializamos con 25, 1408 01:36:13,649 --> 01:36:14,930 como podría ser con cualquier valor. 1409 01:36:15,590 --> 01:36:21,050 Y vamos aquí y decimos, vale, en vida, igual que antes decíamos ahora vale 70, 1410 01:36:21,529 --> 01:36:24,250 y lo decíamos así a las bravas, entonces aquí en señal 70, 1411 01:36:24,430 --> 01:36:27,149 esto lo vimos el otro día y lo hemos visto antes también, 1412 01:36:27,649 --> 01:36:30,390 quiero que sea lo que vale vida más 1. 1413 01:36:30,390 --> 01:36:34,390 Y aquí lo que está haciendo es coger, todavía no lo hemos asignado, 1414 01:36:34,510 --> 01:36:36,550 está abierta la caja y aquí hacemos la asignación. 1415 01:36:36,689 --> 01:36:43,930 está volviendo a donde se declaró la variable, coge este valor, le suma 1 y lo guarda en vida. 1416 01:36:44,390 --> 01:36:46,569 Vale, y lo lee de arriba a abajo y por eso suma 2. 1417 01:36:46,590 --> 01:36:47,789 Y aquí lo aguarda como vida. 1418 01:36:48,050 --> 01:36:53,510 Pero es que cuando volvemos a esta caja, vuelve a abrir la caja y aquí ya no vale 25 a estas alturas, vale a 26. 1419 01:36:53,890 --> 01:36:54,229 Vale. 1420 01:36:54,670 --> 01:36:56,029 Y le sumamos 1. 1421 01:36:56,029 --> 01:37:02,869 Y así progresivamente, es decir, si yo empezara a hacer esto, pues sería 26, 27, 28, 29, ¿vale? 1422 01:37:02,869 --> 01:37:05,369 que es lo mismo, ¿vale? 1423 01:37:05,890 --> 01:37:07,590 os lo vuelvo a decir, en vez de escribir todo esto 1424 01:37:07,590 --> 01:37:08,949 es lo mismo que decir esto 1425 01:37:08,949 --> 01:37:11,430 es a la caja, súmale uno 1426 01:37:11,430 --> 01:37:13,670 ¿vale? es exactamente lo mismo 1427 01:37:13,670 --> 01:37:15,550 vale, pero si lo quisiera 1428 01:37:15,550 --> 01:37:17,050 mencionar en otra caja 1429 01:37:17,050 --> 01:37:19,729 que se vinculara con los 26, sí que le tendría 1430 01:37:19,729 --> 01:37:21,170 que asignar como otro nombre a vida 1431 01:37:21,170 --> 01:37:23,510 para que la otra cápsula te lo 1432 01:37:23,510 --> 01:37:25,689 reconociera por 26 en vez de por 25, ¿o no? 1433 01:37:26,449 --> 01:37:27,550 no, aquí lo que va 1434 01:37:27,550 --> 01:37:29,210 haciendo, claro, tú me estás hablando 1435 01:37:29,210 --> 01:37:31,189 de abrir otra variable distinta 1436 01:37:31,189 --> 01:37:51,149 Claro, si tú abres otra variable, pues esto se llamará muerte, no sé, y esto tendrá otro valor. Es decir, vida y muerte son distintos. Es decir, si yo aquí digo muerte y le pongo 800 por poner un valor muy distinto, aquí es que muerte no está cambiando en ningún momento. 1437 01:37:51,149 --> 01:38:09,729 Es verdad que yo puedo ir aquí y decir muerte. Y aquí me va a enseñar vida 25 más 1, 26. Ha guardado 26 en la caja en este momento. Ahora vuelvo aquí, que ya vale 26. Estoy llamando a la caja. 26 más 1, 27. En este momento va a enseñar 27. 1438 01:38:09,729 --> 01:38:11,869 ¿vale? vuelvo a llamar 1439 01:38:11,869 --> 01:38:13,869 a la caja vida, he guardado 27 1440 01:38:13,869 --> 01:38:15,789 aquí antes, ¿vale? 27 más 1441 01:38:15,789 --> 01:38:17,789 1, 28, en este momento 1442 01:38:17,789 --> 01:38:19,949 la caja vale 28 y aquí enseñará 28 1443 01:38:19,949 --> 01:38:21,670 y aquí valdrá 29 1444 01:38:21,670 --> 01:38:23,750 pero aquí no va a enseñar 29 1445 01:38:23,750 --> 01:38:25,930 porque es que lo que le estoy diciendo que enseñe no es 1446 01:38:25,930 --> 01:38:27,770 vida, no es lo que hay en la caja vida 1447 01:38:27,770 --> 01:38:29,289 es la caja muerte, entonces va a enseñar 1448 01:38:29,289 --> 01:38:31,670 26, 27, 28 y 800 1449 01:38:31,670 --> 01:38:33,689 vale, pero si yo lo pusiera 1450 01:38:33,689 --> 01:38:35,010 fuera de esas llaves 1451 01:38:35,010 --> 01:38:37,869 sí que tendría que 1452 01:38:37,869 --> 01:38:39,529 declarar de otra manera la vida 1453 01:38:39,529 --> 01:38:41,750 más uno para que me lo reconociera 1454 01:38:41,750 --> 01:38:43,670 porque estaría fuera de todas 1455 01:38:43,670 --> 01:38:45,409 estas llaves, no sé si me explico 1456 01:38:45,409 --> 01:38:47,810 claro, pero tú donde has declarado la variable 1457 01:38:47,810 --> 01:38:49,649 es a comienzo, es global 1458 01:38:49,649 --> 01:38:51,609 entonces se va a poder usar en toda 1459 01:38:51,609 --> 01:38:52,989 la clase, sin problema 1460 01:38:52,989 --> 01:38:55,210 el problema viene 1461 01:38:55,210 --> 01:38:56,949 de que yo 1462 01:38:56,949 --> 01:38:58,829 la declaro aquí 1463 01:38:58,829 --> 01:39:01,689 como está en el ámbito, aquí sí que funciona 1464 01:39:01,689 --> 01:39:03,649 ¿no? pero si yo luego en el 1465 01:39:03,649 --> 01:39:05,689 update pongo 1466 01:39:05,689 --> 01:39:07,489 vida, pues es lo de antes 1467 01:39:07,489 --> 01:39:09,930 aunque yo ponga vida más uno 1468 01:39:09,930 --> 01:39:11,069 es que no sabe que es vida 1469 01:39:11,069 --> 01:39:12,310 porque está fuera de su ámbito 1470 01:39:12,310 --> 01:39:13,569 ¿vale? 1471 01:39:14,810 --> 01:39:16,149 sin embargo muerte sí 1472 01:39:16,149 --> 01:39:17,390 porque muerte está aquí 1473 01:39:17,390 --> 01:39:18,430 muerte se va a poder poner 1474 01:39:18,430 --> 01:39:21,310 muerte es igual a 55 1475 01:39:21,310 --> 01:39:23,430 ¿vale? 1476 01:39:24,170 --> 01:39:25,449 o mejor aún, mira 1477 01:39:25,449 --> 01:39:27,409 ¿sí? ¿me vas siguiendo? 1478 01:39:27,989 --> 01:39:28,250 sí 1479 01:39:28,250 --> 01:39:29,649 vale, o mejor aún 1480 01:39:29,649 --> 01:39:32,369 voy a comentar esto 1481 01:39:32,369 --> 01:39:33,829 para que en el start no haga nada 1482 01:39:33,829 --> 01:39:35,250 y no salgan muchos numerajos 1483 01:39:35,250 --> 01:39:37,189 pero imagínate que en el update 1484 01:39:37,189 --> 01:39:43,810 que recuerda que se va planteando en cada fotograma, quito lo de muerte 55, 1485 01:39:44,069 --> 01:39:49,850 digo que cada fotograma me enseñe lo que vale muerte, que esto por ejemplo puede servir para un contador. 1486 01:39:51,430 --> 01:39:59,170 Aquí, muerte. ¿Qué crees que va a pasar? Como la he declarado arriba, como es global, 1487 01:39:59,289 --> 01:40:03,510 puedo hablar de muerte de esta variable en cualquier lado, ¿qué va a ir pasando? 1488 01:40:03,510 --> 01:40:07,130 que va a sumar 801, 802, 803 1489 01:40:07,130 --> 01:40:08,130 porque lo has puesto 1490 01:40:08,130 --> 01:40:11,470 en el que se va cargando por fotograma 1491 01:40:11,470 --> 01:40:13,090 exacto, empieza valiendo 1492 01:40:13,090 --> 01:40:14,890 800, en el fotograma siguiente le digo 1493 01:40:14,890 --> 01:40:16,909 ojo, súmale 1 y me lo enseñas 1494 01:40:16,909 --> 01:40:18,729 y aquí guarda 801 1495 01:40:18,729 --> 01:40:19,930 porque está fuera del update 1496 01:40:19,930 --> 01:40:23,050 en el siguiente, 801, súmale 1 1497 01:40:23,050 --> 01:40:24,869 vale, pues enseñará 802 1498 01:40:24,869 --> 01:40:26,449 y guarda 802 1499 01:40:26,449 --> 01:40:28,630 y ahora vas a ver que tenemos como una especie de contador 1500 01:40:28,630 --> 01:40:30,970 muy poco refinado 1501 01:40:30,970 --> 01:40:33,390 pero vas a ver que cada fotograma 1502 01:40:33,390 --> 01:40:34,510 Espera, ¿verdad? 1503 01:40:34,949 --> 01:40:35,210 Sí. 1504 01:40:35,930 --> 01:40:36,170 ¿Vale? 1505 01:40:36,569 --> 01:40:36,930 Ahí. 1506 01:40:37,649 --> 01:40:38,229 Pues va a ir sumando. 1507 01:40:38,970 --> 01:40:41,869 Cada fotograma que por segundo se ejecuta mucho fotograma, ¿vale? 1508 01:40:41,869 --> 01:40:43,050 Por eso va como a saltos. 1509 01:40:43,250 --> 01:40:46,069 Pero sí que se están planteando, ¿vale? 1510 01:40:47,069 --> 01:40:47,949 ¿Ves que van sumándose? 1511 01:40:48,109 --> 01:40:48,289 Sí. 1512 01:40:48,869 --> 01:40:49,050 ¿Vale? 1513 01:40:49,069 --> 01:40:49,909 Que no va de uno en uno. 1514 01:40:50,369 --> 01:40:52,210 Bueno, si vas parando sí van de uno en uno, 1515 01:40:52,329 --> 01:40:54,430 pero se ejecuta más rápido del uno en uno. 1516 01:40:55,010 --> 01:40:55,409 ¿Vale? 1517 01:40:55,789 --> 01:40:58,170 Entonces, pues mira, por ejemplo, una aplicación práctica. 1518 01:40:58,350 --> 01:41:00,489 Pues para hacer un contador, pues mira, el más más puede servir. 1519 01:41:01,090 --> 01:41:01,750 Y lo mismo. 1520 01:41:01,750 --> 01:41:09,229 Esto es igual a muerte más uno. Es exactamente lo mismo. Va a dar el mismo resultado. Si quieres lo comprobamos, pero te lo digo yo. 1521 01:41:09,229 --> 01:41:09,750 Sí, sí, lo da. 1522 01:41:09,989 --> 01:41:20,289 Vale. Y, vale, muerte más uno. Vuelvo aquí a los apuntes. ¿Vale? Este operador, importante que sepáis cómo... Bueno, esto lo apago, que ya está aquí usado. 1523 01:41:20,289 --> 01:41:23,289 ¿cuántas cosas? ¿vale? 1524 01:41:23,609 --> 01:41:26,069 y esto también, esto que estoy poniendo 1525 01:41:26,069 --> 01:41:27,010 de vida más 1526 01:41:27,010 --> 01:41:29,329 vida igual, vida más uno 1527 01:41:29,329 --> 01:41:32,170 también se puede poner con otra forma resumida que son estas 1528 01:41:32,170 --> 01:41:33,890 ¿vale? bueno, ojo 1529 01:41:33,890 --> 01:41:36,029 no he puesto el menos menos, pero el menos menos lo que va haciendo 1530 01:41:36,029 --> 01:41:37,989 es restar uno, ¿vale? cada vez que se invoque 1531 01:41:37,989 --> 01:41:39,949 igual, si queréis hacemos las pruebas 1532 01:41:39,949 --> 01:41:41,210 pero por no perder tiempo 1533 01:41:41,210 --> 01:41:43,829 pero existe el más igual y el menos igual 1534 01:41:43,829 --> 01:41:46,210 ¿vale? si yo voy al más igual 1535 01:41:46,210 --> 01:41:48,069 lo que se puede hacer 1536 01:41:48,069 --> 01:41:50,050 es para no tener que repetir, que incluso es 1537 01:41:50,050 --> 01:42:02,550 La confusión que nos viene siempre, en vez de poner muerte igual a muerte más 1, cuando se va a hacer una operación sobre la misma variable, sobre la propia variable, se puede hacer igual más 1. 1538 01:42:02,770 --> 01:42:09,109 ¿Y esto qué significa? Que muerte pasa a valer lo que valga más 1 o más 7 en este caso. 1539 01:42:10,090 --> 01:42:17,850 Ahora se van a ir sumando de 7 en 7. Va a ir 807, 814 y cada fotograma va a ir enseñándolo. 1540 01:42:17,850 --> 01:42:23,279 vale, ¿por qué no lo está haciendo bien? 1541 01:42:23,380 --> 01:42:24,500 pues por una cosa muy simple 1542 01:42:24,500 --> 01:42:26,880 que es que he puesto igual más 1543 01:42:26,880 --> 01:42:28,659 no más igual, ¿vale? importante 1544 01:42:28,659 --> 01:42:31,539 he puesto igual más 1545 01:42:31,539 --> 01:42:32,840 y la operación es 1546 01:42:32,840 --> 01:42:33,579 más igual 1547 01:42:33,579 --> 01:42:37,220 ahora mismo esta línea como no tiene sentido 1548 01:42:37,220 --> 01:42:39,039 ¿vale? le estaba diciendo 1549 01:42:39,039 --> 01:42:40,680 que era un 7 positivo básicamente 1550 01:42:40,680 --> 01:42:42,840 entonces siempre vale 7, que no es lo mismo 1551 01:42:42,840 --> 01:42:44,800 que cada vez que dé una vuelta 1552 01:42:44,800 --> 01:42:46,600 en este caso vaya sumándole 7 1553 01:42:46,600 --> 01:42:48,840 ahora sí que va a ir 1554 01:42:48,840 --> 01:42:50,319 800, 800, 7 1555 01:42:50,319 --> 01:42:52,659 va a ir, lo paro porque si no esto 1556 01:42:52,659 --> 01:42:54,560 se vuelve loco 1557 01:42:54,560 --> 01:42:56,680 vale, 807, va sumando 1558 01:42:56,680 --> 01:42:58,899 7 en cada ocasión, que es la cifra que hemos 1559 01:42:58,899 --> 01:43:00,159 puesto, vale 1560 01:43:00,159 --> 01:43:03,020 si aquí lo pusiéramos con el 1561 01:43:03,020 --> 01:43:04,979 menos, aquí lo bueno es que podemos determinar 1562 01:43:04,979 --> 01:43:06,640 que sean saltos más allá del 1 1563 01:43:06,640 --> 01:43:08,520 vale, porque en el más más sí que es 1 1564 01:43:08,520 --> 01:43:10,760 por ejemplo, aquí también podríamos poner 7 1565 01:43:10,760 --> 01:43:12,659 por ejemplo, si aquí 1566 01:43:12,659 --> 01:43:15,020 ponemos que vaya restando 1 en cada fotograma 1567 01:43:19,489 --> 01:43:19,989 pues será 1568 01:43:19,989 --> 01:43:22,829 lo paro y voy para arriba para ver lo que ha hecho 1569 01:43:22,829 --> 01:43:27,119 va restando uno en cada vuelta 1570 01:43:27,119 --> 01:43:27,859 ¿vale? 1571 01:43:29,119 --> 01:43:30,979 eso es importante, ¿qué tal hasta aquí? 1572 01:43:31,840 --> 01:43:32,159 bien 1573 01:43:32,159 --> 01:43:34,060 más o menos, ahí va 1574 01:43:34,060 --> 01:43:37,380 para el próximo día 1575 01:43:37,380 --> 01:43:38,899 me quedo con 1576 01:43:38,899 --> 01:43:40,699 esto siguiente, con el último ¿vale? 1577 01:43:41,060 --> 01:43:42,840 esta página más o menos estaría vista 1578 01:43:42,840 --> 01:43:45,159 falta de los arrays, que los arrays 1579 01:43:45,159 --> 01:43:46,840 lo vemos poco después 1580 01:43:46,840 --> 01:43:49,340 y tardaré un poco en hablar de ellos 1581 01:43:49,340 --> 01:43:50,859 pero aquí hay otra línea 1582 01:43:50,859 --> 01:43:52,779 que sirve para invertir booleanos 1583 01:43:52,779 --> 01:43:58,439 Pero bueno, ya lo veremos cuando veamos la aplicación más aplicada, por decirlo así. 1584 01:43:59,199 --> 01:44:05,659 Entonces, hasta aquí que esta página más o menos la deberíais ir ya entendiendo. 1585 01:44:06,760 --> 01:44:13,739 Entonces, hay una última cosa que quiero que sepáis, que es, que antes lo hemos visto, que es, por un lado, 1586 01:44:14,319 --> 01:44:17,600 que cuando tenemos algún, a ver, que lo voy a tener que crear porque no lo tengo, 1587 01:44:17,600 --> 01:44:38,140 Cuando tenemos algún valor público o con serialize fill, como aquí, es decir, que lo asignamos, lo podemos asignar por el editor, como hemos hecho, pero en este caso es un número, yo aquí le he asignado 800 y esto lo voy a comentar para no complicarlo más. 1588 01:44:38,140 --> 01:44:41,239 Yo aquí le estoy diciendo que esto vale 800 1589 01:44:41,239 --> 01:44:42,680 Y yo voy 1590 01:44:42,680 --> 01:44:44,739 Y voy al script durante la tutoría 1591 01:44:44,739 --> 01:44:45,979 Y vale, pone 800 1592 01:44:45,979 --> 01:44:48,920 Y yo le digo, bueno, no, 800 no 1593 01:44:48,920 --> 01:44:51,039 950 1594 01:44:51,039 --> 01:44:51,680 ¿Vale? 1595 01:44:52,180 --> 01:44:54,340 Es verdad que aunque, bueno, espera 1596 01:44:54,340 --> 01:44:56,560 Y en el start voy a decir que me enseñé 1597 01:44:56,560 --> 01:44:58,600 Que está guardando muerte 1598 01:44:58,600 --> 01:45:00,859 Porque si no, no sabemos que está interpretando 1599 01:45:00,859 --> 01:45:02,640 Internamente el 1600 01:45:02,640 --> 01:45:04,039 El programa 1601 01:45:04,039 --> 01:45:06,659 ¿Vale? Cuando empiece el juego, enséame lo que vale muerte 1602 01:45:06,659 --> 01:45:20,619 Y aquí yo he inicializado muerte, pone 800, lo lógico sería que pusiera 800, ¿vale? Que era el problema que estaba dando antes. Yo cuando voy y arranco el juego, ¿qué es lo que me pone? 950, ¿vale? 1603 01:45:20,619 --> 01:45:31,899 Quiero que entendáis que los códigos, igual que si aquí pongo 800 y al arrancar el juego, aunque aquí la haya declarado, luego ponga muerte, igual a 1000. 1604 01:45:33,600 --> 01:45:49,699 Aquí, si no lo tuviera serializado y lo cambiara, lo que me va a enseñar es 1000, porque aunque aquí esté de comienzo inicializado como 800, luego al arrancar el juego, digamos que hay una operación posterior, que es que al arrancar el juego, pues oye, me dice que vale 1000. 1605 01:45:49,699 --> 01:46:11,140 Entonces, lo que me va a enseñar es 1000. Pero hay algo más allá incluso, que es que todo lo que hagamos en el inspector, más allá del código, más cercano, digamos, a la ejecución, sobrescribe a lo que vamos haciendo en el código. Por tanto, podremos ir variando, ¿veis? Verás que vuelve a salir, aquí ha salido el 1000, porque es verdad que cuando arranca el juego, aunque yo haya cambiado esto, ¿vale? 1606 01:46:14,560 --> 01:46:19,619 Como yo he cambiado el juego y le he dicho al arrancar la ejecución, ponmelo en 1000, ¿vale? 1607 01:46:20,619 --> 01:46:27,079 Sobrescribe al empezar el juego, en un momento de ejecución, lo que yo ya he hecho tanto en la declaración inicial, ¿vale? 1608 01:46:27,140 --> 01:46:32,760 Como en la sobrescriptura que tenemos aquí, que sí que es verdad que si no hiciera nada más, ¿vale? 1609 01:46:32,800 --> 01:46:35,500 Como no hay un momento de ejecución, no hay un momento en el que lo vuelve a cambiar. 1610 01:46:35,899 --> 01:46:42,640 Pero tened ojo con que a veces poner aquí las instrucciones puede dar este tipo de problemas, que hay un orden de ejecución, ¿vale? 1611 01:46:42,640 --> 01:46:44,000 ya os iréis pegando con ello 1612 01:46:44,000 --> 01:46:46,279 no sé si me vais siguiendo pero eso 1613 01:46:46,279 --> 01:46:48,859 aquí al inicializar pues damos un valor 1614 01:46:48,859 --> 01:46:50,800 pero luego hay momentos de ejecución 1615 01:46:50,800 --> 01:46:52,359 con el start y el update 1616 01:46:52,359 --> 01:46:54,380 que pueden ir sobre escribiendo valores 1617 01:46:54,380 --> 01:46:58,600 pero este serialize field 1618 01:46:58,600 --> 01:46:59,380 perdonad por el joder 1619 01:46:59,380 --> 01:47:00,640 y el public 1620 01:47:00,640 --> 01:47:02,720 también se puede variar dentro 1621 01:47:02,720 --> 01:47:04,420 del propio 1622 01:47:04,420 --> 01:47:06,199 del propio 1623 01:47:06,199 --> 01:47:08,859 script y de hecho para que os hagáis 1624 01:47:08,859 --> 01:47:10,659 una idea yo aquí 1625 01:47:10,659 --> 01:47:11,239 pongo 1626 01:47:11,239 --> 01:47:13,300 serializar 1627 01:47:13,300 --> 01:47:15,600 el campo 1628 01:47:15,600 --> 01:47:17,359 lo inicializo como 800 1629 01:47:17,359 --> 01:47:19,640 al empezar lo pongo en 1000 1630 01:47:19,640 --> 01:47:21,739 y quiero que la muerte 1631 01:47:21,739 --> 01:47:23,319 me lo vaya enseñando en el update 1632 01:47:23,319 --> 01:47:25,399 que cada fotograma me vaya enseñando esta cifra 1633 01:47:25,399 --> 01:47:27,760 y guardo, y vais a ver que pasa una cosa 1634 01:47:27,760 --> 01:47:29,659 que mezcla todo esto 1635 01:47:29,659 --> 01:47:30,239 que acabo de decir 1636 01:47:30,239 --> 01:47:32,180 yo arrancaré el juego 1637 01:47:32,180 --> 01:47:34,380 al arrancar se me pone en 1000 1638 01:47:34,380 --> 01:47:37,340 sobre escribiendo esto que está en 1132 1639 01:47:37,340 --> 01:47:39,000 a ver, placa 1640 01:47:39,000 --> 01:47:40,479 se pone en 1000 1641 01:47:40,479 --> 01:47:42,060 Y vale, pues 1000 1642 01:47:42,060 --> 01:47:43,539 Me lo ha puesto 1000 incluso aquí 1643 01:47:43,539 --> 01:47:45,659 Pero cuando yo ya he arrancado el juego 1644 01:47:45,659 --> 01:47:49,000 Como digamos que esta orden ya se ha ejecutado 1645 01:47:49,000 --> 01:47:50,159 Y no lo va a sobreescribir 1646 01:47:50,159 --> 01:47:52,079 Al final lo que va a importar es 1647 01:47:52,079 --> 01:47:53,600 Lo que yo vaya poniendo aquí 1648 01:47:53,600 --> 01:47:55,239 Y veis que va cambiando el valor 1649 01:47:55,239 --> 01:47:58,239 Y podría ir cambiando desde el editor a mano 1650 01:47:58,239 --> 01:47:59,340 Ciertos valores 1651 01:47:59,340 --> 01:48:01,319 ¿Vale? Que os suene 1652 01:48:01,319 --> 01:48:02,479 ¿Pero para qué? 1653 01:48:03,699 --> 01:48:06,359 Pues por ejemplo, imagínate que quieres probar 1654 01:48:06,359 --> 01:48:07,680 Hacia donde se mueve una nave 1655 01:48:07,680 --> 01:48:09,460 De una forma intuitiva 1656 01:48:09,460 --> 01:48:12,159 Porque tú cuando arrancas el juego 1657 01:48:12,159 --> 01:48:13,220 No puedes cambiar el código 1658 01:48:13,220 --> 01:48:15,479 El código, digamos que una vez arranca 1659 01:48:15,479 --> 01:48:16,199 No se puede cambiar 1660 01:48:16,199 --> 01:48:18,619 Pero nos puede interesar probar cosas 1661 01:48:18,619 --> 01:48:21,159 Que sí que se ejecutan durante el juego 1662 01:48:21,159 --> 01:48:21,680 Como esto 1663 01:48:21,680 --> 01:48:24,300 Pero luego lo tendrías que cambiar en el código, ¿no? 1664 01:48:24,500 --> 01:48:26,619 Es que estoy cambiando el código, aunque no lo parezca 1665 01:48:26,619 --> 01:48:28,699 O sea, aunque no salga en el CESAR 1666 01:48:28,699 --> 01:48:30,420 Es como si estuviera cambiando, ¿no? 1667 01:48:30,420 --> 01:48:32,039 Claro, yo con este serialize field 1668 01:48:32,039 --> 01:48:34,479 Estoy accediendo a esta variable en todo momento 1669 01:48:34,479 --> 01:48:36,420 Y siempre y cuando sea 1670 01:48:36,420 --> 01:48:37,880 En un momento de ejecución 1671 01:48:37,880 --> 01:48:40,100 que se pueda ver cómo voy cambiando 1672 01:48:40,100 --> 01:48:41,939 el valor de muerte, yo en todo momento 1673 01:48:41,939 --> 01:48:43,800 tengo abierta esta caja. En vez de cambiarlo 1674 01:48:43,800 --> 01:48:45,819 como aquí, lo estoy cambiando, pero por el 1675 01:48:45,819 --> 01:48:46,899 editor, en vivo. 1676 01:48:48,399 --> 01:48:49,720 ¿Vale? Yo lo que vale 1677 01:48:49,720 --> 01:48:51,579 muerte, lo estoy cambiando ahora mismo. 1678 01:48:51,840 --> 01:48:53,819 En este mismo instante, muerte 1679 01:48:53,819 --> 01:48:55,439 no vale ni 800 ni 1000, vale 1680 01:48:55,439 --> 01:48:56,520 1657. 1681 01:48:57,920 --> 01:48:59,920 Ya lo iréis viendo. Mira, en el siguiente 1682 01:48:59,920 --> 01:49:01,859 tema ya, de hecho, tiene aplicaciones, así que 1683 01:49:01,859 --> 01:49:03,939 ya lo veréis. ¿Vale? E importante, 1684 01:49:04,460 --> 01:49:05,800 si en algún momento queréis ir 1685 01:49:05,800 --> 01:49:07,739 viendo cómo va, pues por ejemplo, lo 1686 01:49:07,739 --> 01:49:13,859 del más uno que va cada fotograma aquí vais yendo fotograma fotograma aquí da igual porque mira 1687 01:49:13,859 --> 01:49:21,920 cómo está parado el juego si yo ahora cambio a 1896 al ir al siguiente fotograma por 1896 vale 1688 01:49:21,920 --> 01:49:26,460 que en ocasiones puede que queramos ir viendo qué va pasando cada fotograma en vez de aquí 1689 01:49:26,460 --> 01:49:33,140 una sucesión de elementos pues continua vale que se puede detener el juego y se para ahí y 1690 01:49:33,140 --> 01:49:35,159 Y podemos seguir fotograma a fotograma ejecutándolo. 1691 01:49:36,939 --> 01:49:38,300 Y ya, última cosa. 1692 01:49:38,420 --> 01:49:39,739 Bueno, hasta aquí qué tal, más o menos. 1693 01:49:39,920 --> 01:49:41,199 Sé que son muchas cosas, pero bueno, 1694 01:49:41,340 --> 01:49:43,060 veis que están escritas en el tema también. 1695 01:49:43,439 --> 01:49:46,479 Y en los vídeos de Álvaro Holguera también se ven ciertas cosas 1696 01:49:46,479 --> 01:49:47,260 que estoy hablando aquí. 1697 01:49:48,720 --> 01:49:50,340 Esto es un mejunje de cosas, 1698 01:49:50,720 --> 01:49:53,060 pero que poco a poco iréis asimilando. 1699 01:49:54,039 --> 01:49:55,760 Al menos los que vayáis siguiendo las clases. 1700 01:49:57,039 --> 01:49:59,859 Hay una última cosa muy importante, 1701 01:49:59,859 --> 01:50:03,180 que es que cuando vayamos cambiando cosas en vivo 1702 01:50:03,180 --> 01:50:06,819 yo puedo decir, yo arranco el juego y se me ponen 1000 siempre 1703 01:50:06,819 --> 01:50:09,119 y aquí empiezo a guardar 1704 01:50:09,119 --> 01:50:11,460 y vais a ver que yo cuando detengo el juego 1705 01:50:11,460 --> 01:50:14,000 me vuelve al otro valor que estaba guardando antes de empezar 1706 01:50:14,000 --> 01:50:17,159 por ejemplo, 500, arranco el juego 1707 01:50:17,159 --> 01:50:20,600 se va a sobreescribir a 1000, que es lo que hace al arrancar el juego 1708 01:50:20,600 --> 01:50:23,140 y me pongo a cambiar esto a 192 1709 01:50:23,140 --> 01:50:25,439 y por lo que sea yo quiero que en 192 1710 01:50:25,439 --> 01:50:29,359 se deje aquí sobreescrito el valor 1711 01:50:29,739 --> 01:50:34,859 Veréis que cuando yo detenga la ejecución del juego, vuelve a 500, que es el que yo había metido a mano. 1712 01:50:35,819 --> 01:50:42,199 Esto significa que hay cambios que podemos ir haciendo en el... o más fácil, mirad, si me estoy yendo por las ramas. 1713 01:50:42,539 --> 01:50:48,199 Tengo aquí colocada la nave y quiero que se mueva, y lo voy a ir cambiando en tiempo real, en estas coordenadas. 1714 01:50:48,399 --> 01:50:49,739 Quiero cambiarlo en estas coordenadas. 1715 01:50:50,520 --> 01:50:58,760 Todos estos cambios que yo voy haciendo, imaginaos que yo hay un momento que voy a decir, quiero que la nave se quede aquí. 1716 01:50:58,760 --> 01:51:01,460 que la he ajustado, pero como estoy en ejecución 1717 01:51:01,460 --> 01:51:02,939 durante la ejecución 1718 01:51:02,939 --> 01:51:05,039 los cambios que vayamos haciendo solo funcionan 1719 01:51:05,039 --> 01:51:07,180 durante la ejecución, cuando yo pare 1720 01:51:07,180 --> 01:51:09,060 vuelve a los valores 1721 01:51:09,060 --> 01:51:10,340 que tenía antes de la ejecución 1722 01:51:10,340 --> 01:51:12,600 por tanto, cambios que hagamos en vivo 1723 01:51:12,600 --> 01:51:14,560 que en el siguiente tema vamos a hacer 1724 01:51:14,560 --> 01:51:16,520 cuidado que se hacen 1725 01:51:16,520 --> 01:51:18,720 y no se guardan 1726 01:51:18,720 --> 01:51:21,079 por eso veréis que cuando yo le doy 1727 01:51:21,079 --> 01:51:22,979 al play, se oscurece un poco el área 1728 01:51:22,979 --> 01:51:25,000 se oscurece un poco el entorno 1729 01:51:25,000 --> 01:51:27,079 indicando que estamos dentro 1730 01:51:27,079 --> 01:51:31,979 de la ejecución y un poco advirtiendo que el cambio que hagamos en los parámetros, pues no se guardan, ¿vale? 1731 01:51:33,520 --> 01:51:39,979 Último consejo. Para cambiar este color y que sea aún más obvio cuándo podemos o no cambiar los elementos 1732 01:51:39,979 --> 01:51:48,520 sin que se guarden, ¿vale? Dentro de Edits hay una pestaña de Preferencias. Creo que siempre confundo estas dos. 1733 01:51:48,520 --> 01:52:05,659 En preferencias, edit preferencias, están los colores del sistema. Ya hay uno bastante interesante de modificar, que yo ya lo haría, y esto se guarda siempre que no instaléis otra versión de Unity o vayáis a otro ordenador, etc. 1734 01:52:05,659 --> 01:52:28,300 Es decir, entre distintos juegos incluso que uséis la misma versión de Unity se va a mantener, en vez de decirle que sea el tintado de este gris tan sutil que tenemos, lo podemos exagerar a un rojo de warning. Cuando lo tengamos ahí configurado, el Play Mode Tint, el tinte de modo de juego, ahora cuando ejecutemos el juego vais a ver que se tiñe de otro color. Lo podéis poner más o menos llamativo. 1735 01:52:28,300 --> 01:52:30,380 ahora, todo cambio que vayamos haciendo 1736 01:52:30,380 --> 01:52:31,680 mientras estemos en este modo 1737 01:52:31,680 --> 01:52:34,520 sabemos que 1738 01:52:34,520 --> 01:52:36,279 cuando detengamos la ejecución del juego 1739 01:52:36,279 --> 01:52:38,300 placa, no ha servido para nada 1740 01:52:38,300 --> 01:52:40,500 excepto a lo mejor para tener clara 1741 01:52:40,500 --> 01:52:42,199 la referencia de donde queremos ubicar algo 1742 01:52:42,199 --> 01:52:43,420 en este caso, etc 1743 01:52:43,420 --> 01:52:46,239 entonces es importante que a lo mejor 1744 01:52:46,239 --> 01:52:47,399 cambies ya 1745 01:52:47,399 --> 01:52:49,739 en edit 1746 01:52:49,739 --> 01:52:51,979 preferencias, este color 1747 01:52:51,979 --> 01:52:54,100 ponerlo en algo intermedio 1748 01:52:54,100 --> 01:52:56,260 no tan rojo saturado, porque al final 1749 01:52:56,260 --> 01:52:58,560 este color se añade al que tiene ya la interfaz 1750 01:52:58,560 --> 01:53:00,199 pues yo que sé, algo así rosadito 1751 01:53:00,199 --> 01:53:01,920 y cuando le deis pues ya 1752 01:53:01,920 --> 01:53:03,560 os marca que estáis como en 1753 01:53:03,560 --> 01:53:04,979 momento warning 1754 01:53:04,979 --> 01:53:09,569 bueno, sé que os he dicho muchas cosas 1755 01:53:09,569 --> 01:53:11,770 la grandísima mayoría 1756 01:53:11,770 --> 01:53:13,590 están en los apuntes realmente 1757 01:53:13,590 --> 01:53:15,390 de una forma quizá menos desarrollada 1758 01:53:15,390 --> 01:53:17,670 claramente, pero bueno 1759 01:53:17,670 --> 01:53:18,670 que 1760 01:53:18,670 --> 01:53:21,550 espero que poco a poco vayáis teniendo 1761 01:53:21,550 --> 01:53:23,689 un poquito más de información y la vayáis 1762 01:53:23,689 --> 01:53:24,689 ubicando bien