1 00:00:06,450 --> 00:00:19,730 En esta práctica, hay una parte que a no ser que tengáis problemas claros, no me voy a meter mucho, que es la creación del prefab, porque creo que está suficientemente bien explicada. 2 00:00:20,250 --> 00:00:34,649 Sí que hay un concepto, que es el de prefab, que yo tengo aquí, por ejemplo, preparada mi nave, que quizá cuando vais siguiendo un poco las instrucciones, o pasáis por alto, porque también es normal, o que puede generar dudas. 3 00:00:34,649 --> 00:00:49,509 Al final, un prefab no deja de ser un objeto, como se explica, que está guardado para poder ser reutilizado en distintas partes del proyecto o instanciado. Instanciado es generar copias de un mismo objeto. 4 00:00:49,509 --> 00:00:52,490 y lo voy a usar de referencia en varios momentos 5 00:00:52,490 --> 00:00:54,570 por ejemplo, si en un videojuego 6 00:00:54,570 --> 00:00:56,530 y perdonad que remita a videojuegos 7 00:00:56,530 --> 00:00:58,450 violentos, pero es que suelen abundar 8 00:00:58,450 --> 00:01:00,549 mucho, cuando disparamos una bala 9 00:01:00,549 --> 00:01:01,829 con la metralleta 10 00:01:01,829 --> 00:01:04,010 imaginaos que cada bala es un objeto 11 00:01:04,010 --> 00:01:06,709 ese proyectil va volando por el aire 12 00:01:06,709 --> 00:01:08,549 bueno, pues tenemos ya un prefab 13 00:01:08,549 --> 00:01:10,269 de esa bala y lo que vamos haciendo es 14 00:01:10,269 --> 00:01:12,629 lanzar copias de esa bala, de una única 15 00:01:12,629 --> 00:01:14,489 bala, a lo mejor tenemos prefab de 16 00:01:14,489 --> 00:01:16,530 bala de escopeta, bala de 17 00:01:16,530 --> 00:01:18,730 metralleta, yo que sé, pero al final 18 00:01:18,730 --> 00:01:24,069 a menos que lo hagamos con otra finalidad, va a ser ese prefab que se va duplicando. 19 00:01:24,930 --> 00:01:29,489 Como hemos visto los prefabs, y tengo aquí uno preparado en el panel de proyecto 20 00:01:29,489 --> 00:01:33,870 y lo puedo importar, meterlo en el proyecto, incluso meterlo dentro de la jerarquía, 21 00:01:34,409 --> 00:01:39,209 vais a ver que viene marcado con este texto azul, con la cajita azul. 22 00:01:39,989 --> 00:01:43,810 En el panel proyecto vais a ver normalmente ya la geometría del prefab. 23 00:01:44,030 --> 00:01:47,590 Por ejemplo, aquí veis la nave, y atención porque aquí podemos hacer zoom 24 00:01:47,590 --> 00:02:01,670 Y hay una forma que no es que haya un menú de ver en modo lista ni en modo visualización, que es que si quitamos todo el zoom vamos viendo los elementos con iconitos y enlistado, que a veces es más interesante para saber de qué se trata cada elemento. 25 00:02:01,670 --> 00:02:24,729 Al ver esta caja azul sabemos que es un prefab y lo tenemos ahí preparando. Y habéis visto que yo puedo empezar a meter aquí el prefab 85 millones de veces. Lo podemos tener aquí para hacer un escuadrón. No sé si ahora habéis visto el típico juego que hay de alguien que va corriendo y va pasando por un más 10, por 2 y se va multiplicando. 26 00:02:24,729 --> 00:02:39,729 Eso al final son que se van instanciando más o menos prefabs a medida que se van cumpliendo ciertas condiciones. Una vez dicho esto, algo importante y me vuelvo a referir a la bala de la escopeta. Imaginaos que ahora en vez de la nave es una escopeta. 27 00:02:39,729 --> 00:03:06,250 El prefab cuando lo generáis, que lo podéis ir generando, como ya habréis estado haciendo los que comenzaste la tarea, a generar aquí los elementos con las geometrías, etc., con las distintas primitivas que se pueden poner en Unity, y lo que hacemos es arrastrar, pues imaginaos que este cubo es lo que queremos convertir en prefab, para convertir en prefab cogéis de la jerarquía los elementos, podéis seleccionar varios, y lo arrastráis al panel de proyecto y se genera un prefab. 28 00:03:06,250 --> 00:03:07,330 En este caso es un cubo. 29 00:03:07,750 --> 00:03:09,990 Bueno, pues es un prefab bastante básico. 30 00:03:10,689 --> 00:03:12,509 Si fuera una esfera, pues podría ser la bala. 31 00:03:13,830 --> 00:03:18,469 Si queréis editar este prefab, bueno, y ved que he borrado el prefab que había generado 32 00:03:18,469 --> 00:03:21,729 y aunque esté en la escena, es verdad que se pone en rojo como avisando de 33 00:03:21,729 --> 00:03:23,750 oye, el prefab de origen no está. 34 00:03:24,110 --> 00:03:26,689 Te dejo el objeto aquí, pero esto ya no es un prefab. 35 00:03:27,150 --> 00:03:29,789 Si veis, sale esta indicación roja, significa eso. 36 00:03:30,990 --> 00:03:35,310 Imaginaos que tenemos ya la nave y ya la hemos preparado 37 00:03:35,310 --> 00:03:36,610 y está ahí como un prefab, ¿no? 38 00:03:37,189 --> 00:03:38,430 ¿Cómo se edita un prefab? 39 00:03:38,490 --> 00:03:41,810 Porque esto al final es como cuando en cualquier software 40 00:03:41,810 --> 00:03:43,849 se mete en una carpeta, en un folder, en un bin, 41 00:03:44,189 --> 00:03:46,469 varios objetos de la jerarquía, ¿no? 42 00:03:46,469 --> 00:03:49,030 Que se van aquí poniendo una dentro de otra, 43 00:03:49,129 --> 00:03:50,930 como habréis visto también en la tarea, ¿no? 44 00:03:51,590 --> 00:03:53,629 Cuando vayamos teniendo estos elementos 45 00:03:53,629 --> 00:03:55,069 y los convertimos en prefab, 46 00:03:55,250 --> 00:03:56,930 pues igual lo tengo aquí como prefab, 47 00:03:57,050 --> 00:03:58,990 lo borro todo, ¿vale? 48 00:03:58,990 --> 00:04:02,610 Y digo, vale, pues tengo aquí el prefab, 49 00:04:02,909 --> 00:04:05,050 que lo puedo duplicar, pero esto cómo se edita luego, ¿vale? 50 00:04:05,310 --> 00:04:27,329 Para editar un prefab es fácil. O le dais doble clic al elemento o al propio elemento también de la jerarquía, ¿vale? Se puede de cualquiera de los dos puntos, en este caso el cubo. Voy a abrir la nave, mi nave, ¿vale? Cuando hagáis el prefab, pues para reeditarlo y recolocar elementos, doble clic y se os abre este área como azul, ¿vale? Un poco tron, ahí esperando a que hagamos cosas, ¿vale? 51 00:04:27,329 --> 00:04:48,550 Esto se identifica, para que sea fácil, con dos pistas visuales. Una, aquí vais a ver en el panel de escena que hay unas migas de pan para ir viendo que este prefab está metido dentro de escenas porque lo hemos abierto desde donde está aquí incorporado. 52 00:04:48,550 --> 00:05:02,870 En una de las escenas está este prefab aplicado. Y aquí podemos ir variando todos los elementos que compone ese prefab, que al final veis que es como una especie de empaquetado de geometrías que tenemos ahí con una jerarquía, esperando a que se instancie. 53 00:05:03,649 --> 00:05:11,550 Si en algún momento queremos cambiar el prefab, nos metemos dentro del prefab y aquí podemos ir modificando cada elemento como en la jerarquía de la escena habitualmente. 54 00:05:11,550 --> 00:05:22,689 Sí que es verdad que es importante. Aquí hay una opción que se llama autosave, que por defecto a mí me aparece marcada, debería aparecer marcada, que nos puede interesar o no. 55 00:05:23,310 --> 00:05:29,670 Porque esto significa que todo cambio que vayamos haciendo de los elementos se irán guardando en el prefab automáticamente. 56 00:05:30,129 --> 00:05:38,110 Si lo desmarcamos, veréis que yo, si por ejemplo el alerón lo muevo un poco, pues si yo saliera no se está guardando. 57 00:05:38,110 --> 00:05:40,449 habría que dar a este save que ha aparecido aquí, ¿vale? 58 00:05:40,550 --> 00:05:42,930 Que a veces cuando intentáis salir del prefab os dice, 59 00:05:43,009 --> 00:05:44,110 oye, pero ¿guardas o no? 60 00:05:44,230 --> 00:05:47,410 Eso dependerá de cómo lo estéis gestionando, ¿vale? 61 00:05:47,430 --> 00:05:51,209 Si queréis volver, dice, ya he terminado y lo voy a dejar mal, ¿vale? 62 00:05:51,769 --> 00:05:53,350 Esta pieza la he dejado un poco, 63 00:05:53,829 --> 00:05:56,629 que es el alerón trasero vertical este que he puesto, 64 00:05:57,089 --> 00:05:58,310 lo dejo así, ¿vale? 65 00:05:58,329 --> 00:05:59,930 Movido de sitio, si os fijáis. 66 00:06:00,629 --> 00:06:02,889 Si yo guardo y salgo, ¿vale? 67 00:06:02,910 --> 00:06:05,850 Para volver, digamos, a la jerarquía o al escenario, 68 00:06:06,050 --> 00:06:07,790 aquí está esta flechita, ¿vale? 69 00:06:08,110 --> 00:06:13,930 que nos sirve para volver al proyecto, para ir para atrás, o también podemos incluso dar a esa miga de pan que tenemos, ¿vale? 70 00:06:14,709 --> 00:06:20,370 ¿Qué pasa? Que ahora, incluso si lo veis en la miniatura, ese alerón se ha movido y se ha guardado como movido. 71 00:06:20,470 --> 00:06:24,329 Si yo ahora lo duplico, va a tener el alerón ahí flotando, ¿vale? Lo ha instanciado todo. 72 00:06:25,589 --> 00:06:31,310 Y esto es lo que me sirve para primera cosa que suele haber de problema en vuestras entregas de esta tarea, 73 00:06:31,310 --> 00:06:33,649 que es tener en cuenta 74 00:06:33,649 --> 00:06:35,029 imaginaos que cuando 75 00:06:35,029 --> 00:06:36,829 hagamos las instancias del objeto 76 00:06:36,829 --> 00:06:39,069 vuelvo a remitir a la bala 77 00:06:39,069 --> 00:06:41,209 nosotros luego vamos a dar un punto 78 00:06:41,209 --> 00:06:43,449 de referencia donde se va instanciando esa bala 79 00:06:43,449 --> 00:06:45,170 desde donde se emite 80 00:06:45,170 --> 00:06:47,490 ese proyectil, en el caso de una bala 81 00:06:47,490 --> 00:06:49,370 pues lo suyo será poner la boquilla 82 00:06:49,370 --> 00:06:51,089 de la pistola o del arma que sea 83 00:06:51,089 --> 00:06:53,430 para que a partir de ahí vaya para adelante 84 00:06:53,430 --> 00:06:54,430 en profundidad 85 00:06:54,430 --> 00:06:55,870 si 86 00:06:55,870 --> 00:06:59,290 ese elemento que estamos instanciando 87 00:06:59,290 --> 00:07:07,170 está movido del 0,0 de ese origen, imaginaos que hago esto, si yo me muevo de aquí, cuando yo 88 00:07:07,170 --> 00:07:12,589 instancie esa bala, si no lo corrijo de algún modo, va a identificar que desde donde se lanza, 89 00:07:12,889 --> 00:07:19,449 imaginaos que aquí está la boquilla de la pistola, va a estar ya movido desde ese punto. Por tanto, 90 00:07:19,610 --> 00:07:26,550 ojo, si queréis instanciar algo en un punto concreto, aseguraos de que todo esté en el 0,0 91 00:07:26,550 --> 00:07:28,470 de origen, ¿vale? Es decir, ahora mismo 92 00:07:28,470 --> 00:07:30,670 lo está. Y veis que aquí hay un elemento 93 00:07:30,670 --> 00:07:32,629 padre, que es el nave prefab, que está 94 00:07:32,629 --> 00:07:34,709 con todo intacto, ¿vale? 95 00:07:34,910 --> 00:07:36,649 Y luego he ido haciendo hijos 96 00:07:36,649 --> 00:07:38,629 a los distintos elementos de la jerarquía. 97 00:07:39,350 --> 00:07:40,209 ¿Por qué pongo 98 00:07:40,209 --> 00:07:42,230 otro padre, vale? Esto es 99 00:07:42,230 --> 00:07:44,649 fácil. Está el 100 00:07:44,649 --> 00:07:46,529 elemento empty, que es como un nulo, ¿vale? 101 00:07:46,529 --> 00:07:48,470 Como un nul en otro software de 3D, etc. 102 00:07:48,689 --> 00:07:50,430 Que cuando lo creáis está vacío, pero 103 00:07:50,430 --> 00:07:52,569 sirve para colocar elementos dentro de otros 104 00:07:52,569 --> 00:07:53,990 elementos y dar coordenadas. 105 00:07:53,990 --> 00:08:04,509 El elemento padre-padre de un prefab, cuando estamos dentro del prefab, digamos que no puedes poner nada por encima de la jerarquía de ese elemento 106 00:08:04,509 --> 00:08:11,790 Por tanto diría que este elemento, por defecto en los prefabs, debería estar siempre configurado para que estén las coordenadas de origen 107 00:08:11,790 --> 00:08:20,149 Que son los ceros de posición, los ceros de rotación y a uno de escala, ojo, la escala por defecto es 1 en las tres dimensiones 108 00:08:20,149 --> 00:08:34,470 Y luego dentro de eso nos aseguramos a modo visual que esté todo donde queremos que esté. Así cuando instanciemos nos aseguramos que este padre es el origen del prefab y luego ya iremos distribuyendo los elementos. 109 00:08:35,309 --> 00:08:58,490 Luego hay otra cosa a considerar que os pone, que es que la nave tiene que estar mirando hacia la Z en profundidad, ¿vale? Si os fijáis en este guismo del mundo, ¿vale? Dado el juego que vamos a hacer luego, que va a ser un Endless Runner, ¿vale? Que va la nave en profundidad y van apareciendo obstáculos, un poco como el Subway Surfer, no sé si lo conocéis. 110 00:08:58,490 --> 00:09:17,549 Yo os voy a enseñar para que tengáis en cabeza hacia dónde se dirige esto, lo enseño muy rápido. Esto será de la tarea 2, ¿vale? Es el siguiente paso. Pero lo que vamos a buscar, ahí lo tenemos, es un juego como de estas características, todavía feote, etcétera, pero que va a ir esquivando los pivotetes estos que van apareciendo. 111 00:09:17,549 --> 00:09:21,549 ¿Vale? ¿Qué pasa? Que lo que vamos a hacer es que esta nave va en profundidad 112 00:09:21,549 --> 00:09:24,049 Si el prefab lo incorporamos 113 00:09:24,049 --> 00:09:27,509 Angulado hacia otra dirección, luego habrá que hacer otra operación 114 00:09:27,509 --> 00:09:30,730 Para reenderezarlo, por tanto, igual que con lo de la bala 115 00:09:30,730 --> 00:09:32,429 ¿Vale? Pues lo mismo 116 00:09:32,429 --> 00:09:35,970 Si queremos que esté en el punto de origen 117 00:09:35,970 --> 00:09:38,669 Y orientado correctamente, pues hay que tener en cuenta 118 00:09:38,669 --> 00:09:41,470 Que el mundo está mirando en Z en profundidad 119 00:09:41,470 --> 00:09:43,409 Luego hay otra cosa 120 00:09:43,409 --> 00:09:47,289 Para que lo vayáis teniendo en cuenta, que es que cuando vamos instanciando 121 00:09:47,289 --> 00:09:54,950 o metiendo en la jerarquía distintos prefabs, de pronto puede haber uno, una de estas instancias, por ejemplo, esta nave, ¿vale? 122 00:09:54,970 --> 00:10:05,509 Veis que aquí se han acumulado unas cuantas, que yo, pues, le quiero poner un material o, mira, o darle otro componente, 123 00:10:05,610 --> 00:10:11,129 meterle un componente como, por ejemplo, un RigidBody, que esto en siguientes temas lo vamos a ver. 124 00:10:11,129 --> 00:10:21,149 pues metemos un componente, recordar, esto lo dije el otro día, que los distintos elementos que van sumándose a cada objeto se llaman componentes, 125 00:10:21,230 --> 00:10:27,169 que son lo que van metiendo las propiedades que tiene ese objeto. 126 00:10:27,509 --> 00:10:34,210 Un RigidBody, si le doy a play vais a ver que es un objeto que así grosso modo lo que hace es meter gravedad al objeto. 127 00:10:35,269 --> 00:10:40,230 ¿Qué ha pasado? Esto me sirve no para hablar del RigidBody en este momento, todavía no es el momento, 128 00:10:40,230 --> 00:10:42,470 sino para que veáis que tengo un prefab 129 00:10:42,470 --> 00:10:44,509 de todos los que ya he metido 130 00:10:44,509 --> 00:10:45,710 que es diferente al resto 131 00:10:45,710 --> 00:10:47,669 que tiene un RigidBody 132 00:10:47,669 --> 00:10:50,570 por defecto este de origen no tiene el RigidBody 133 00:10:50,570 --> 00:10:52,730 pero a lo mejor estamos trabajando en uno de estos 134 00:10:52,730 --> 00:10:53,909 de estas instancias 135 00:10:53,909 --> 00:10:56,110 y hemos metido un elemento nuevo 136 00:10:56,110 --> 00:10:58,850 esto os va a 137 00:10:58,850 --> 00:11:00,730 lo vais a ver a nivel visual 138 00:11:00,730 --> 00:11:03,129 porque vais a ver que donde está el iconito del componente 139 00:11:03,129 --> 00:11:04,429 os añade un más 140 00:11:04,429 --> 00:11:05,909 en plan está añadido 141 00:11:05,909 --> 00:11:07,970 a una instancia 142 00:11:07,970 --> 00:11:11,049 del prefab 143 00:11:11,049 --> 00:11:14,629 podemos seguir obviando que esto es un añadido 144 00:11:14,629 --> 00:11:16,929 y seguir trabajando porque esta nave va a ser diferente al resto 145 00:11:16,929 --> 00:11:20,049 o hay una opción aquí, cuando metáis un prefab 146 00:11:20,049 --> 00:11:22,970 va a aparecer esta línea para abrir el prefab como hemos hecho 147 00:11:22,970 --> 00:11:26,570 para seleccionarlo en la jerarquía y otro que son los overrides 148 00:11:26,570 --> 00:11:28,809 los overrides sirve para 149 00:11:28,809 --> 00:11:31,970 diciendo lo que tiene de diferencial, marcado con este más 150 00:11:31,970 --> 00:11:35,129 esa diferencia que hay con el prefab, decir no, no, yo lo que quiero 151 00:11:35,129 --> 00:11:41,210 es que todos los prefabs que deriven de este, pues he pensado que tenga este RigidBody. 152 00:11:41,350 --> 00:11:45,970 Entonces, si le damos a aplicar, vais a ver que se aplica ahora, 153 00:11:46,250 --> 00:11:50,710 va a tardar un segundete, a todas las instancias que tenga este prefab. 154 00:11:50,809 --> 00:11:56,149 Por tanto, es otra forma de modificar también una instancia. 155 00:11:57,110 --> 00:12:01,269 Incluso aquí podemos ir abriendo la nave y decir, 156 00:12:01,269 --> 00:12:03,610 no, es que la nave no quiero que tenga alerones. 157 00:12:03,610 --> 00:12:22,909 Veis que estoy trabajando no dentro del área de prefab, sino dentro de la jerarquía en una instancia. Si yo borro esos alerones, bueno, en los alerones justo me va a decir, oye, esto es un hijo de un prefab, si borras esto, pues te está variando el prefab. Lo tendrías que hacer del prefab o tendrías que hacer una variante, ¿vale? Y aquí es donde se podría borrar y luego guardar. 158 00:12:22,909 --> 00:12:26,029 El otro día dije que lo que son 159 00:12:26,029 --> 00:12:29,190 Hablé de que se podían añadir código 160 00:12:29,190 --> 00:12:31,750 Todas las funcionalidades que vamos a ir añadiendo 161 00:12:31,750 --> 00:12:34,230 Va a ser a través de estos componentes que os he indicado 162 00:12:34,230 --> 00:12:37,490 O añadiendo nosotros código que vayamos programando 163 00:12:37,490 --> 00:12:42,730 Que a fin de cuentas también se añadirá como un componente 164 00:12:42,730 --> 00:12:45,330 Para eso se generan lo que se llaman scripts 165 00:12:45,330 --> 00:12:49,009 Y estos scripts ya vimos, voy rápido porque esto lo expliqué el otro día 166 00:12:49,009 --> 00:12:51,269 Que se generan con clic derecho, crear 167 00:12:51,269 --> 00:12:56,909 Y aquí tenemos una opción de generar un script de César, que es el lenguaje de programación en el que trabajamos. 168 00:12:57,429 --> 00:13:10,210 Ya os comenté, y lo ponen los apuntes, que cuidado con el nombre que demos al script por defecto, porque luego se va a ver reflejado dentro del código. 169 00:13:10,210 --> 00:13:14,549 y si no coincide este nombre con el nombre de la clase del código, 170 00:13:14,750 --> 00:13:19,490 la clase es el patrón que se va a usar en el código 171 00:13:19,490 --> 00:13:22,210 para ir organizando los distintos códigos, 172 00:13:22,870 --> 00:13:25,029 pues si no coincide, dará problemas. 173 00:13:26,169 --> 00:13:28,110 Entonces, he generado este script 174 00:13:28,110 --> 00:13:30,730 y si quiero que se vean los resultados de algún modo, 175 00:13:31,090 --> 00:13:33,470 habrá que meterlo como componente en algún elemento. 176 00:13:33,889 --> 00:13:35,809 Ahora vamos a hacer operaciones matemáticas 177 00:13:35,809 --> 00:13:38,610 y al final del todo, un instant sheet 178 00:13:38,610 --> 00:13:41,450 para ver cómo se hace un poco lo de la tarea. 179 00:13:41,950 --> 00:13:44,549 Pero para que se aplique este código a algo, 180 00:13:44,870 --> 00:13:46,389 ahora mismo simplemente está aquí preparado 181 00:13:46,389 --> 00:13:47,350 y si le doy doble clic, 182 00:13:47,669 --> 00:13:49,909 se abrirá vuestro Visual Studio, 183 00:13:50,330 --> 00:13:51,090 que tendréis aquí. 184 00:13:51,750 --> 00:13:54,389 Veis esta bonita pantalla de hacker 185 00:13:54,389 --> 00:13:55,809 que se nos ha quedado 186 00:13:55,809 --> 00:13:59,789 con un poco ese código abierto, 187 00:14:00,009 --> 00:14:00,970 preparado para trabajar. 188 00:14:01,269 --> 00:14:03,769 Aquí vais a ver que este nombre y este coinciden 189 00:14:03,769 --> 00:14:04,870 y tienen que coincidir. 190 00:14:04,950 --> 00:14:05,669 Ya lo expliqué el otro día, 191 00:14:05,669 --> 00:14:06,789 por eso, si no tenéis duda, 192 00:14:06,789 --> 00:14:23,049 No lo voy a repasar más, pero aquí tenemos la conexión entre el archivo que está trabajando, operando dentro de Unity y lo que va a responder a nuestro código. Por tanto, si cambiamos alguna letra aquí o algo, habrá que cambiarlo en ambos puntos. 193 00:14:23,049 --> 00:14:28,309 importante, aquí ya de hecho tengo algunas carpetas 194 00:14:28,309 --> 00:14:30,149 habéis visto la de prefabs, donde tenía los prefabs 195 00:14:30,149 --> 00:14:32,950 para generar carpetas, clic derecho crear 196 00:14:32,950 --> 00:14:36,490 aquí es prácticamente donde se crea todo lo que podemos tener para el proyecto 197 00:14:36,490 --> 00:14:40,210 hay uno de folder, os recomiendo que vayáis organizando 198 00:14:40,210 --> 00:14:41,750 esto lo ponen los apuntes también 199 00:14:41,750 --> 00:14:44,110 por tipología de elemento 200 00:14:44,110 --> 00:14:47,590 yo por ejemplo, tengo aquí algunos que he estado yo trabajando 201 00:14:47,590 --> 00:14:50,750 los quiero tener ahí preparados, pero este que va a ser durante la tutoría 202 00:14:50,750 --> 00:14:56,870 lo meto en la carpeta durante, para tenerlo ahí, para saber cuáles son los de durante y los que tenía de antes, ¿vale? 203 00:14:57,309 --> 00:15:01,769 Lo dicho, tenemos aquí el script abierto esperando para operar. 204 00:15:02,269 --> 00:15:06,889 Y por mucho que yo escriba aquí, hasta, bueno, no por mucho, hay otros que no hará igual falta, 205 00:15:07,330 --> 00:15:10,929 ya esto ya es más avanzado, pero si queremos que lo que yo vaya aplicando a este código 206 00:15:10,929 --> 00:15:16,029 se vea reflejado en algún momento en el programa, habrá que meterlo como componente en algún elemento. 207 00:15:16,029 --> 00:15:30,710 Ahora mismo vamos a hacer, porque va a ser a nivel teórico, vamos a generar un vacío. No va a afectar a un objeto visual, visible. Va a servir para cálculos, por ejemplo. Va a ser un objeto vacío al que yo vinculo. 208 00:15:30,710 --> 00:15:57,269 Y mirad que para vincular un script puedo arrastrar desde aquí al inspector y se incorpora como otro de los componentes, ¿vale? Si lo quiero eliminar, las opciones de eliminar, de copiar, etcétera, están en estos tres puntos, ¿vale? Lo voy a eliminar porque también se puede añadir, igual que se puede hacer, por ejemplo, con los componentes, con los efectos, digamos, por decirlo de una forma así rápida e inteligible, 209 00:15:57,269 --> 00:16:08,029 Vale, todos los que ya vienen configurados también se puede buscar por aquí como, para añadirlo, hay uno de cálculos que es el otro que tenía y cálculos tut, ¿vale? 210 00:16:08,409 --> 00:16:20,090 Fijaos, de hecho, cuando leáis sobre el Pascal case y el Camel case, cómo se deberían escribir las palabras en programación, aunque aquí haya puesto cálculos tut todo seguido, 211 00:16:20,090 --> 00:16:25,610 Fijaos que el propio programa, yo ya cuando lo meto en el archivo, sabe separar estos nombres, ¿vale? 212 00:16:25,610 --> 00:16:32,929 Para que veáis que ya está pensado esto y hay que ir siguiendo estas nomenclaturas que iremos viendo y que ya en el tema cero se habla de varias, ¿vale? 213 00:16:33,330 --> 00:16:38,889 Ahora ya está, digamos, en un objeto dentro de Unity esperando a operar con él. 214 00:16:39,230 --> 00:16:44,830 Pues estamos aquí con CalculusTut y vamos a hacer nuestra primera operación matemática, ¿vale? 215 00:16:44,830 --> 00:17:02,429 Y os voy a decir algo que es que mucho, casi todo lo que vais a hacer consiste en operaciones matemáticas, ¿vale? Y en lógica de que se cumplan condiciones o no. Es decir, todo por detrás son esos números o interpretaciones de números, ¿vale? 216 00:17:02,429 --> 00:17:13,589 Entonces, aunque ahora una suma parezca una tontería, al final casi todo lo vamos a ir controlando con números, ¿vale? Entonces es importante saber operar con las opciones que nos da. 217 00:17:14,829 --> 00:17:18,809 Para empezar a programar, y esto quien haya programado en cualquier lenguaje, 218 00:17:18,990 --> 00:17:22,630 hay un concepto que es el primario, digamos que es la variable. 219 00:17:23,250 --> 00:17:30,009 La variable, digamos que es un elemento en el que se van guardando espacios en la memoria con una información. 220 00:17:30,009 --> 00:17:40,089 Por ejemplo, quiero que haya un número al que puedo referenciar con otra palabra. 221 00:17:40,890 --> 00:17:45,289 Voy a hacer primero una operación matemática y luego vamos a ver qué son las variables. 222 00:17:46,009 --> 00:17:49,750 Aquí hay una línea que veis que se llama igual que el archivo. 223 00:17:50,470 --> 00:17:52,970 Ya veremos un poco más qué es esto de clase, etc. 224 00:17:54,069 --> 00:17:58,089 Pero a partir de estas llaves, y vais a ver que cuando marco una llave, 225 00:17:59,130 --> 00:18:01,910 se marca otra llave, una de apertura y una de cierre, 226 00:18:02,430 --> 00:18:06,049 porque este lenguaje, como los que si habéis visto el tema cero, 227 00:18:06,470 --> 00:18:09,630 los que se suele trabajar en lo que se llama programación orientada a objetos, 228 00:18:10,089 --> 00:18:34,309 Esto es más avanzado, ya le iréis dando vueltas. Se van estipulando en bloques, ¿vale? Y estos bloques significa que hay una llave de apertura y una llave de cierre que delimita un área, ¿no? Ahora mismo, de aquí a aquí, pues hay un área, y dentro de ese área, de ese bloque, es donde vamos a ir añadiendo las instrucciones que se van a ejecutar, por ejemplo, en este caso, dentro de esta clase. 229 00:18:34,309 --> 00:18:38,809 Si veis esta llave, comprende todo lo que hay aquí dentro 230 00:18:38,809 --> 00:18:40,950 Y luego vais a ver otras llaves, por ejemplo aquí 231 00:18:40,950 --> 00:18:44,950 Y esta llave, cuando marco esta, veis que tiene su correspondiente llave de cierre 232 00:18:44,950 --> 00:18:48,549 Y aquí es donde se irá ejecutando, por ejemplo, lo de este Start 233 00:18:48,549 --> 00:18:51,069 O este Update, este método Update 234 00:18:51,069 --> 00:18:52,789 Esto ya veremos ahora qué es 235 00:18:52,789 --> 00:18:55,049 También tiene un área de influencia 236 00:18:55,049 --> 00:18:56,930 Donde yo iré escribiendo código 237 00:18:56,930 --> 00:18:59,750 Y se ejecutará lo relacionado con Update 238 00:18:59,750 --> 00:19:08,029 entonces aquí es muy importante que lo que se abre se cierra a nivel de llaves y a nivel de paréntesis 239 00:19:08,029 --> 00:19:13,029 también veis que se suelen abrir y cerrar aunque estén vacíos y parezca un sinsentido 240 00:19:13,029 --> 00:19:17,130 ahí están esperando, dentro de este bloque iremos haciendo operaciones 241 00:19:17,130 --> 00:19:22,869 pero veis que este bloque ya tiene dos bloques aquí también, esperando que hagamos cosas 242 00:19:22,869 --> 00:19:43,950 Esto es porque Unity ya, a través de la herencia de otra clase, como de otra carpeta de posibilidades que alguien ha prehecho antes, los que han desarrollado CISAR para trabajar en Unity, pues ya ha generado ciertas funciones como este start y este update para poder ejecutar en ciertos momentos. 243 00:19:43,950 --> 00:20:01,670 C-SARP se usa también para programar de otro tipo, etc. Incluso si veis tutoriales en internet de C-SARP, de Aprende C-SARP, si no está aplicada Unity, vais a aprender C-SARP, el lenguaje, pero veréis que por definición va a haber una cosa llamada Main, pues otro método que está pensado para otros usos. 244 00:20:01,670 --> 00:20:10,869 Aquí digamos que está adaptado, igual que un lenguaje luego tiene dialectos, por decirlo así, pues este ya está adaptado para lo que se hace en Unity, que es desarrollo de aplicaciones, videojuegos, etc. 245 00:20:10,869 --> 00:20:25,230 Entonces, si pensamos fríamente, cuando estamos jugando en un videojuego lo que vamos a tener es unas interactividades, unas interacciones que vamos a ir haciendo y el programa en todo momento tiene que ir captando lo que hacemos o no hacemos. 246 00:20:25,230 --> 00:20:31,730 Si en el mando damos a la X, pues que salte, si es lo que hemos configurado. 247 00:20:33,210 --> 00:20:40,250 También va a haber momentos, va a haber operaciones que queremos que se ejecuten según se lanza el juego. 248 00:20:40,410 --> 00:20:47,069 Por ejemplo, que se configure el nivel, se cargue, que se ponga que la vida está al 100%, etc. 249 00:20:47,910 --> 00:20:50,609 Y ese es otro momento del juego, que es al iniciar. 250 00:20:50,609 --> 00:21:06,630 Entonces, estos dos métodos que tenemos aquí sirven, uno, para meter instrucciones que se ejecutan según se abre o se aplica dentro del juego este código, ¿vale? Al arrancar este código, en el estar lo que yo diga, se va a ejecutar, ¿vale? 251 00:21:06,630 --> 00:21:22,849 Y luego va a haber aquí otro bloque, en base a otro método, que es este update. A ver, la traducción que ahora no me sale, como de actualización, de actualizar, que constantemente, fotograma, fotograma, va a ir mirando qué hay aquí dentro para fotograma, fotograma, irlo ejecutando. 252 00:21:22,849 --> 00:21:30,569 Entonces, lo primero, lo que metamos aquí, dicho rápido, se ejecutará al iniciar el juego 253 00:21:30,569 --> 00:21:36,029 A no ser que este código se ejecute posteriormente y será cuando empiece a ejecutarse ese código 254 00:21:36,029 --> 00:21:39,710 Y este update se irá ejecutando fotograma a fotograma 255 00:21:39,710 --> 00:21:41,890 Esto lo vamos a entender en poco 256 00:21:41,890 --> 00:21:46,109 Vamos a escribir nuestro primer hola mundo 257 00:21:46,109 --> 00:22:03,190 Que es una frase que se usa en programación para comprobar que la consola de programación del programa, la consola es, digamos, una especie de ordenadorcito que va a ir reflejando qué operaciones se están desarrollando en cada momento. 258 00:22:03,349 --> 00:22:07,289 Aquí está más simplificado que en otros usos, ¿vale? 259 00:22:07,990 --> 00:22:12,930 Pero vamos a lanzar a consola, ahora veis lo que es eso, nuestra primera frase, que va a ser ese hola mundo, ¿vale? 260 00:22:13,150 --> 00:22:14,569 Y vamos a ver nuestra primera operación. 261 00:22:14,569 --> 00:22:33,529 Va a haber un montón de palabras reservadas, de palabras clave, de propiedades, etcétera, que tenemos que ir aprendiendo e ir manejando, ¿no? Entonces, la primera que vamos a hacer es cómo hacer que nuestro programa lance una frase, ¿vale? Entonces, vamos a conseguir que a través de Unity ver la frase que nosotros le digamos, ¿vale? 262 00:22:33,529 --> 00:22:54,609 Para eso hay que escribir debug, ¿vale? Y veis algo importante que cuando empezáis a escribir algo os empieza a salir aquí como ayudas, ¿no? Esto es un sistema en Visual Studio que se llama IntelliSense, que IntelliSense lo que va haciendo es detectar lo que vamos escribiendo para darnos sugerencias de, oye, pues esto puede completarse con estas opciones. 263 00:22:54,609 --> 00:23:08,470 Que en todas veis que hay un tran, ¿no? Pues si sigo ir afinando, pero esto viene muy bien para ir sabiendo qué opciones hay que podamos ir seleccionando, ¿vale? Entonces, la primera instrucción es este debug, ¿vale? 264 00:23:08,470 --> 00:23:21,309 Y dentro de cada instrucción, digamos que luego, dentro de cada clase en este caso, luego va a haber como propiedades hijas de esta operación. 265 00:23:21,609 --> 00:23:26,210 Por ejemplo, debug, si le damos al punto, de pronto van a salir muchas opciones, no hemos escrito más. 266 00:23:26,609 --> 00:23:29,930 Pues debug a ser debug log, que es la que nos interesa. 267 00:23:30,549 --> 00:23:37,990 Entonces, quiero que en programación interpretéis los puntos como separadores en jerarquías inferiores. 268 00:23:37,990 --> 00:23:53,750 Me explico, como unas migas de pan que hemos visto antes. ¿Qué significa esto? Supongo que todos habéis rellenado la típica ficha que os preguntan, ¿cuál es vuestro país? Y luego, ¿cuál es vuestra ciudad? Y luego, ¿cuál es vuestra calle? Y luego, ¿cuál es vuestro número? 269 00:23:53,750 --> 00:24:12,390 Y cada opción consecuente va a ser dependiente del padre. Es decir, si ponéis que sois de Estados Unidos, pues luego saldrá aquí la opción de poder elegir entre los estados. Pero si elegís España, pues lo que van a salir son las comunidades autónomas. Cada caso irá desbloqueando nuevas opciones. 270 00:24:12,390 --> 00:24:17,349 Entonces, siempre se va a ir de lo general a cada vez lo más concreto. 271 00:24:19,009 --> 00:24:25,309 Debug, que sirve sobre todo para depurar código, para encontrar errores. 272 00:24:25,890 --> 00:24:30,450 Si damos al punto, tiene dentro muchas operaciones relacionadas. 273 00:24:31,329 --> 00:24:37,210 La mayoría de ellas no las vamos a necesitar, pero hay una muy importante que debéis aprender, 274 00:24:37,650 --> 00:24:39,430 que es esta que se llama debug.log. 275 00:24:39,430 --> 00:24:40,789 Damos doble clic y ahí está. 276 00:24:43,210 --> 00:24:55,269 Cuando estamos ejecutando una acción con código, vais a ver que siempre, o prácticamente siempre, vais a tener que abrir y cerrar unos paréntesis. 277 00:24:55,990 --> 00:25:03,349 Y esto alude otra vez a estos paréntesis, por ejemplo, que tenemos aquí, sin rellenar, porque ahora mismo esto nos interesa que esté vacío. 278 00:25:03,349 --> 00:25:18,430 Pero hasta que no ponemos estos paréntesis, digamos que el software, el Visual Studio, no sabe que estamos lanzando una instrucción de hacer algo, que es lo que se llama lanzar un método o lanzar una función. 279 00:25:18,430 --> 00:25:26,670 De backlog, como funciona, por ver el primer uso, sirve para aquí, entre comillas, ahora os digo por qué 280 00:25:26,670 --> 00:25:32,190 Podéis poner la frase que queráis lanzar, desde el hola mundo, que es la que vamos a lanzar ahora 281 00:25:32,190 --> 00:25:34,769 Pero bueno, lo voy a hacer más personal, hola mundo, Daniel 282 00:25:34,769 --> 00:25:40,789 Y vais a ver que aquí nos sigue marcando un fallo, está aquí subrayado con un fallo 283 00:25:40,789 --> 00:25:45,789 Os dije el otro día que para que se vea reflejado algo que hagamos en código 284 00:25:45,789 --> 00:25:48,690 Atención que aquí arriba tenéis el nombre del archivo 285 00:25:48,690 --> 00:25:51,569 Y va apareciendo un asterisk que indica que no está guardado 286 00:25:51,569 --> 00:25:53,569 Hasta que yo no haga control S 287 00:25:53,569 --> 00:25:55,329 Yo no estoy guardando el código 288 00:25:55,329 --> 00:25:56,750 Y hasta que yo no guardo el código 289 00:25:56,750 --> 00:25:58,509 Por tanto, siempre hay que estar dando control S 290 00:25:58,509 --> 00:25:59,529 Cuando queramos hacer algo 291 00:25:59,529 --> 00:26:02,549 Aunque yo vaya a Unity y haga lo que tenga que hacer 292 00:26:02,549 --> 00:26:05,750 No se va a ver reflejado 293 00:26:05,750 --> 00:26:06,769 Tenemos que ir guardando 294 00:26:06,769 --> 00:26:08,569 Y ojo, mirad que aquí 295 00:26:08,569 --> 00:26:11,109 Y aquí también tenéis asterisk 296 00:26:11,109 --> 00:26:13,069 Son dos software diferentes 297 00:26:13,069 --> 00:26:14,769 Visual Studio y Unity 298 00:26:14,769 --> 00:26:25,930 En uno estamos trabajando el código, que habrá que ir guardando también, y en otro iremos trabajando en lo que son las, pues todo lo que nos ofrece esta interfaz destinada a desarrollo de videojuegos a nivel gráfico. 299 00:26:27,250 --> 00:26:29,930 Entonces, aquí también puedo hacer control S e ir guardando. 300 00:26:30,509 --> 00:26:31,650 Veis que ahora se ha ido el asterisco. 301 00:26:32,029 --> 00:26:39,829 Aquí se ha guardado todo lo relacionado a nivel visual, pero si yo cambio algo en Unity en código, son independientes cada uno de ellos. 302 00:26:39,829 --> 00:26:42,470 Entonces atención de si algo no funciona 303 00:26:42,470 --> 00:26:43,829 Que aquí no esté el asterisco 304 00:26:43,829 --> 00:26:45,369 Porque entonces igual todo lo que habéis cambiado 305 00:26:45,369 --> 00:26:46,990 No se está viendo reflejado 306 00:26:46,990 --> 00:26:49,930 Y veis que aquí está este error 307 00:26:49,930 --> 00:26:52,289 Y ya os digo, si aquí hay algo subrayado rojo 308 00:26:52,289 --> 00:26:54,470 Vuestro programa no va a funcionar 309 00:26:54,470 --> 00:26:55,650 Va a dar fallo, va a dar error 310 00:26:55,650 --> 00:26:57,210 Porque no está sabiendo ejecutarlo 311 00:26:57,210 --> 00:26:59,950 Y esto lo veis, si vais a Unity 312 00:26:59,950 --> 00:27:01,690 Y os metéis 313 00:27:01,690 --> 00:27:04,490 Aquí abajo ya sale una exclamación roja 314 00:27:04,490 --> 00:27:06,190 Que algo nos dice 315 00:27:06,190 --> 00:27:07,309 Que no está yendo bien 316 00:27:07,309 --> 00:27:08,829 Y de hecho yo intento ejecutar el juego 317 00:27:08,829 --> 00:27:10,789 aunque ahora no tenga nada, le doy y dice 318 00:27:10,789 --> 00:27:12,809 todos los errores de compilación tienen que 319 00:27:12,809 --> 00:27:14,750 ser arreglados antes de poder proceder 320 00:27:14,750 --> 00:27:15,950 al modo de juego 321 00:27:15,950 --> 00:27:18,769 por tanto veis que a mi no me deja 322 00:27:18,769 --> 00:27:20,890 hacer nada en el área de game porque 323 00:27:20,890 --> 00:27:22,690 está habiendo un error 324 00:27:22,690 --> 00:27:23,809 ¿vale? 325 00:27:24,410 --> 00:27:26,769 esta línea roja que hay aquí realmente 326 00:27:26,769 --> 00:27:28,890 es una especie de resumen de lo que 327 00:27:28,890 --> 00:27:30,970 podéis ver en el menú consola 328 00:27:30,970 --> 00:27:33,109 ¿vale? que os he dicho antes, si dais a consola 329 00:27:33,109 --> 00:27:35,049 aquí sale aún más grande la exclamación 330 00:27:35,049 --> 00:27:36,670 y es el mismo error ¿vale? 331 00:27:36,670 --> 00:27:45,210 Es verdad que aquí pueden salir muchas más líneas, muchos más errores, se os puede llenar, pero aquí digamos que os va poniendo como la última o la principal que tenéis que ver. 332 00:27:45,789 --> 00:27:48,569 Son las mismas, si leéis la línea es exactamente lo mismo. 333 00:27:49,410 --> 00:27:55,829 Y esto, más adelante os va a venir bien, si queréis acceder a lo que está dando este fallo, si le dais doble clic, ¿vale? 334 00:27:56,769 --> 00:28:00,369 Lo debería abrir, a mí me lo ha abierto en otro lado porque tengo otra ventana, ¿vale? 335 00:28:00,650 --> 00:28:04,329 Pero os lleva a la línea de ese error, ¿vale? Me está aquí marcando de dónde está el error. 336 00:28:04,329 --> 00:28:11,329 Es una buena forma de, cuando de error, saber de dónde viene. Le dais doble clic y decís, oye, ¿qué pasa? ¿Por qué esto está yendo mal? 337 00:28:11,970 --> 00:28:22,690 Aparte aquí os pone también tanto, veis, el nombre del script del que está surgiendo el error, la línea, ¿vale? 11, 40, la línea y la columna que está dando el error. 338 00:28:22,690 --> 00:28:39,069 Si nos metemos en el código, vemos que es en la línea 11, por eso no lo va numerando, y en la columna que no está detallada, pues es la 40. Aquí podéis ir viendo todos los problemas que podéis ir yendo de una forma también descrita. 339 00:28:39,069 --> 00:29:00,970 Aquí también pone el error, ¿vale? Que aquí suele poner el motivo, ¿no? Y es que espera un punto y coma, ¿vale? A nivel de sintaxis de trabajo de este código, de CISAR, ¿vale? De este lenguaje, toda instrucción que vayamos dando, toda línea, debe acabar en punto y coma para ir separando las distintas órdenes que vamos ejecutando, ¿sí? 340 00:29:00,970 --> 00:29:11,230 Entonces, hasta que no ponga punto y línea, pues esta orden, digamos que no se sabe hasta dónde llega, entonces hay que delimitarla en algún momento. 341 00:29:11,750 --> 00:29:19,269 Vale, vemos que no da error, ¿vale? Y voy a ir a cesar para ejecutar esto, ¿vale? 342 00:29:19,690 --> 00:29:27,500 Y dice, aquí sigue poniendo el error. ¿Por qué creéis que es? ¿Por qué? Si aquí no me sale nada rojo. 343 00:29:29,519 --> 00:29:31,099 Venga, primera pregunta interactiva. 344 00:29:31,099 --> 00:29:33,200 Porque no se ha guardado 345 00:29:33,200 --> 00:29:35,819 No se ha guardado el proyecto 346 00:29:35,819 --> 00:29:37,400 En el Visual Studio 347 00:29:37,400 --> 00:29:39,779 Perfecto, veis que está el asterijillo 348 00:29:39,779 --> 00:29:41,519 Importante, porque esto ahora es muy obvio 349 00:29:41,519 --> 00:29:42,799 Pero luego pasa 350 00:29:42,799 --> 00:29:44,940 Control S, se ha guardado, vuelvo 351 00:29:44,940 --> 00:29:47,220 Y ya cuando 352 00:29:47,220 --> 00:29:49,039 Me permita 353 00:29:49,039 --> 00:29:51,099 A veces tiene que recargar, según el ordenador 354 00:29:51,099 --> 00:29:52,480 Mejor o peor, pues tardará más 355 00:29:52,480 --> 00:29:55,160 Ahora hay otros problemas, pero 356 00:29:55,160 --> 00:29:58,099 Ya no es el rojo 357 00:29:58,099 --> 00:29:59,700 Cuando salen errores amarillos 358 00:29:59,700 --> 00:30:05,519 significa con esta con este warning amarillo significa que hay errores pero 359 00:30:05,519 --> 00:30:10,319 no son fatales es decir no van a detener la ejecución pero bueno convendría 360 00:30:10,319 --> 00:30:13,799 echarle un ojo lo mismo si le damos doble clic nos abriría estos de otros 361 00:30:13,799 --> 00:30:17,240 escribe tengo preparados antes vale nos abriría donde está en el código ese 362 00:30:17,240 --> 00:30:22,140 error vale ahora cuando lo hacemos la aplicación vale cuando le da play vais a 363 00:30:22,140 --> 00:30:27,720 ver que se ejecuta os he dicho cuando la fe y ahora se va a ver en el juego la 364 00:30:27,720 --> 00:30:29,599 frase cual hemos dicho, hola mundo Daniel 365 00:30:29,599 --> 00:30:32,059 vale, y os vais a llevar la primera desilusión 366 00:30:32,059 --> 00:30:33,720 porque no se ve nada 367 00:30:33,720 --> 00:30:35,019 en el juego, no hay nada 368 00:30:35,019 --> 00:30:37,740 que se vea, pero si os fijáis 369 00:30:37,740 --> 00:30:39,480 en la consola, si que aquí pone 370 00:30:39,480 --> 00:30:40,980 hola mundo Daniel, vale 371 00:30:40,980 --> 00:30:43,299 os he dicho que estas 372 00:30:43,299 --> 00:30:44,900 operaciones 373 00:30:44,900 --> 00:30:47,779 se hacen para depurar 374 00:30:47,779 --> 00:30:49,619 errores de código, es decir, no es algo 375 00:30:49,619 --> 00:30:51,640 digamos que se va a ver en el juego, son instrucciones 376 00:30:51,640 --> 00:30:53,519 que la consola va a ir mostrando 377 00:30:53,519 --> 00:30:55,579 para ir viendo si se está ejecutando algo bien o no 378 00:30:55,579 --> 00:30:57,380 es de vital importancia este debug log 379 00:30:57,380 --> 00:31:00,579 Pues ya iréis viendo que es con lo que vamos a ir comprobando que todo funcione. 380 00:31:01,119 --> 00:31:08,180 Entonces, ahora mismo he puesto hola mundo Daniel, aquí podría poner hola Elisa. 381 00:31:08,180 --> 00:31:17,519 Yo si vuelvo a guardar y voy, cuando ejecute el juego, ojo, cuando me meto otra vez, si está el juego en ejecución, necesito volver a lanzarlo. 382 00:31:18,880 --> 00:31:20,720 Y ahora pone lo que le he dicho. 383 00:31:21,680 --> 00:31:25,200 Ya vamos viendo que hay cierta interacción. 384 00:31:25,200 --> 00:31:34,099 Vale, entonces, ya para entender que lo que hemos hecho en el Start significa que cuando empiece a ejecutarse el juego, se ve este Hola Elisa. 385 00:31:35,799 --> 00:31:41,500 Lo último que he hecho ha sido copiar ese debug log de Start a Update. 386 00:31:42,099 --> 00:31:51,819 Si yo ahora mismo ejecuto el juego, me meto aquí y le doy a Play, cuando arranca el juego vais a ver que Hola Elisa sale muchísimas veces. 387 00:31:51,819 --> 00:31:53,740 y aquí se van contando y me dice ya más de mil 388 00:31:53,740 --> 00:31:55,119 y ya no te hace la cuenta 389 00:31:55,119 --> 00:31:58,019 cuando yo paré el juego veréis que aquí hay 390 00:31:58,019 --> 00:31:59,799 un trillón de hola Elisa 391 00:31:59,799 --> 00:32:02,339 ¿por qué? porque esta instrucción 392 00:32:02,339 --> 00:32:03,880 que le he dado aquí de escríbeme 393 00:32:03,880 --> 00:32:05,759 en consola hola Elisa 394 00:32:05,759 --> 00:32:08,099 pues se ha ido ejecutando cada fotograma 395 00:32:08,099 --> 00:32:10,359 de juego ¿vale? fotograma 396 00:32:10,359 --> 00:32:12,059 dependiendo del 397 00:32:12,059 --> 00:32:13,420 ordenador, esto lo veréis 398 00:32:13,420 --> 00:32:16,099 en la próxima lección que 399 00:32:16,099 --> 00:32:17,900 abra, al final 400 00:32:17,900 --> 00:32:20,079 cada ordenador va a tener una capacidad 401 00:32:20,079 --> 00:32:22,240 de computación, según si el procesador 402 00:32:22,240 --> 00:32:23,000 es mejor o peor 403 00:32:23,000 --> 00:32:25,980 si es mejor o peor el ordenador 404 00:32:25,980 --> 00:32:28,039 pues va a poder procesar más fotogramas 405 00:32:28,039 --> 00:32:29,460 por segundo que otros 406 00:32:29,460 --> 00:32:32,019 dependiendo del ordenador ya veremos que esto puede 407 00:32:32,019 --> 00:32:32,859 suponer un problema 408 00:32:32,859 --> 00:32:35,500 porque unos ordenadores 409 00:32:35,500 --> 00:32:37,900 van a ser más rápidos a la hora de ir 410 00:32:37,900 --> 00:32:39,599 calculando más fotogramas que otros 411 00:32:39,599 --> 00:32:41,819 pero por defecto ya vemos 412 00:32:41,819 --> 00:32:44,140 que sea el ordenador que sea, esta instrucción 413 00:32:44,140 --> 00:32:46,000 de hola Elisa, cada fotograma 414 00:32:46,000 --> 00:32:48,140 que puede ir refrescando, pues danza la instrucción 415 00:32:48,140 --> 00:32:49,740 indiscriminadamente cada fotograma 416 00:32:49,740 --> 00:32:52,920 Cuando se meta, dice uno la elisa, uno la elisa, uno la elisa, ¿vale? 417 00:32:52,920 --> 00:32:56,680 Ya veis que hay dos momentos que vienen ya por defecto hechos en los códigos, 418 00:32:56,920 --> 00:33:03,559 que son este start para cuando arranca el script y otro para según en el momento que esté este script, pues se vaya ejecutando, ¿vale? 419 00:33:04,019 --> 00:33:11,279 Digo siempre lo de en el start cuando arranca el script porque si yo vuelvo a poner en el start el debug log, ¿vale? 420 00:33:11,279 --> 00:33:19,559 Y yo tengo aquí el juego, lo tengo dentro, el componente está dentro de este empty object que es cálculos, ¿no? 421 00:33:19,740 --> 00:33:41,940 Vale, yo, hay una opción aquí que sirve para activar y desactivar, que esto si lo probáis, pues, por ejemplo, con la nave, pues sirve para que se vea o no. Está ahí en la jerarquía, pero no está funcionando. Si yo lanzo el juego, ¿vale? Veis que no se ejecuta, a diferencia de antes, ¿vale? Está el start, pero es que como no se ha ejecutado el componente, dado que el objeto que lo contiene no existe, ¿vale? 422 00:33:41,940 --> 00:33:50,019 Cuando yo le dé a, de alguna forma que ya veremos, a que se ejecute este objeto, pues ahí sí, según se ejecuta, ¿vale? 423 00:33:50,019 --> 00:33:57,420 Por eso digo que el start no es el primer fotograma del juego, porque hasta que no se lance, digamos, el script, pues no funciona, ¿vale? 424 00:33:58,059 --> 00:33:58,460 Importante. 425 00:33:59,980 --> 00:34:03,119 Entonces, ya tenemos, voy a dejar que sí que esté activo, ¿vale? 426 00:34:03,500 --> 00:34:08,460 Importante, que a veces no es que no funcione, es que no está vinculado a nada, no está funcionando ese objeto, ¿no? 427 00:34:09,659 --> 00:34:11,519 Vamos otra vez aquí al código, ¿vale? 428 00:34:11,519 --> 00:34:13,780 Os he dicho este de backlog, hola Elisa. 429 00:34:14,280 --> 00:34:20,920 Yo ahora en vez de decirle una frase literal, por eso hay que poner las comillas cuando sean textos o strings, esto lo vamos viendo, 430 00:34:21,619 --> 00:34:25,440 hay que ponerlo entre comillas, yo voy a decirle, no, yo quiero que lo que muestre en consola, 431 00:34:25,440 --> 00:34:31,980 porque soy así de temerario, yo qué sé, es el resultado de 5 más 4, ¿vale? 432 00:34:32,099 --> 00:34:35,079 Una operación aritmética muy básica, ¿no? 433 00:34:35,079 --> 00:34:38,079 Yo cuando lance este juego 434 00:34:38,079 --> 00:34:39,920 Guardo, vale, y lance este juego 435 00:34:39,920 --> 00:34:41,320 Al arrancar 436 00:34:41,320 --> 00:34:43,300 Lo que me va a mostrar en la consola 437 00:34:43,300 --> 00:34:46,199 Dado que es lo que está dentro de estos paréntesis 438 00:34:46,199 --> 00:34:50,889 Va a ser un 9 439 00:34:50,889 --> 00:34:52,030 Lo veis aquí 440 00:34:52,030 --> 00:34:53,929 Que es el resultado de la suma 441 00:34:53,929 --> 00:34:56,869 Esto cuando vayamos teniendo 442 00:34:56,869 --> 00:34:59,289 Que una bala así te impacta, te quita 100 de vida 443 00:34:59,289 --> 00:35:01,269 Y lo resta 444 00:35:01,269 --> 00:35:02,929 De las 500, pues ya tendremos que ir 445 00:35:02,929 --> 00:35:04,090 Haciendo operaciones, entonces 446 00:35:04,090 --> 00:35:06,630 Esta operación tan básica es 447 00:35:06,630 --> 00:35:08,690 el origen de todo lo que vamos a ir haciendo 448 00:35:08,690 --> 00:35:09,949 con los juegos 449 00:35:09,949 --> 00:35:12,630 aunque aquí haya puesto los números 450 00:35:12,630 --> 00:35:14,809 rápidamente, como números 451 00:35:14,809 --> 00:35:16,730 sueltos, hay que entender 452 00:35:16,730 --> 00:35:18,889 un poco cómo gestiona la información 453 00:35:18,889 --> 00:35:20,170 el propio Unity 454 00:35:20,170 --> 00:35:22,309 me refiero con cómo gestiona la operación 455 00:35:22,309 --> 00:35:24,809 con que, aunque aquí pongamos 456 00:35:24,809 --> 00:35:25,889 un 5 y un 4 457 00:35:25,889 --> 00:35:28,289 hay distintos tipos de variables 458 00:35:28,289 --> 00:35:29,969 ya me meto a ello que he introducido 459 00:35:29,969 --> 00:35:32,570 según qué vamos a meter en esa variable 460 00:35:32,570 --> 00:35:34,510 voy a hacer 461 00:35:34,510 --> 00:35:36,349 primero una cosa para que lo veáis 462 00:35:36,349 --> 00:35:46,889 sin entenderlo y luego lo explico. Yo, por ejemplo, voy a generar un número de tipo entero, con número de tipo entero me refiero a un número que no tiene decimales, 463 00:35:47,030 --> 00:35:58,710 un número entero, que se va a llamar 5, ¿vale? Contesto. Y a esto le digo que es igual a 5. Ahora os digo qué es. Y luego voy a hacer otra variable llamada 4, 464 00:35:58,710 --> 00:36:01,150 que va a valer 4, ¿vale? 465 00:36:01,530 --> 00:36:06,750 Y aquí lo que voy a hacer es, en vez de decir 5 con número, 466 00:36:07,329 --> 00:36:10,269 voy a apelar a este 5 que he puesto aquí 467 00:36:10,269 --> 00:36:12,570 y a este 4 que tengo aquí. 468 00:36:12,889 --> 00:36:14,530 Y vais a ver que yo, cuando lo lance, 469 00:36:15,050 --> 00:36:16,730 lo he escrito con texto, ¿vale? 470 00:36:16,829 --> 00:36:21,090 Cuando lo lance, va a dar otra vez ese 9 que teníamos. 471 00:36:22,230 --> 00:36:23,530 Ahí está el 9, ¿vale? 472 00:36:23,650 --> 00:36:26,710 Pero esto no es porque el programa sepa 473 00:36:26,710 --> 00:36:31,250 que si escribe cinco contextos es un cinco como un número. 474 00:36:32,269 --> 00:36:35,250 Esto es porque anteriormente hemos declarado, 475 00:36:35,329 --> 00:36:36,949 y de hecho si yo borrara estas líneas, 476 00:36:37,309 --> 00:36:38,409 daría error, 477 00:36:39,590 --> 00:36:41,670 porque hemos creado lo que se llaman variables. 478 00:36:41,670 --> 00:36:46,090 Las variables son referencias de ciertos tipos, 479 00:36:46,630 --> 00:36:50,630 como cajas que vamos a ir usando para ir construyendo un Lego, 480 00:36:51,070 --> 00:36:53,030 que pueden ser de distintas formas. 481 00:36:53,630 --> 00:36:56,469 Entonces vamos a ir construyendo estas cajas 482 00:36:56,469 --> 00:37:08,550 de distintos tipos. En este caso estamos operando con números que son enteros, pero por ejemplo hay otro tipo de caja, otro tipo de variable, que son los que permiten 483 00:37:08,550 --> 00:37:20,570 operar con números decimales, que son estos de tipo float. Por ejemplo, esto se va a llamar 5 con 5. Vais viendo que cuando escribo el nombre de esta variable, 484 00:37:20,570 --> 00:37:34,969 ¿Vale? Lo primero que hacemos es decir qué tipo de caja o qué tipo de información va a guardar, porque yo, aunque aquí me ponga bruto, si le pongo 5,5, pues no lo sabe entender, porque esta caja solo permite guardar números enteros, ¿vale? 485 00:37:35,210 --> 00:37:48,530 Pero si yo pongo 5,5 y pongo aquí 5,5 y hay que poner una F, esto también lo veremos, aquí no da fallo, ¿vale? Aunque sea decir mal. Aquí, aunque pusiera lo mismo, 5,5F, pues nanay, ¿no? 486 00:37:48,530 --> 00:37:57,349 Entonces, ved que hay cajas variables de distintos tipos y cada una va a permitir guardar información de distintas características. 487 00:37:58,750 --> 00:38:09,449 La estructura de declarar una variable, es decir, de crear una caja o una pieza de Lego con la que vamos a seguir trabajando en el código, es siempre la misma. 488 00:38:09,449 --> 00:38:11,769 primero hay que poner de qué tipo es esa caja 489 00:38:11,769 --> 00:38:13,670 en este caso pues vamos a hacer 490 00:38:13,670 --> 00:38:16,010 como sé que voy a trabajar con un número entero 491 00:38:16,010 --> 00:38:17,670 pues pongo este int 492 00:38:17,670 --> 00:38:18,929 de integer, de entero 493 00:38:18,929 --> 00:38:21,170 y luego esa caja 494 00:38:21,170 --> 00:38:23,710 por hacer como una caja de mudanza el simil 495 00:38:23,710 --> 00:38:25,630 la voy a etiquetar para 496 00:38:25,630 --> 00:38:27,909 yo saber qué hay dentro y yo sé que aquí 497 00:38:27,909 --> 00:38:29,769 pues va a ser un 5 498 00:38:29,769 --> 00:38:31,789 ¿vale? este es el nombre que 499 00:38:31,789 --> 00:38:33,809 nosotros queramos, es el nombre que damos 500 00:38:33,809 --> 00:38:35,809 a esa pieza de lego con la que vamos a ir trabajando 501 00:38:35,809 --> 00:38:37,650 entonces yo en vez de 5 puede ser 502 00:38:37,650 --> 00:38:38,550 el número 503 00:38:38,550 --> 00:38:49,090 primero que vamos a usar, ¿vale? Y ese número primero, esa caja dentro va a tener lo que le asignemos después de este igual, que es un 5, ¿vale? 504 00:38:49,670 --> 00:39:00,309 Aquí, por ejemplo, creo otra caja, otra pieza, que se va a llamar número que suma. El nombre que queramos aquí es lo que queramos, también de tipo entero, 505 00:39:00,309 --> 00:39:01,869 y meto ahora un 3 506 00:39:01,869 --> 00:39:04,349 ¿vale? y cuando vaya generando 507 00:39:04,349 --> 00:39:06,449 estos números, veis que me da fallo 508 00:39:06,449 --> 00:39:08,329 porque las cajas que antes se llamaban 5 509 00:39:08,329 --> 00:39:10,389 y 4 ya no existen, ¿no? ahora habrá que 510 00:39:10,389 --> 00:39:12,409 trabajar con las cajas, digamos que 511 00:39:12,409 --> 00:39:14,449 yo he creado estas piezas y quiero 512 00:39:14,449 --> 00:39:16,369 que la suma la voy a hacerlo a partir de esas variables 513 00:39:16,369 --> 00:39:18,530 ahora tendré que poner, vale, pues 514 00:39:18,530 --> 00:39:20,590 el número primero de la operación 515 00:39:20,590 --> 00:39:22,570 y veis que cuando yo voy escribiendo 516 00:39:22,570 --> 00:39:24,090 el IntelliSense me va mostrando 517 00:39:24,090 --> 00:39:26,570 lo que coincida, si yo he creado esta variable 518 00:39:26,570 --> 00:39:28,690 y fijaos que incluso el iconito tiene forma de caja 519 00:39:28,690 --> 00:39:30,010 ¿vale? que es bastante 520 00:39:30,010 --> 00:39:35,570 representativo vale yo sí escribo ese número primero ahora mismo lo que yo 521 00:39:35,570 --> 00:39:39,670 ponga aquí con este nombre este identificador vale lo que le ha 522 00:39:39,670 --> 00:39:44,750 asignado vale ahora mismo aquí esto es sinónimo de 5 en este momento esta caja 523 00:39:44,750 --> 00:39:50,489 luego podremos ir cambiando la de contenido a lo largo del código no por 524 00:39:50,489 --> 00:39:56,070 ejemplo habrá algún momento que para adelantar que sea vida personaje vale y 525 00:39:56,070 --> 00:39:57,309 empiece valiendo 100 526 00:39:57,309 --> 00:39:59,949 lo que pasa es que nosotros a lo largo del juego 527 00:39:59,949 --> 00:40:02,250 a esta caja vida personaje le iremos 528 00:40:02,250 --> 00:40:03,650 quitando o añadiendo 529 00:40:03,650 --> 00:40:06,090 vida según reciba balas 530 00:40:06,090 --> 00:40:06,769 o vaya cogiendo 531 00:40:06,769 --> 00:40:10,130 power ups de corazón, de vida 532 00:40:10,130 --> 00:40:12,070 ¿vale? entonces esta 533 00:40:12,070 --> 00:40:13,969 sigue dando fallo porque 534 00:40:13,969 --> 00:40:16,130 ahora mismo esta caja no existe, no hay ninguna caja 535 00:40:16,130 --> 00:40:17,550 llamada así, pues por ejemplo 536 00:40:17,550 --> 00:40:19,829 número que suma, ¿vale? pues 537 00:40:19,829 --> 00:40:21,889 número primero si lo volviera a meter sería otro 5 538 00:40:21,889 --> 00:40:23,889 no, yo quiero número que suma, a ver 539 00:40:23,889 --> 00:40:25,190 le clico y ahí está 540 00:40:25,190 --> 00:40:27,969 Ahora mismo, si leemos esto, estamos diciendo 541 00:40:27,969 --> 00:40:30,050 Por favor, muéstrame en consola 542 00:40:30,050 --> 00:40:31,929 Número primero 543 00:40:31,929 --> 00:40:33,150 Más número que suma 544 00:40:33,150 --> 00:40:35,010 ¿Cuánto crees que va a dar de resultado? 545 00:40:37,639 --> 00:40:39,079 Venga, mientras voy 546 00:40:39,079 --> 00:40:44,079 8, ¿no? A ver, le doy al play 547 00:40:44,079 --> 00:40:46,119 Le doy al play 548 00:40:46,119 --> 00:40:47,280 Y 8, perfecto 549 00:40:47,280 --> 00:40:49,760 Y si ahora en vez de número que suma 550 00:40:49,760 --> 00:40:51,460 Aquí pongo 551 00:40:51,460 --> 00:40:53,300 Vida persona 552 00:40:53,300 --> 00:40:55,619 Que es otra caja que tengo 553 00:40:55,619 --> 00:40:56,320 ¿Cuánto valdría? 554 00:41:01,679 --> 00:41:03,940 105, ¿sí, no? ¿Estamos todos de acuerdo? 555 00:41:04,119 --> 00:41:09,019 A ver si lo que dice... 105, perfecto. 556 00:41:09,480 --> 00:41:14,800 Entonces vemos que al final, y esto si no le veis la utilidad se la iréis viendo rápidamente, 557 00:41:15,400 --> 00:41:21,840 iremos generando variables o palabras, digamos que van englobando datos dentro. 558 00:41:22,420 --> 00:41:26,780 Que ya os digo, que se irán actualizando a lo largo del juego cuando vayan ocurriendo ciertos eventos. 559 00:41:26,780 --> 00:41:49,599 ¿Vale? Veis también que cuando uso una de estas palabras, ¿vale? Cuando marco en un sitio, se me marcará en el resto de sitios que está apelando a un mismo, a un mismo, a la variable en ciertos puntos, ¿vale? Esto sirve para ir viendo fácilmente dónde se ha declarado, es decir, dónde se ha generado la caja y dónde estamos, pues, usándola. 560 00:41:49,599 --> 00:41:54,320 veis que hay un número hay variables que están marcadas de gris que eso significa que sí que 561 00:41:54,320 --> 00:41:59,559 esa caja existe pero no se usa en ningún momento si nunca se va a usar lo suyo sería borrarla vale 562 00:41:59,559 --> 00:42:05,380 de hecho si voy a algunos de los errores en este momento que hay aquí vale cuando detengo la a ver 563 00:42:05,380 --> 00:42:11,039 cuando detengo la ejecución me puede sugerir a veces ahora no me lo está haciendo porque tengo 564 00:42:11,039 --> 00:42:19,039 que cambiar algo, voy a poner 105, yo que sé, ¿vale? Cuando ahora vuelva a refrescar 565 00:42:19,039 --> 00:42:26,239 vais a ver que por defecto en la consola, a ver, a veces tarda un poco, bueno, venga, 566 00:42:26,239 --> 00:42:33,719 ¿vale? Entre los errores es en cálculo 5 la variable 5.5 está asignada pero su valor 567 00:42:33,719 --> 00:42:39,480 nunca se usa, ¿vale? Pues eso significa que 5.5 está aquí pero nunca se usa. Veis que 568 00:42:39,480 --> 00:42:44,159 es un error que va a funcionar el juego pero dice oye borra esta línea si no la 569 00:42:44,159 --> 00:42:47,360 vas a usar para que vas a llenar tu habitación de cajas si no lo vas a usar 570 00:42:47,360 --> 00:42:52,599 aparte de números enteros y decimales vale y los decimales se escriben con un 571 00:42:52,599 --> 00:42:56,860 punto en vez de con una coma vale y hay que poner una f de flow at vale porque 572 00:42:56,860 --> 00:43:01,159 si no no sabes si se está refiriendo a un número decimal o otras cosas vale si 573 00:43:01,159 --> 00:43:07,440 no ponéis la f aunque permita tener 55 yo le doy a la f y no y no funciona y 574 00:43:07,440 --> 00:43:16,219 Y ojo, si yo pongo número primero y 5,5, ¿vale? Ahora estoy juntando cajas de distinto tipo. 575 00:43:16,960 --> 00:43:29,559 ¿Qué debería la lógica decir que nos da como resultado? Vamos a verlo. 10,5 dicen por ahí. 576 00:43:31,849 --> 00:43:37,030 Por cierto, cuando tenemos todos los errores estos que nos pueden salir, si damos a Clear, lo limpiamos, ¿vale? 577 00:43:37,030 --> 00:43:40,670 Ya sabemos lo que queremos para al volver a ejecutar, pues que se generen los que tienen que ser. 578 00:43:40,670 --> 00:43:56,210 10,5, perfecto, ¿vale? Entonces los decimales los va cogiendo, pero cuando vayáis introduciendo un dato decimal siempre con punto y con F detrás, ¿vale? Si no, no lo lee, si no da fallo, ¿vale? Simplemente eso. 579 00:43:56,210 --> 00:44:08,469 Hay más tipos de cajas. Otra muy importante, que es el string. Las cajas, las variables de tipo string. La variable de tipo string lo que contiene son textos, ¿vale? No son números con los que operar, son textos. 580 00:44:08,469 --> 00:44:11,050 la lógica de declarar una variable es siempre 581 00:44:11,050 --> 00:44:13,150 el tipo de variable, en este caso vamos a decir 582 00:44:13,150 --> 00:44:14,690 el dato que voy a guardar aquí es 583 00:44:14,690 --> 00:44:17,070 una cadena de texto, es un texto 584 00:44:17,070 --> 00:44:19,030 ¿no? y lo voy a llamar pues cadena 585 00:44:19,030 --> 00:44:20,449 de texto o yo que sé 586 00:44:20,449 --> 00:44:22,210 mi nombre ¿vale? 587 00:44:22,670 --> 00:44:25,010 y entonces al darle igual ¿vale? 588 00:44:25,070 --> 00:44:27,030 y quiero que vayáis interpretando estos iguales 589 00:44:27,030 --> 00:44:29,190 no como un igual en matemáticas de 2 más 2 590 00:44:29,190 --> 00:44:30,730 igual a 4, esto 591 00:44:30,730 --> 00:44:32,989 significa que se está asignando 592 00:44:32,989 --> 00:44:33,849 un valor ¿vale? 593 00:44:34,630 --> 00:44:36,789 o lo que se llama el término más correcto sería 594 00:44:36,789 --> 00:44:38,809 inicializar en este caso el valor 595 00:44:38,809 --> 00:44:40,809 que es que una caja que está vacía 596 00:44:40,809 --> 00:44:42,789 está aquí, de pronto la vamos a poner un algo 597 00:44:42,789 --> 00:44:44,570 no estás comparando nada, ni es 598 00:44:44,570 --> 00:44:46,929 equivalente una cosa a otra 599 00:44:46,929 --> 00:44:48,250 sí lo es, pero es 600 00:44:48,250 --> 00:44:50,630 que esto que está aquí a la izquierda 601 00:44:50,630 --> 00:44:51,889 pasa a tener este valor, ¿no? 602 00:44:52,510 --> 00:44:54,530 y aquí, si yo pusiera un número, ¿vale? 603 00:44:54,750 --> 00:44:56,710 y mirad que yo todas las operaciones las acabo 604 00:44:56,710 --> 00:44:58,730 cuando acaba la instrucción con un punto y coma, como os he 605 00:44:58,730 --> 00:45:00,690 dicho antes, ¿vale? importante, porque si no 606 00:45:00,690 --> 00:45:02,110 se empiezan a juntar conceptos 607 00:45:02,110 --> 00:45:04,070 y empieza a dar problema, ¿no? 608 00:45:04,610 --> 00:45:06,550 entonces, veis que yo aquí pongo un 5 y dice 609 00:45:06,550 --> 00:45:08,489 error, porque esta caja no está pensada para 610 00:45:08,489 --> 00:45:10,670 números, ¿vale? Para meter texto 611 00:45:10,670 --> 00:45:12,389 cuando algo queremos que sea un texto literal 612 00:45:12,389 --> 00:45:14,530 como hemos hecho antes con el hola mundo, hay que 613 00:45:14,530 --> 00:45:16,469 abrir comillas, ¿vale? Las comillas 614 00:45:16,469 --> 00:45:18,429 típicas de 615 00:45:18,429 --> 00:45:20,530 entrecomillar, ¿no? Y aquí 616 00:45:20,530 --> 00:45:22,409 se puede poner, vale, pues en mi caso, Daniel 617 00:45:22,409 --> 00:45:24,690 ¿vale? Y ahí se ha guardado 618 00:45:24,690 --> 00:45:25,090 un texto 619 00:45:25,090 --> 00:45:28,469 Si yo pongo ahora 620 00:45:28,469 --> 00:45:28,889 mismo 621 00:45:28,889 --> 00:45:34,420 a ver, por ejemplo 622 00:45:34,420 --> 00:45:37,739 voy a hacer una frase 623 00:45:37,739 --> 00:45:40,400 digamos compuesta de varias variables 624 00:45:40,400 --> 00:45:42,460 para que veáis que se puede ir modulando todo 625 00:45:42,460 --> 00:45:43,920 modularizando mejor dicho 626 00:45:43,920 --> 00:45:46,099 voy a generar un string 627 00:45:46,099 --> 00:45:47,760 que guarda mi nombre 628 00:45:47,760 --> 00:45:50,300 otra caja que guarda 629 00:45:50,300 --> 00:45:52,699 la frase que construye 630 00:45:52,699 --> 00:45:54,480 o el predicado 631 00:45:54,480 --> 00:45:55,699 que va a ser 632 00:45:55,699 --> 00:45:57,980 tiene 633 00:45:57,980 --> 00:46:01,539 vale 634 00:46:01,539 --> 00:46:02,960 tiene 635 00:46:02,960 --> 00:46:05,380 tiene de edad 636 00:46:05,380 --> 00:46:14,599 Y luego al final voy a poner otra variable, que en este caso es un número, porque va a ser mi edad, que son 34. 637 00:46:15,219 --> 00:46:19,599 Entonces yo puedo ir combinando estas cajas para que vaya componiendo texto. 638 00:46:19,760 --> 00:46:27,320 Si yo por ejemplo aquí dijera, enseñan el debug log solo mi nombre, pues lo que va a enseñar la consola es mi nombre, que es Daniel. 639 00:46:27,800 --> 00:46:34,179 En vez de haber escrito literalmente aquí, está referenciando a una variable para enseñarnos lo que hay en el interior de esa variable. 640 00:46:34,179 --> 00:46:40,380 Yo si ahora voy a la consola y le doy a iniciar, pues pone Daniel. 641 00:46:41,840 --> 00:46:49,500 Así que lo que podemos ver es que podemos ir concatenando distintas variables para hacer elementos más grandes. 642 00:46:49,920 --> 00:46:56,300 Igual que antes hemos sumado dos variables que contenían dentro un número, también podemos ir concatenando textos. 643 00:46:56,820 --> 00:47:02,460 Por ejemplo, puedo poner mi nombre, más, y este más no es que estemos sumando números. 644 00:47:02,460 --> 00:47:30,559 Cuando se usa el más al usar textos, lo que estamos haciendo es que un texto va detrás de otro, ¿vale? Entonces yo puedo poner mi nombre, luego el predicado. Ahora lo que va a mostrar es lo que hay, Daniel, ¿no? Y a continuación tiene edad. Este más no es para sumar números, es para unir, ¿no? Entonces vais a ver que lo que pone es Daniel tiene edad. 645 00:47:30,559 --> 00:47:45,340 Y fijaos que no deja ningún espacio en medio entre Daniel y tiene. ¿Por qué? Pues porque básicamente no sabe que hay un espacio entre esta cadena de caracteres y esta, ¿vale? Si la queremos, como es literal, meto un espacio y ahora sí, ahora sí que va a haber ese espacio. 646 00:47:45,340 --> 00:48:04,940 Ved que lo que hay entre comillas es literalmente lo que vamos escribiendo dentro, ¿vale? Entonces ahora sí que vais a ver que, le damos aquí y pone Daniel tiene edad, ¿vale? Y ahora puedo decir, ¿vale? Y aparte de Daniel tiene edad, ¿vale? Que son bloques que yo puedo en cualquier momento ir cambiando, ¿vale? 647 00:48:04,940 --> 00:48:28,199 Ahora lo que va a guardar esta variable es tiene de años, perdón que la frase sea un poco extraña, pero es para construirlo más fácil, tiene de años y aquí voy a poner edad, que es esta variable, que veis que ahora es una variable de tipo número, y además es de tipo número float, lo cual no es muy correcto si no voy a meter decimales, y normalmente la edad no se mete con decimales, tienes 34 años o 35, no tienes 34 y medio, o no se suele guardar así. 648 00:48:28,199 --> 00:48:39,400 Por tanto, al hacer esta caja, si la edad siempre va a ser número entero, pues lo ponemos aquí de tipo entero, ¿vale? Sin ningún problema, pero hay ciertas limitaciones si no vamos usando los tipos de variables que hay que usar. 649 00:48:39,519 --> 00:48:57,980 Ahora mismo lo que va a hacer es poner Daniel, ¿vale? Espacio, por este espacio que he puesto aquí, no porque haya aquí en medio, ¿vale? Esto es lo mismo que escribirlo así. Los espacios en programación son solo visuales, ¿vale? Al final lo que importa son los valores que vamos dando dentro. 650 00:48:57,980 --> 00:49:13,480 Entonces, esto va a decir, Daniel tiene de años 34. Aquí, aunque no sea de tipo texto, como entiende que un número, si se está concatenando, porque está aquí unido a textos, lo que vas a querer ver es el texto también, ¿no? 651 00:49:13,480 --> 00:49:37,980 Y entonces al final lo que voy a hacer es, aparte sin meterlo en variable, poner años y punto, ¿vale? Es decir, va a poner Daniel tiene de años 34 y valga la redundancia años punto. Y ojo, aquí habrá que poner un espacio para que se pare de la anterior palabra y en años también habrá que poner uno para que se pare de la edad, ¿vale? Para que se vea con espacio. 652 00:49:37,980 --> 00:49:46,119 va bien construido no guardamos y a ver que a ver si es verdad que está poniendo lo que yo digo que 653 00:49:46,119 --> 00:49:52,460 va a poner daniel tiene de edad de años bueno que cambia lo de edad no habéis visto que cambia el 654 00:49:52,460 --> 00:49:58,659 interior de la variable antes a mano 34 años vale de esta forma podemos ir uniendo distintos 655 00:49:58,659 --> 00:50:05,780 elementos de distintos tipos entonces importante al declarar una variable el tipo de variable el 656 00:50:05,780 --> 00:50:10,760 nombre de la variable que nosotros queramos darle y luego asignamos el valor que tiene 657 00:50:10,760 --> 00:50:17,280 esa caja. Lo que pasa es que muchas veces, cuando vamos creando estas variables, y voy 658 00:50:17,280 --> 00:50:24,019 quitando aquí, lo dejo solo en esto, en su mínima expresión. Has creado la caja, pero 659 00:50:24,019 --> 00:50:29,460 no la has llenado de nada. Cuando no llenas la caja de nada, interpreta en los números 660 00:50:29,460 --> 00:50:50,340 Que es un cero, ¿vale? Que está vacía, pero a nivel práctico es un cero, ¿vale? Y en los textos, pues no tiene texto también. Lo interpreta como un cero. Y en los de tipo float también es un cero, ¿vale? Podemos ir creando las cajas, ¿vale? Y posteriormente, en algún momento de la ejecución, que a lo mejor no es al principio, cambiar su valor. 661 00:50:50,340 --> 00:51:16,380 Por ejemplo, hemos dicho, y fijaos que esto está dentro de la clase, que es lo que os he dicho, que es el patrón que va conteniendo todos los comportamientos que vayamos haciendo, pero luego hasta que no hay un momento concreto al comienzo o al actualizar, estos son como datos, como variables que estamos creando a nivel genérico, pero hasta que no sea en el momento del comienzo o que esté dentro del update, realmente no se está ejecutando nunca. 662 00:51:16,380 --> 00:51:45,599 ¿Vale? Más rápido. Si yo cogiera este debug log y lo pusiera aquí, va a dar fallo. Pues dice, sí, muy bien, depura, pero ¿cuándo? ¿Cuándo depuro? Esta instrucción no es crear una caja para luego usarla, es algo concreto, que es lo que os he dicho que son los métodos cuando se usa estos paréntesis. Una acción, algo concreto, se hace cuando apelamos a algo que tiene estos paréntesis. Aquí dice, vale, yo hago lo que tú me digas, pero ¿en qué momento? No me estás definiendo ningún momento. Por eso tiene que ir dentro de algún bloque de momento de ejecución. ¿Vale? 663 00:51:45,599 --> 00:52:01,599 Y también lo que podemos hacer es decirle, al iniciar el juego, el script, quiero que número primero, ¿vale? Esta variable que he generado aquí valga 7, ¿vale? 664 00:52:02,219 --> 00:52:13,079 Y aquí ¿qué ha pasado? Y voy a volver a decirle que lo que quiero que me enseñe es número primero. Y veis que la misma palabra yo cuando la marco en un sitio, como es la misma caja nombrada igual, aparece en varios sitios. 665 00:52:13,079 --> 00:52:15,679 esto que estoy haciendo, aquí he declarado 666 00:52:15,679 --> 00:52:18,179 he creado la caja, he declarado la variable 667 00:52:18,179 --> 00:52:21,639 al principio está vacía, vale 0 668 00:52:21,639 --> 00:52:23,780 pero al empezar el juego yo le he dicho 669 00:52:23,780 --> 00:52:25,480 yo quiero que esta caja valga 7 670 00:52:25,480 --> 00:52:27,380 y imprime aquí 671 00:52:27,380 --> 00:52:31,480 lo que hay dentro del número primero, la consola 672 00:52:31,480 --> 00:52:34,039 por tanto, lo que vamos a tener ahora es 673 00:52:34,039 --> 00:52:37,219 pues si lo adivináis 674 00:52:37,219 --> 00:52:39,679 un 7 675 00:52:39,679 --> 00:52:44,340 ¿qué pasa? que esto a lo largo del juego 676 00:52:44,340 --> 00:52:46,920 vamos a irlo cambiando, ¿no? Fijaos que 677 00:52:46,920 --> 00:52:48,980 cuando yo ya he declarado la variable y he dicho 678 00:52:48,980 --> 00:52:50,940 de qué tipo es esa caja, ¿vale? 679 00:52:51,280 --> 00:52:52,960 Ya cada vez que hablemos de esa caja 680 00:52:52,960 --> 00:52:54,699 ya no hace falta poner de qué tipo es. 681 00:52:54,840 --> 00:52:56,840 Ya lo hemos generado aquí al principio, ¿vale? 682 00:52:57,159 --> 00:52:58,840 Veis que por eso ya nunca más 683 00:52:58,840 --> 00:53:00,800 vuelve a poner el tipo de variable. Solo se 684 00:53:00,800 --> 00:53:02,760 habla de la variable y se puede asignar 685 00:53:02,760 --> 00:53:04,719 a continuación o usarla, 686 00:53:04,860 --> 00:53:06,699 pero no hay que volver a declararla. Eso se hace 687 00:53:06,699 --> 00:53:08,800 una vez. Declarar, de hecho, 688 00:53:09,039 --> 00:53:10,800 es crear esa caja 689 00:53:10,800 --> 00:53:12,780 la primera vez. Luego ya es emplear 690 00:53:12,780 --> 00:53:19,739 la variable. Entonces, ahora mismo enseña 7, pero algo importante es que, por defecto, 691 00:53:19,800 --> 00:53:25,460 en estos momentos que estamos de programación, el código se va a ir ejecutando de manera 692 00:53:25,460 --> 00:53:29,059 lineal, es decir, de arriba a abajo, igual que leemos nosotros, de arriba a abajo y de 693 00:53:29,059 --> 00:53:34,420 izquierda a derecha. Entonces, cuando vamos bajando, hemos declarado esta variable de 694 00:53:34,420 --> 00:53:39,780 tipo entero, vamos bajando, va bajando y dice, ah, vale, al empezar la ejecución, enséñame 695 00:53:39,780 --> 00:53:42,139 lo que haya en número primero. Y luego aparte 696 00:53:42,139 --> 00:53:44,079 pues decimos, vale, número primero vale 697 00:53:44,079 --> 00:53:46,219 7. Antes 698 00:53:46,219 --> 00:53:48,000 ponía que era 7. Ahora, ¿qué va a poner? 699 00:53:48,159 --> 00:53:50,099 ¿Qué va a enseñar en consola? 700 00:53:50,179 --> 00:53:52,099 ¿Qué número? ¿Ha cambiado 701 00:53:52,099 --> 00:53:52,619 algo o no? 702 00:53:53,860 --> 00:53:55,219 ¿Crees que ha pasado algo? 703 00:53:55,780 --> 00:53:57,780 Nada. No va a poner nada porque está 704 00:53:57,780 --> 00:53:59,639 debajo, ¿no? Eso es. 705 00:53:59,960 --> 00:54:02,199 Hasta este momento, ¿vale? La variable 706 00:54:02,199 --> 00:54:04,099 vale 0. Nadie ha cambiado 707 00:54:04,099 --> 00:54:05,679 que valga 0, que es el valor por defecto. 708 00:54:06,000 --> 00:54:07,719 Y luego ya más adelante, pues pondrá 7. 709 00:54:07,719 --> 00:54:13,300 Entonces, si vamos aquí ahora mismo y ejecuto, pues pone el 0 como una casa. 710 00:54:13,619 --> 00:54:17,840 ¿Veis que si es solo una línea, además, también nos la enseña aquí, que a veces también puede servir de ayuda. 711 00:54:19,480 --> 00:54:29,079 Esto sirve para ver el orden de ejecución y que aquí podemos empezar a decir, inicializar y decir, número primero vale 2. 712 00:54:30,099 --> 00:54:35,920 Pero después de valer 2, número primero vale 4. 713 00:54:35,920 --> 00:54:37,699 se ejecuta esto 714 00:54:37,699 --> 00:54:40,400 y cuidado que si no acabamos la instrucción con punto y coma 715 00:54:40,400 --> 00:54:42,219 luego número primero vale 7 716 00:54:42,219 --> 00:54:43,880 y luego voy a hacer un debug log 717 00:54:43,880 --> 00:54:44,840 de 718 00:54:44,840 --> 00:54:49,099 de 719 00:54:49,099 --> 00:54:51,099 vida persona 720 00:54:51,099 --> 00:54:53,980 vale, ahora mismo 721 00:54:53,980 --> 00:54:56,880 ¿qué va a mostrar? 722 00:54:58,099 --> 00:55:00,119 ¿qué pensáis que va a salir en la consola? 723 00:55:03,409 --> 00:55:03,949 ¿el 4? 724 00:55:05,389 --> 00:55:05,909 sí 725 00:55:05,909 --> 00:55:08,389 pero he puesto 726 00:55:08,389 --> 00:55:10,329 otro de backlog, otro enséame en la consola 727 00:55:10,329 --> 00:55:12,269 pues lo suma 728 00:55:12,269 --> 00:55:14,190 no, es decir 729 00:55:14,190 --> 00:55:16,010 eso es lo que ha puesto Roberto 730 00:55:16,010 --> 00:55:18,530 primero hace esta instrucción y me enseña 731 00:55:18,530 --> 00:55:20,449 va bajando, va bajando, aquí es lo último 732 00:55:20,449 --> 00:55:21,769 que le hemos dicho que vale este 733 00:55:21,769 --> 00:55:24,469 este número primero, vale, pues aquí enseñará un 4 734 00:55:24,469 --> 00:55:26,449 seguimos bajando, vale, si a partir 735 00:55:26,449 --> 00:55:28,449 de aquí volvemos a usar el número primero, valdrá 7 736 00:55:28,449 --> 00:55:30,510 pero bueno, aquí va a enseñar 4, aquí hemos 737 00:55:30,510 --> 00:55:32,250 dicho enseña 4, sigue bajando, bla bla 738 00:55:32,250 --> 00:55:34,469 y dice, y aquí voy a enseñar vida 739 00:55:34,469 --> 00:55:36,269 persona, que además ahora mismo 740 00:55:36,269 --> 00:55:38,150 vale 0, entonces 741 00:55:38,150 --> 00:55:56,269 Entonces, Roberto, te has equivocado en esto segundo porque el 7 lo enseñaría si aquí pusiera número primero, pero es que estoy pidiéndole que me enseñe vida persona, que está vacía, ¿vale? Lo enseño. Es decir, el juego no va a consistir solo en que enseñe una cosa, va a enseñar o va a realizar muchas operaciones. 742 00:55:56,269 --> 00:56:11,269 Entonces, bueno, os lo enseño y vais a ver que primero sale ese 4 y luego ese 0, ¿vale? Y una se ejecuta primero y luego la siguiente. Os he dicho antes que las operaciones, lo haz algo, son normalmente palabras con paréntesis. 743 00:56:11,269 --> 00:56:15,110 paréntesis entre paréntesis puede haber cosas o no vale pues aquí al empezar el 744 00:56:15,110 --> 00:56:19,090 juego vale le hemos dicho enséñame lo que valga número primero que vale 4 y 745 00:56:19,090 --> 00:56:25,829 aquí lo que valga vida persona que está aquí vacía si yo vida persona 746 00:56:25,829 --> 00:56:31,750 vale vida persona aquí vale 85 747 00:56:31,750 --> 00:56:40,820 vale que va a poner ahora en consola nada porque está por debajo pero es 748 00:56:40,820 --> 00:56:43,019 Es decir, la consola va a mostrar primero 4, ¿no? 749 00:56:43,800 --> 00:56:45,420 Y luego 0. 750 00:56:47,039 --> 00:56:47,199 Vale. 751 00:56:47,679 --> 00:56:48,639 Si yo pusiera... 752 00:56:48,639 --> 00:56:50,179 Esto es para ver que pilláis la lógica, vamos, 753 00:56:50,340 --> 00:56:51,780 que sé que son preguntas simples. 754 00:56:52,239 --> 00:56:52,860 ¿Ahora qué pondría? 755 00:56:54,989 --> 00:56:55,429 85. 756 00:56:56,650 --> 00:56:58,429 En la segunda línea, primero 4 y luego 85. 757 00:56:58,429 --> 00:56:59,050 4 y luego 85. 758 00:56:59,150 --> 00:56:59,309 Vale. 759 00:56:59,650 --> 00:57:00,570 Lo vais entendiendo, ¿no? 760 00:57:00,730 --> 00:57:01,170 Básicamente. 761 00:57:01,710 --> 00:57:03,010 Que puede haber varias operaciones 762 00:57:03,010 --> 00:57:04,449 y aquí se están ejecutando dos. 763 00:57:05,230 --> 00:57:05,409 ¿Vale? 764 00:57:05,429 --> 00:57:07,190 Entonces el orden de ejecución 765 00:57:07,190 --> 00:57:12,429 está en relación a las líneas que se van leyendo, ¿vale? 766 00:57:13,050 --> 00:57:13,969 Hasta aquí bien. 767 00:57:14,489 --> 00:57:19,250 Recordad que luego se nos puede ir un poco la pinza con, vale, 768 00:57:19,650 --> 00:57:22,969 vida persona vale 85, pero aquí quiero que me lo enseñe más, 769 00:57:23,510 --> 00:57:27,329 número primero, ¿vale? 770 00:57:27,889 --> 00:57:30,449 Y aquí ahora mismo, ya última que hago de esto, perdonad, 771 00:57:30,449 --> 00:57:32,269 ¿qué pondría aquí en la segunda línea? 772 00:57:32,550 --> 00:57:34,610 La segunda instrucción que le he dado al arrancar. 773 00:57:34,789 --> 00:57:35,269 89. 774 00:57:37,190 --> 00:57:38,369 4,89, ¿no? 775 00:57:38,650 --> 00:57:38,929 No. 776 00:57:41,739 --> 00:57:43,500 No, 92. 777 00:57:44,179 --> 00:57:44,619 Efectivamente. 778 00:57:45,179 --> 00:57:49,579 Porque aunque aquí ponga número primero, en este punto que estamos ya ha superado esto 779 00:57:49,579 --> 00:57:51,920 y ha cambiado de valor lo que hay dentro de la caja, ¿no? 780 00:57:52,920 --> 00:57:56,460 Esto es lo que va a ir permitiendo luego tener en cuenta que hay operaciones 781 00:57:56,460 --> 00:58:01,119 que se van a ir haciendo fotograma a fotograma, que vayamos actualizando, subiendo, bajando cifras, 782 00:58:01,260 --> 00:58:07,920 que al final son la vida, el tiempo de carga, el nombre del jugador que hemos metido en un campo. 783 00:58:07,920 --> 00:58:10,900 se va a ir actualizando a medida que vayamos 784 00:58:10,900 --> 00:58:12,579 haciendo ciertas operaciones 785 00:58:12,579 --> 00:58:13,960 esto es un poco 786 00:58:13,960 --> 00:58:16,619 la base de todo 787 00:58:16,619 --> 00:58:17,219 vale 788 00:58:17,219 --> 00:58:20,960 una duda Daniel, para el ejercicio 789 00:58:20,960 --> 00:58:22,679 de la unidad 0 entonces sería 790 00:58:22,679 --> 00:58:24,119 mejor declarar las vidas 791 00:58:24,119 --> 00:58:26,679 sin asignarle un valor y luego 792 00:58:26,679 --> 00:58:28,639 tú irle asignando los valores dependiendo 793 00:58:28,639 --> 00:58:30,420 de si le afecta la bala o no 794 00:58:30,420 --> 00:58:32,280 es mucho más cómodo eso 795 00:58:32,280 --> 00:58:34,780 poniendo que restas o que sumas 796 00:58:34,780 --> 00:58:36,920 claro, tú declaras esa bala 797 00:58:36,920 --> 00:58:39,139 y luego tendrás que ir sumando o restando daño. 798 00:58:39,280 --> 00:58:43,659 Y daño puede ser un número ya establecido o uno aleatorio, 799 00:58:43,739 --> 00:58:45,420 que también se pueden hacer números aleatorios. 800 00:58:47,280 --> 00:58:47,760 Variables. 801 00:58:47,840 --> 00:58:50,519 El concepto de variables ya vais viendo que es referenciar valores 802 00:58:50,519 --> 00:58:53,820 para moverlos por el código en distintos momentos. 803 00:58:54,280 --> 00:58:55,500 En esencia es eso. 804 00:58:56,599 --> 00:58:58,340 Esto se va complicando, por supuesto. 805 00:58:58,900 --> 00:59:00,119 Vamos a la tarea 1, ¿vale? 806 00:59:00,380 --> 00:59:01,900 Después de hacer ese prefab de la nave, 807 00:59:02,019 --> 00:59:05,159 que en principio no había mayor problema ya, 808 00:59:05,159 --> 00:59:10,320 Quien lo haya intentado le da alguna pista de algo que puede fallar, pero en principio es tener esa nave. 809 00:59:11,099 --> 00:59:17,780 Lo segundo que pide es instanciar la nave. Instanciar más allá, que evidentemente sí vamos a usar variables, por eso lo has explicado. 810 00:59:18,219 --> 00:59:25,559 Lo que vamos a hacer es una operación, que es, ya esto lo pone en el tema, que es hacer una operación que es instanciar el objeto por código. 811 00:59:26,539 --> 00:59:33,280 Para eso se usa, al arrancar el juego, se puede poner aquí la operación Instantiate, de todas las que hay. 812 00:59:33,280 --> 00:59:41,340 vais a ver que IntelliSense también nos va dando distintos iconitos, ya iré explicando mejor qué es cada cosa, ¿vale? 813 00:59:41,460 --> 00:59:49,219 Pero en este caso, por ejemplo, es de un método o una función. Método y función, si lo iréis escuchando mucho, son sinónimos. 814 00:59:49,360 --> 00:59:57,539 A veces diré métodos y a veces diré función, ¿vale? Y cuando me pongo encima vais a ver que IntelliSense, 815 00:59:57,539 --> 01:00:03,059 cuando me voy poniendo con la selección de la palabra, nos da más ayudas aquí, nos da muchas ayudas siempre, ¿vale? 816 01:00:03,059 --> 01:00:05,639 Aquí ahora mismo nos dice 817 01:00:05,639 --> 01:00:07,280 Instance, ahí va, bueno, espera 818 01:00:07,280 --> 01:00:09,780 Instance, cuando a veces 819 01:00:09,780 --> 01:00:11,699 No salga, empezad a escribirlo otra vez 820 01:00:11,699 --> 01:00:13,559 Porque si no se pierde, os ponéis encima 821 01:00:13,559 --> 01:00:15,840 Y pone Instance8 822 01:00:15,840 --> 01:00:17,760 ¿Vale? Pone como cosas que está heredando 823 01:00:17,760 --> 01:00:19,639 De estas librerías que os he dicho que había aquí arriba 824 01:00:19,639 --> 01:00:21,380 ¿Vale? Y vamos hasta la palabra Instance8 825 01:00:21,380 --> 01:00:22,619 Y dentro de paréntesis 826 01:00:22,619 --> 01:00:24,960 Pasan cosas, ¿vale? 827 01:00:25,179 --> 01:00:27,719 Y pone más cuatro sobrecargas, ahora vemos que es eso 828 01:00:27,719 --> 01:00:29,559 Os he dicho, cuando hay 829 01:00:29,559 --> 01:00:31,500 Algo que lleva una palabra 830 01:00:31,500 --> 01:00:33,659 y luego unos paréntesis 831 01:00:33,659 --> 01:00:35,619 como aquí el start, es una acción 832 01:00:35,619 --> 01:00:37,760 en este caso start es al arrancar 833 01:00:37,760 --> 01:00:39,059 lo que tengas dentro del bloque 834 01:00:39,059 --> 01:00:41,659 ahora vamos a hacer una, que esto son cosas 835 01:00:41,659 --> 01:00:42,380 que tenemos que ir aprendiendo 836 01:00:42,380 --> 01:00:45,619 al arrancar, dentro 837 01:00:45,619 --> 01:00:47,440 voy a instanciar un objeto 838 01:00:47,440 --> 01:00:49,699 ¿vale? de momento me da 839 01:00:49,699 --> 01:00:51,539 fallo porque es verdad que esta operación a diferencia 840 01:00:51,539 --> 01:00:53,460 de la de start, hasta que por ejemplo 841 01:00:53,460 --> 01:00:55,679 no le dices que objeto, no sabe que hacer 842 01:00:55,679 --> 01:00:57,159 y cuando no sabe que hacer, estos 843 01:00:57,159 --> 01:00:59,559 programas se vuelven muy locos y te dan 844 01:00:59,559 --> 01:01:03,880 error y dice mira yo hasta que no me digas que tengo que hacer pues no me voy a ejecutar entonces 845 01:01:03,880 --> 01:01:11,079 cuando abrimos llave una vez ya hemos puesto por completo la instrucción en el debate lo vuelvo 846 01:01:11,079 --> 01:01:16,320 un segundo al debate vale hemos dicho es la clase de bach que dentro tiene la operación log al dar 847 01:01:16,320 --> 01:01:24,139 a los yo sé que es una operación que debe tener una paréntesis para en este caso en esta operación 848 01:01:24,139 --> 01:01:28,820 definir qué tiene que mostrar el mensaje no y vais a ver que a veces salen aquí 849 01:01:28,820 --> 01:01:35,539 en el desplegable dos flechitas vale una misma operación una misma palabra que 850 01:01:35,539 --> 01:01:41,659 esconde detrás operaciones puede variar en el contenido de estos paréntesis vale 851 01:01:41,659 --> 01:01:45,780 de backlog puede como hemos hecho hasta ahora solo mostrar un mensaje lo que 852 01:01:45,780 --> 01:01:50,340 pongamos ahí como mensaje y fijaos que como nos va enseñando 853 01:01:50,340 --> 01:01:54,840 Lo que tiene que ir dentro tiene la misma lógica que cuando hemos declarado la variable. 854 01:01:55,199 --> 01:02:00,559 Primero te dirá qué tipo de variable o de objeto tiene que tener dentro 855 01:02:00,559 --> 01:02:07,860 y luego cómo ha llamado el software, el código, a ese mensaje. 856 01:02:08,059 --> 01:02:10,840 Es decir, ahora mismo en el debug log que hemos hecho hasta ahora, 857 01:02:11,340 --> 01:02:15,300 está diciendo que dentro tiene que haber un elemento de tipo objeto, 858 01:02:15,300 --> 01:02:18,940 que dentro de Unity querría decir cualquier tipo de variable, 859 01:02:18,940 --> 01:02:25,500 Y aquí ha puesto un nombre, igual que hacíamos nosotros, genérico, que lo ha puesto el programador para que sepamos que lo que hay que meter es el mensaje. 860 01:02:25,679 --> 01:02:29,960 Esto no significa nada, simplemente que nos está dando la ayuda de que es un mensaje. 861 01:02:30,719 --> 01:02:39,820 Si le damos aquí a lo que se llama sobrecarga, nos dice hay otra opción que aparte de poder introducir el mensaje separado por una coma, podemos meter un contexto. 862 01:02:41,280 --> 01:02:44,199 Esto aquí no lo voy a hacer con esta operación, lo voy a hacer con la de instanciar. 863 01:02:44,199 --> 01:03:03,460 Cuando yo abro el paréntesis distanciar hay hasta 10 de lo que se llaman sobrecargas, que son a esta palabra, esta acción, puedes hacer uso de ella hasta de 10 formas diferentes. Y veis que cada una, entre el paréntesis, va poniendo distintas opciones, cada una con sus peculiaridades, que ahora vamos a ver. 864 01:03:03,460 --> 01:03:05,320 Si vamos a la primera 865 01:03:05,320 --> 01:03:08,139 Dice, pues tú aquí me puedes meter un objeto 866 01:03:08,139 --> 01:03:09,880 Que se llama original 867 01:03:09,880 --> 01:03:12,480 Y abajo incluso pone una descripción 868 01:03:12,480 --> 01:03:14,340 Pone, clona el objeto original 869 01:03:14,340 --> 01:03:16,659 Y devuelve un clon 870 01:03:16,659 --> 01:03:18,840 Es decir, que coge un objeto 871 01:03:18,840 --> 01:03:20,579 Y lo clona en la escena 872 01:03:20,579 --> 01:03:22,219 Bueno, pone 873 01:03:22,219 --> 01:03:24,440 El original es un objeto 874 01:03:24,440 --> 01:03:26,440 Que ya tengas, del que quieras hacer una copia 875 01:03:26,440 --> 01:03:28,380 Que en este caso va a ser el prefaz que tenemos de la nave 876 01:03:28,380 --> 01:03:30,579 Entonces, simplemente 877 01:03:30,579 --> 01:03:32,340 Para que sepáis, vais a ir viendo 878 01:03:32,340 --> 01:03:37,059 que hay distintas formas de operar con estos métodos, ¿vale? 879 01:03:37,360 --> 01:03:41,039 Y lo que hagamos normalmente va a variar dependiendo de lo que pongamos aquí. 880 01:03:42,400 --> 01:03:48,159 Aquí, de la forma rápida, vamos a decir que lo que vamos a poner dentro de este paréntesis 881 01:03:48,159 --> 01:03:50,679 es el prefab que va a instanciar. 882 01:03:51,320 --> 01:03:57,400 Es decir, ahora mismo este código se va a ejecutar donde esté este objeto empty, 883 01:03:57,400 --> 01:03:58,880 que hemos creado antes 884 01:03:58,880 --> 01:04:00,920 y ahí vamos a generar un clon 885 01:04:00,920 --> 01:04:03,280 del prefab 886 01:04:03,280 --> 01:04:04,320 que tenemos aquí preparado 887 01:04:04,320 --> 01:04:06,960 de esta navecica que tenemos aquí preparada 888 01:04:06,960 --> 01:04:09,260 y claro, aquí es donde empieza 889 01:04:09,260 --> 01:04:11,480 ya la cabeza a dar vueltas y decirle 890 01:04:11,480 --> 01:04:13,440 vale, hasta ahora hemos hecho variables que he creado 891 01:04:13,440 --> 01:04:14,920 aquí, le he dicho que es un 5, una palabra 892 01:04:14,920 --> 01:04:16,739 pero como meto yo aquí dentro 893 01:04:16,739 --> 01:04:19,239 pues que es 894 01:04:19,239 --> 01:04:19,679 un prefab 895 01:04:19,679 --> 01:04:22,199 como meto aquí la nave 896 01:04:22,199 --> 01:04:25,000 cuando vayamos 897 01:04:25,000 --> 01:04:27,139 avanzando en el 898 01:04:27,139 --> 01:04:46,119 El temario, vamos a ver que aparte de números enteros, de strings, de cadena de texto o de floats, por ejemplo, hay más, pero bueno, esos son como los más usados a nivel de primitivas de variable, hay otras que apelan a conceptos que están dentro del juego. 899 01:04:46,119 --> 01:05:01,880 Uno, por ejemplo, es, y con mayúscula, ¿vale? Esto ya veréis que se puede escribir con y sin mayúscula, un transform, ¿vale? Un transform, veis que nos lo marca y dice, es una clase, bueno, y guarda la posición, rotación y escala de un objeto. 900 01:05:01,880 --> 01:05:16,179 Cuando generamos una variable de tipo transform, por ejemplo, ¿vale? La lógica es igual que la que hemos hecho anteriormente. Hemos dicho, primero hay que decir el tipo de variable que estamos creando y luego le damos un nombre nosotros que queramos. 901 01:05:16,179 --> 01:05:31,239 Pues posición referencia, ¿vale? Punto y coma. Ahora mismo vale cero porque no hay nada, ¿vale? Pero tenemos aquí una posición de referencia de donde queremos que se instancie la nave. 902 01:05:31,239 --> 01:05:47,699 Y voy a hacer otra cosa, ahora lo explico, que es que también se puede crear una variable de tipo GameObject, que lo que va a hacer es que en su interior se va a poder guardar un objeto, en este caso un prefab, y va a ser mi prefab, por ejemplo. 903 01:05:47,699 --> 01:06:08,880 Ahora mismo lo que tenemos es, aunque no sepamos muy bien qué quiere decir esto, una variable que por el tipo que es esta caja lo que va a guardar son GameObjects que tenemos en la escena. Está configurado con estas librerías que tenemos aquí. Va a permitir, y de hecho fijaos que cuando leemos esto pone UnityEngine.GameObject. 904 01:06:08,880 --> 01:06:20,960 Yo os he dicho, siempre va de lo general a lo concreto. Unity Engine, si os fijáis, está aquí abierto, por eso no hay que volver a abrirlo. Y gracias a esta librería, pues aquí tenemos este GameObject. 905 01:06:21,500 --> 01:06:34,360 Y cuando metamos algo en esta caja, vamos a referirnos a esta caja con mi prefab. Aquí hemos generado una caja, que ahora veremos cómo va a guardar el objeto para poder usarlo bajo el nombre mi prefab. 906 01:06:34,360 --> 01:06:53,219 Y luego, como vamos a querer que esta instancia se ubique donde nosotros le digamos, pues hemos generado otra variable de tipo transform. Y con transform es que podemos guardar los valores de posición, rotación y escala de un objeto. 907 01:06:53,219 --> 01:07:10,420 De hecho, no es extraño que dentro de los componentes haya uno que se llama transform que justo se ocupa de esos tres conceptos. Si nosotros conseguimos que en una variable se guarde el transform, guardará todo lo que hay adentro. 908 01:07:10,420 --> 01:07:19,179 Entonces ya podremos decirle a través de código, oye, lo que me genere es por donde esté este transform. Y nosotros hemos guardado la posición de, en este caso, esto, pero puede estar variado. 909 01:07:20,400 --> 01:07:31,980 Entonces, para coger ciertos... A ver, voy a guardar. Y de hecho, así me sirve para adelantarlo, normalmente va a haber variables de todos los tipos de componentes. 910 01:07:31,980 --> 01:07:35,119 Por ejemplo, esto también ya veremos qué es 911 01:07:35,119 --> 01:07:38,099 Meto un box collider, voy metiendo aquí distintos componentes 912 01:07:38,099 --> 01:07:41,119 Y veis que he generado un nuevo tipo de transport, transform 913 01:07:41,119 --> 01:07:43,159 Que podré guardar la información de transform 914 01:07:43,159 --> 01:07:46,099 Pero también va a existir, por ejemplo, el de rigidbody 915 01:07:46,099 --> 01:07:47,800 Que es el que antes os he enseñado que da gravedad 916 01:07:47,800 --> 01:07:51,260 Que hace actuar al motor de físicas 917 01:07:51,260 --> 01:07:52,760 Y si yo empiezo a escribir aquí 918 01:07:52,760 --> 01:07:55,699 No es casualidad que haya un objeto, un tipo de variable 919 01:07:55,699 --> 01:07:56,940 Que se puede llamar rigidbody 920 01:07:56,940 --> 01:08:00,239 Y esto lo llamo mi gravedad 921 01:08:00,239 --> 01:08:01,179 El nombre que queramos 922 01:08:01,179 --> 01:08:18,859 Este último es gravedad. Yo voy a poder dirigirme a los distintos componentes guardándolos en su propia caja. Hay que hacer alguna operación más, pero dentro de esta variable de esta caja voy a poder meter cualquier cosa que esté dentro de RigidBody. 923 01:08:18,859 --> 01:08:33,039 Luego podré acceder a todas estas propiedades. O BoxCollider, pues también voy a poder hacer cajas que se refieran a lo que haya dentro de BoxCollider. Y aquí, pues, B, C de BoxCollider. ¿Vale? Entonces, que os vaya sonando que estos son componentes. 924 01:08:33,039 --> 01:08:50,579 Cuando aparecen además con este colorcito verde, que es el mismo de la clase, al final, fijaos la lógica que CalculusTut, si nos fijamos, no deja de ser otro componente. Es un nombre de componente. Esto es lo que se llama una clase en programación. 925 01:08:50,579 --> 01:09:13,779 Y las clases en programación se pueden usar para incorporarlo como componentes. Entonces, todo componente al final lo que es, es una clase que podemos referenciar aquí. Es decir, que si yo me meto, esto simplemente para que espero que os ayude a ir comprendiendo, si damos con la tecla control sobre algunas palabras, os deja meteros dentro. 926 01:09:13,779 --> 01:09:27,159 ¿Veis que cambia el cursor y me puedo meter dentro? Y aquí hay un montón de cosas que ya ha programado alguien y por eso están las librerías preparando el componente, en este caso, GameObject. 927 01:09:27,840 --> 01:09:31,800 Ya hace muchas cosas, pero que ya están hechas por el programador. 928 01:09:32,659 --> 01:09:36,560 Entonces, a ver, que vaya al padre, ahora aquí. 929 01:09:37,180 --> 01:09:41,380 Y Transform también tendrá sus historias ya preconfiguradas, etc. 930 01:09:41,380 --> 01:09:54,000 Entonces, estas clases, aunque aquí veamos estos componentes con muchas opciones, claro, esto es porque ya hay un código que dice, pues quiero que enseñes, bueno, no sé cuál lo había metido, pero mira, por ejemplo, cámara. 931 01:09:54,100 --> 01:09:57,539 Todo esto alguien ha hecho un código para que vaya enseñando cada uno de los elementos. 932 01:09:57,539 --> 01:10:18,420 Al final hay, y veréis que no me lo estoy inventando, cuando aquí ponga cámara y puedo llamarle mi cámara, ponerle un nombre y aquí me meto y cuando me meto habrá opciones como, a ver si alguna, es que hay tantas que no voy a poder verlo, pero por ejemplo, fill of view y hay ya opciones preconfiguradas. 933 01:10:18,420 --> 01:10:45,939 Pues si nos fijamos aquí, va a haber alguna que es fill of view, ¿vale? Bueno, pues todo esto se está viendo porque lo hemos programado antes, alguien lo ha programado antes para que ya estén constituidas y tengan ciertos comportamientos, ¿vale? Esto, evidentemente, simplemente para que vaya viendo qué clase y componente son sinónimos, en cierto modo, y aparte se pueda hacer cajas variables con estos, con estas, digamos, con los valores que ya tienen estas clases, ¿vale? 934 01:10:45,939 --> 01:11:00,760 Entonces ahora mismo lo que me interesa es la clase que me permite guardar GameObjects, que son objetos, y también voy a decir una posición, voy a querer una posición y por tanto voy a usar que la caja transform también lo puedo usar, el componente transform de otro objeto. 935 01:11:01,340 --> 01:11:14,819 Entonces, claro, aquí a diferencia de antes no podemos hacer un igual y 5 o nave prefab, no se puede. Se puede hacer con código más adelante, pero bastante más complejo que hacer una asignación por el igual. 936 01:11:14,819 --> 01:11:22,079 Entonces, aquí hay que empezar a hablar de lo que, y esto está en el tema cero también, lo que se llaman los ámbitos de las variables. 937 01:11:23,819 --> 01:11:34,220 Vais a ir viendo, si cogéis otro código, empezáis a ver que muchas veces leeréis palabras como privado, private o público, que aquí ya viene uno, por ejemplo, 938 01:11:35,000 --> 01:11:40,779 porque al final estos códigos llegarán momentos que querremos que se comuniquen entre sí. 939 01:11:40,779 --> 01:11:50,520 Es decir, imaginaos que yo he puesto a cálculos un componente y luego el personaje tiene su propio script con su vida de 100. 940 01:11:51,079 --> 01:11:58,619 Y es cálculo la que se ocupa de coger de otro componente la vida del personaje y en otro objeto, en otro script, hacer operaciones. 941 01:11:58,819 --> 01:12:05,619 Entonces, digamos que cuando se vaya complicando el tema, habrá que ir intercomunicando los distintos scripts y los códigos. 942 01:12:05,619 --> 01:12:21,619 Pero no siempre nos va a interesar que todo se comunique con todo, porque a lo mejor va a haber personajes con sus scripts, va a haber enemigos con sus scripts, va a haber una pared que podemos romper con sus scripts y todas tienen vida, digamos, cada una la suya respectiva. 943 01:12:21,619 --> 01:12:34,060 Si al final empezamos a poner variables como vida, no nos acordábamos, si todos los scripts diferentes tienen vida, al final nos podemos equivocar, podemos poner vida y referirnos a la vida de otro personaje. 944 01:12:34,060 --> 01:12:46,779 Entonces, para limitar, esto es como una explicación así un poco chusca, pero bueno, a veces no nos interesa que los distintos elementos se puedan meter unos dentro de otros. 945 01:12:46,779 --> 01:13:07,439 Entonces, para eso existen lo que se llaman los ámbitos de acceso. ¿Eso qué significa? Que cuando vamos generando tanto clases como variables, incluso como métodos, acciones, podemos decirle que algo se pueda ver desde fuera de este script o no. 946 01:13:07,439 --> 01:13:35,000 Y esto básicamente significa que cuando generamos cualquier variable, igual que os he dicho que una variable sin valor vale a cero, normalmente cuando declaramos una variable es privada, es decir, que solo se va a ver dentro de esta clase, ¿vale? No lo va a poder ver otro código, ¿vale? Aquí también, aunque no lo ponga, también hay un private, veis que no da error, aunque lo escriba, ¿vale? Porque se supone que por defecto lo pone como privado, para que sea restrictivo, ¿no? 947 01:13:35,000 --> 01:13:43,720 Sin embargo, en ciertos momentos nos puede interesar que una variable sea pública y lo puedan ver otros objetos. 948 01:13:44,020 --> 01:13:46,380 Y en Unity no es solo que lo puedan ver otros scripts. 949 01:13:46,539 --> 01:13:51,600 En Unity es que también sea público desde el inspector de Unity, ¿vale? 950 01:13:52,119 --> 01:13:54,659 Voy a hacer una cosa, voy a borrar, voy a comentar, ¿vale? 951 01:13:54,659 --> 01:13:59,300 En vez de borrar, para tenerlo preparado, comento de un segundo, si luego quiero usar, digo, para que no dé error, ¿vale? 952 01:13:59,619 --> 01:14:03,500 Si en cualquier momento quiero recuperar cualquier cosa, quito el código y lo tengo ahí, ¿vale? 953 01:14:03,500 --> 01:14:06,840 Es una práctica muy común, comentar para dejar de usar algo. 954 01:14:07,420 --> 01:14:17,239 Entonces, ahora mismo, si me meto en el script CalculusTut, solo hay un campo aquí, que es script, que viene por defecto, 955 01:14:17,539 --> 01:14:21,380 cuando metemos un script para definir qué script es el que estamos asociando. 956 01:14:21,380 --> 01:14:23,279 Ya está, no permite hacer nada. 957 01:14:23,899 --> 01:14:31,840 Pero fijaos, y aquí ya va a empezar a abrirse un mundo de posibilidades, que si yo en vez de decir que algo es privado, lo pongo como público, 958 01:14:31,840 --> 01:14:47,140 es decir, que puedan acceder otros scripts a este elemento, si yo lo pongo público y guardo, vais a ver que ahora dentro de este script se ha abierto otro campo nuevo que se llama mi prefab, 959 01:14:47,319 --> 01:14:56,340 voy un segundo aquí, que es el nombre de la variable, veis que él ya interpreta que aunque sea mayúsculas y minúsculas, lo separa bien con su mayúscula, bien escrito, 960 01:14:56,340 --> 01:14:58,239 que está hecho todo a propósito 961 01:14:58,239 --> 01:15:00,260 y aquí deja un espacio 962 01:15:00,260 --> 01:15:02,420 que podemos rellenar con algo que sea un 963 01:15:02,420 --> 01:15:03,140 GameObject 964 01:15:03,140 --> 01:15:06,560 entonces, haciendo públicas las variables 965 01:15:06,560 --> 01:15:07,880 es como, por ejemplo 966 01:15:07,880 --> 01:15:10,420 en este componente, en este código, alguien 967 01:15:10,420 --> 01:15:12,159 hace que aquí se puedan meter tres variables 968 01:15:12,159 --> 01:15:14,420 llamadas posición, que luego además 969 01:15:14,420 --> 01:15:16,319 se referirá a ellas para hacer ciertas operaciones 970 01:15:16,319 --> 01:15:18,539 ¿vale? si por ejemplo 971 01:15:18,539 --> 01:15:20,659 el transform 972 01:15:20,659 --> 01:15:22,399 digo que sea público, también 973 01:15:22,399 --> 01:15:24,520 ¿vale? pues cuando lo hago 974 01:15:24,520 --> 01:15:26,079 público y guardo, vais a ver que 975 01:15:26,079 --> 01:15:40,979 Esperad un segundo que está cargando. Pues está la posición de referencia y está esperando algo que sea de tipo transform. Entonces, con esto, lo que vamos a poder hacer es, desde el propio inspector, arrastrar elementos. 976 01:15:40,979 --> 01:15:44,060 veis que la main cámara la meto en las dos 977 01:15:44,060 --> 01:15:44,939 ¿vale? 978 01:15:45,779 --> 01:15:47,600 fijaos, importante antes de seguir 979 01:15:47,600 --> 01:15:49,739 que aunque estoy arrastrando la misma cámara 980 01:15:49,739 --> 01:15:51,119 en cada uno sale un iconito 981 01:15:51,119 --> 01:15:53,560 ¿vale? porque en cada uno está guardando 982 01:15:53,560 --> 01:15:55,659 un tipo de información, en uno está guardando 983 01:15:55,659 --> 01:15:57,779 la caja del GameObject, porque es de tipo 984 01:15:57,779 --> 01:15:59,340 GameObject, y en otra 985 01:15:59,340 --> 01:16:01,439 ¿vale? recordad que el componente de transform 986 01:16:01,439 --> 01:16:03,199 tiene este icono, está guardando 987 01:16:03,199 --> 01:16:05,140 la información de transform de este objeto 988 01:16:05,140 --> 01:16:07,260 aunque estemos arrastrando el mismo objeto 989 01:16:07,260 --> 01:16:09,039 en cada una de las variables 990 01:16:09,039 --> 01:16:10,840 dentro de esta caja, de esta pieza de Lego 991 01:16:10,840 --> 01:16:15,159 está guardando una información distinta, que nosotros ya iremos usando a conveniencia. 992 01:16:15,840 --> 01:16:21,619 Entonces, esta es la forma más rápida, las hay más, y de hecho en ciertos momentos esto es muy básico, 993 01:16:21,800 --> 01:16:27,739 digo que se tendrá que buscar de otra forma, es la forma en la que tenemos para llenar estas cajas 994 01:16:27,739 --> 01:16:31,039 de la información que nos importe. 995 01:16:31,859 --> 01:16:39,220 Entonces, ahora mismo, si tenemos aquí un instant shade, y vuelvo a escribir el paréntesis para que veamos, 996 01:16:39,220 --> 01:16:41,819 aquí hay el primer método 997 01:16:41,819 --> 01:16:42,739 dice object 998 01:16:42,739 --> 01:16:44,699 que es sinónimo de GameObject 999 01:16:44,699 --> 01:16:47,380 aquí podemos meter el objeto que queremos que se instancie 1000 01:16:47,380 --> 01:16:49,239 y ahora lo bueno es que si ponemos aquí 1001 01:16:49,239 --> 01:16:49,880 mi prefab 1002 01:16:49,880 --> 01:16:52,800 esa variable que hemos llenado 1003 01:16:52,800 --> 01:16:55,220 con algo en este momento 1004 01:16:55,220 --> 01:16:56,439 a través del inspector 1005 01:16:56,439 --> 01:16:58,920 ahora se va a instanciar algo cuando arranque 1006 01:16:58,920 --> 01:17:01,060 es verdad que ahora mismo lo he hecho así 1007 01:17:01,060 --> 01:17:02,939 de la explicación pero mi prefab lo que instancia 1008 01:17:02,939 --> 01:17:04,539 es una cámara que no es lo que me interesa 1009 01:17:04,539 --> 01:17:07,180 yo lo que voy a querer instanciar es la nave prefab 1010 01:17:07,180 --> 01:17:08,979 voy a cálculos 1011 01:17:08,979 --> 01:17:12,079 y el prefab lo puedo arrastrar a main cámara. 1012 01:17:12,800 --> 01:17:15,439 Y veis que se ha guardado aquí el objeto de nave prefab. 1013 01:17:16,340 --> 01:17:17,260 ¿Esto qué significa? 1014 01:17:17,380 --> 01:17:19,159 Voy a guardar también aquí, voy al código 1015 01:17:19,159 --> 01:17:23,880 y aquí le estoy diciendo, en esta nave mi prefab, 1016 01:17:24,060 --> 01:17:26,579 a través de, al hacerlo público, a través del inspector, 1017 01:17:27,079 --> 01:17:29,939 he guardado ese prefab y cuando yo instancio, 1018 01:17:30,060 --> 01:17:32,380 ahora sí que sabe qué objeto es el que tiene que instanciar 1019 01:17:32,380 --> 01:17:34,220 porque se lo he atribuido ahí. 1020 01:17:34,800 --> 01:17:39,689 Cuando guarde, vais a ver que... 1021 01:17:39,689 --> 01:17:58,970 ¿Vale? Cuando guarde, al darle a play, no está en ningún lado, pero me genera una copia, bueno, perdonad que como aquí le he metido a la nave antes un RigidBody y tal para explicaroslo, voy a quitar dentro del prefab todo lo que le he añadido de componentes que ahora mismo no me interesa que tengan, como el Boss Collider y el RigidBody, ¿vale? 1022 01:17:58,970 --> 01:18:15,569 Es autoguardado, salgo y vuelvo. A ver, detengo y cuando arranca el juego porque está en el start, me genera esta nave aquí, ¿vale? Así es como ha sabido el programa pues que es esta nave la que tiene que hacerse, una copia. 1023 01:18:15,569 --> 01:18:22,430 Si yo en vez de la nave pongo el prefaz cubo, pues sin hacer nada más, ya cuando le da al play lo que se va a instanciar es el cubo, no la nave. 1024 01:18:23,430 --> 01:18:38,189 Y para acabar, o de las últimas cosas que voy a decir, lo bueno que tiene esto es que como cada método tiene sus sobrecargas, el primero te lo pone, te lo origina en el punto de origen de donde se está generando el script. 1025 01:18:38,189 --> 01:19:03,590 Es decir, yo me pongo aquí y le digo mi prefaz como estaba haciendo y yo no tengo control de dónde se instancia, ¿vale? Más allá de que se instanciará donde esté el objeto padre, que es el que instancia, ¿vale? Es decir, yo ahora me pongo en el 0, 0. Por cierto, cuando generéis un nuevo elemento, como un empty, cuidado que según donde tengáis la navegación no lo genera en el punto de origen. 1026 01:19:03,590 --> 01:19:07,250 Veis que yo he generado uno nuevo y me lo he puesto en el 20, menos 1, menos 6, ¿vale? 1027 01:19:07,250 --> 01:19:11,609 Si queréis empezar a hacer todo desde el 0, es muy buena práctica siempre crear el objeto, 1028 01:19:11,710 --> 01:19:16,149 a menos que lo hagáis a posta, claro, y lo reseteáis para que esté en el punto de origen, ¿no? 1029 01:19:17,130 --> 01:19:22,050 ¿Vale? Ahora mismo cálculos, que es el objeto que tiene aquí, veis que tampoco está en el origen. 1030 01:19:22,270 --> 01:19:28,369 Y yo cuando arranco el juego, me lo está generando en una posición que tampoco es la que me interesa, 1031 01:19:28,369 --> 01:19:33,149 que sería la del origen, ¿vale? ¿Por qué? Porque si recordáis, cuando yo he hecho el cubo, 1032 01:19:33,149 --> 01:19:35,210 estaba movido del 0, 0 1033 01:19:35,210 --> 01:19:37,750 y cuando he instanciado 1034 01:19:37,750 --> 01:19:39,369 sin decirle un punto de referencia 1035 01:19:39,369 --> 01:19:40,529 que es lo que he hecho ahora en el código 1036 01:19:40,529 --> 01:19:42,909 porque no le he dicho nada referente a posición 1037 01:19:42,909 --> 01:19:45,189 lo intentará hacer en el 0, 0 1038 01:19:45,189 --> 01:19:47,590 pero lo está moviendo en relación a 1039 01:19:47,590 --> 01:19:49,010 lo desplazado que esté ya 1040 01:19:49,010 --> 01:19:51,550 el prefab, lo que os he dicho antes de la boquilla 1041 01:19:51,550 --> 01:19:52,550 y si lo movíamos, ¿no? 1042 01:19:52,890 --> 01:19:55,789 entonces si yo este prefab lo guardo 1043 01:19:55,789 --> 01:19:58,229 y vuelvo aquí 1044 01:19:58,229 --> 01:20:00,710 y lo vuelvo a lanzar el juego 1045 01:20:00,710 --> 01:20:04,609 me lo deja en el 0,0, ¿vale? 1046 01:20:05,029 --> 01:20:07,649 Ahora sí que está en el 0,0 este cubo. 1047 01:20:08,449 --> 01:20:11,470 Si yo quisiera decir un punto del espacio 1048 01:20:11,470 --> 01:20:15,609 donde se pueda ubicar el objeto, 1049 01:20:15,850 --> 01:20:18,369 pues para, por ejemplo, hago aquí un objeto 1050 01:20:18,369 --> 01:20:20,229 que es la boquilla de la pistola. 1051 01:20:20,229 --> 01:20:22,529 De hecho, espera, no, voy a hacer algo visual 1052 01:20:22,529 --> 01:20:25,430 para que sea más fácil de detectar. 1053 01:20:25,850 --> 01:20:28,029 Hago este cilindro, ¿vale? 1054 01:20:28,609 --> 01:20:30,409 Que es la pistola que se va a ir moviendo 1055 01:20:30,409 --> 01:20:32,609 durante el juego, y en un momento X 1056 01:20:32,609 --> 01:20:34,550 voy a querer que en este 1057 01:20:34,550 --> 01:20:36,649 punto, cuando le dé a la barra espaciadora, por ejemplo 1058 01:20:36,649 --> 01:20:38,390 se instancie la bala 1059 01:20:38,390 --> 01:20:40,569 este objeto está en unas coordenadas 1060 01:20:40,569 --> 01:20:42,529 que no son el 0,0, si yo ahora 1061 01:20:42,529 --> 01:20:44,489 mismo le digo que se instancie 1062 01:20:44,489 --> 01:20:46,289 la bala 1063 01:20:46,289 --> 01:20:48,229 en algún punto 1064 01:20:48,229 --> 01:20:50,130 pues lo mismo, se va a instanciar 1065 01:20:50,130 --> 01:20:52,829 en el 0,0, pero si yo 1066 01:20:52,829 --> 01:20:54,409 vuelvo otra vez 1067 01:20:54,409 --> 01:20:56,930 a cálculos y le digo la posición de referencia 1068 01:20:56,930 --> 01:20:58,750 quiero que sea la del cilindro 1069 01:20:58,750 --> 01:21:12,069 que la voy a llamar boquilla, pistola, boquilla, ¿vale? Cuando voy a cálculos, yo si arrastro boquilla a la posición, ¿vale? Yo quiero que instancie el cubo, ¿vale? Va a instanciar en la posición de la boquilla, estoy preparando esto, ¿no? 1070 01:21:12,250 --> 01:21:24,250 Entonces, cuando, como esta posición, este transform, lo está cogiendo de la boquilla, hay otra opción que es decirle, vale, y quiero que me lo hagas en, al ponerle coma, veis que se pueden ir añadiendo más parámetros. 1071 01:21:24,250 --> 01:21:46,350 Y ahora la sobrecarga que me abre es la 2, que es la que permite meter dos valores. Incluso si pusiera tres comas, significa que puedo meter tres distintos valores. Pero el que está configurado para que lleve dos es una, que es el objeto original, y otra que es cuál es el padre y la posición donde se va a generar, que es esta posición referencia. 1072 01:21:47,229 --> 01:21:56,590 Cierro el paréntesis, guardo, y vais a ver que a diferencia de antes, ahora sí que cuando se ejecute el juego, 1073 01:21:58,970 --> 01:22:06,489 la bala se ha hecho hija de la boquilla y además está en la misma posición que la boquilla, ya no se hace en el 0-0. 1074 01:22:08,229 --> 01:22:15,329 Entonces veis que de esta forma podemos ir relacionando, ir cogiendo la información de uno y de otro e irla usando a nuestro antojo. 1075 01:22:15,329 --> 01:22:35,310 Habrá que ir conociendo poco a poco los métodos, las acciones que podemos hacer, pero bueno, esto es un poco como la base de ir moviendo datos de un lado a otro mediante código. Solo me queda una cosita muy corta por explicar y por mí por hoy creo que ya estoy y creo que tenéis información suficiente para hacer la práctica. 1076 01:22:35,310 --> 01:22:53,069 Me quedan dos cosas y ahora os pregunto qué tal. Imaginaos que yo en este instantiate, en vez de hacerlo en start, lo pongo en update, corto y pego la línea y guardo. ¿Qué es lo que va a hacer? Pues que va a generar una copia cada frame. Aquí se van haciendo millones. 1077 01:22:53,069 --> 01:23:07,630 Esto normalmente no os va a interesar porque va a colapsar el juego de tantas copias que está haciendo, pero veis que dependiendo de dónde se ubique, pues hace la operación una vez al comienzo, otra durante cada fotograma y hay más métodos de tiempo. 1078 01:23:07,630 --> 01:23:24,510 Pero bueno, estos son como los básicos que vienen. Luego, última cosa. Os he dicho antes que por nivel de protección, para que no se pueda acceder a una variable desde varias variables que a lo mejor se llaman igual y luego un código muy grande, esto por defecto, si no ponemos nada, el declarar una variable es privado. 1079 01:23:24,510 --> 01:23:39,310 Yo lo he puesto público para que se vea en el inspector. Lo he vuelto a hacer privado. Ojo, que lo privado no existe. Y ahora no es solo que no exista, sino que ahora se ha perdido la referencia de los objetos. 1080 01:23:39,310 --> 01:24:00,590 Es decir, que ahora hago esto y no se va a instanciar nada porque ha dejado de pasarse la información, ¿vale? Pero hay otra operación, digamos, híbrida, que es que yo puedo seguir queriendo, que esto es lo que os pide la... esto es un poco para que veamos si lo vais cogiendo, que es que teniendo la misma protección privada, ¿vale? 1081 01:24:00,590 --> 01:24:11,250 Que otro script no se pueda meter a esta variable que sí que permita que se pueda operar con ella desde el inspector de Unity, pues, por ejemplo, para pasar los objetos, ¿no? 1082 01:24:11,569 --> 01:24:16,250 Y eso se llama, esa operación es metida entre estos corchetes, ¿vale? 1083 01:24:16,369 --> 01:24:21,430 Lo que se llama un serialized field, campo serializado, ¿vale? 1084 01:24:21,489 --> 01:24:25,649 Se pone antes del tipo de variable, que es donde se ponen los ámbitos. 1085 01:24:25,810 --> 01:24:27,770 A ver, esperad, que lo quiero copiar en la otra, ¿vale? 1086 01:24:27,770 --> 01:24:51,590 Y ahora las dos van a seguir siendo de tipo privado, lo puedo poner incluso de manera explícita aquí escrito, ¿vale? Pero siguen siendo privados. Cuando veamos cómo se accede a otros scripts, pues no se va a poder acceder así de forma fácil, digamos, pero sí que permitimos que aparezcan aquí, ¿vale? Para poder hacer este traspaso de información de elementos. 1087 01:24:51,590 --> 01:24:53,949 ojo, veis que cuando he borrado 1088 01:24:53,949 --> 01:24:55,449 y lo he vuelto a poner está en vacío 1089 01:24:55,449 --> 01:24:56,770 muchas veces va a dar error 1090 01:24:56,770 --> 01:24:59,430 que de pronto vamos a ver aquí algo vacío y pensamos 1091 01:24:59,430 --> 01:25:01,489 que está, este es el peligro que tiene de trabajar 1092 01:25:01,489 --> 01:25:02,550 desde el inspector 1093 01:25:02,550 --> 01:25:05,130 por eso muchas veces se hace todo con código 1094 01:25:05,130 --> 01:25:07,369 que eso funciona siempre si está bien hecho 1095 01:25:07,369 --> 01:25:09,489 entonces habría que volver a decirle en cálculo 1096 01:25:09,489 --> 01:25:11,550 la boquilla es lo que voy a usar 1097 01:25:11,550 --> 01:25:13,270 de posición de referencia 1098 01:25:13,270 --> 01:25:15,270 ahora la nave, pues por ejemplo 1099 01:25:15,270 --> 01:25:17,529 va a ser el prefab que se va a instanciar el objeto 1100 01:25:17,529 --> 01:25:19,829 guardo y al ejecutar 1101 01:25:19,829 --> 01:25:20,210 pues ya 1102 01:25:20,210 --> 01:25:35,970 La boquilla va a tener, bueno, como está en el update, pues se va a estar haciendo la nave en el sitio, ¿vale? Entonces, bueno, lo primero casi me va a interesar meter esto en el start y ya está. Más o menos lo que se os pide la práctica está todo explicado. 1103 01:25:35,970 --> 01:25:54,430 Desde luego Instanciate luego tiene más sobrecargas, ¿vale? Podría poner otra coma. Incluso antes de decirle, podemos poner si se instancia en un punto concreto, con una rotación concreta, aunque coja la posición de manera independiente. Bueno, pues ya hay más sutileza, pero esto ya demasiado por hoy. 1104 01:25:54,430 --> 01:25:59,770 si ponéis cualquier método, cualquier propiedad en Google, 1105 01:26:00,029 --> 01:26:02,390 por ejemplo, Instantiate, y ponéis Unity, 1106 01:26:02,609 --> 01:26:08,590 os va a remitir a la API o al manual de Unity. 1107 01:26:09,310 --> 01:26:11,149 Y aquí es donde os da una explicación, 1108 01:26:11,229 --> 01:26:13,590 esto está en inglés, no está en español normalmente, 1109 01:26:14,689 --> 01:26:19,090 de cuántas sobrecargas hay, su uso, descripciones, ejemplos. 1110 01:26:19,090 --> 01:26:21,069 Cuando no sepáis cómo funciona algo, 1111 01:26:21,069 --> 01:26:25,670 a medida que vayáis cogiendo además más soltura 1112 01:26:25,670 --> 01:26:27,229 pues iréis entendiendo mejor que pone aquí 1113 01:26:27,229 --> 01:26:31,829 pero esto va a ser vuestro manual de uso frecuente 1114 01:26:31,829 --> 01:26:35,369 que hay que ir revisando cuando tengamos problemas 1115 01:26:35,369 --> 01:26:38,970 de hecho si en cualquier momento 1116 01:26:38,970 --> 01:26:41,250 le dais al interrogante de un componente concreto 1117 01:26:41,250 --> 01:26:43,229 por ejemplo el transform al darle 1118 01:26:43,229 --> 01:26:45,170 se ha abierto la otra pantalla 1119 01:26:45,170 --> 01:26:47,810 pero me ha abierto aquí la aplicación de transform 1120 01:26:47,810 --> 01:26:49,569 con eso podéis ir viendo la ayuda 1121 01:26:49,569 --> 01:26:54,869 Está a veces demasiado extensa, pero da mucha información útil.