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