1 00:00:01,389 --> 00:00:05,830 Hola, bienvenidos a una tutoría de Dame. 2 00:00:06,389 --> 00:00:12,289 Esta tutoría, imagino que habéis estado viendo las que dejé colgadas, no sé en qué punto estáis. 3 00:00:12,869 --> 00:00:16,750 Sobre todo es una tutoría de dudas que tengáis hasta este momento. 4 00:00:17,649 --> 00:00:23,550 Si no, pues explicaré alguna cosilla más, pero sobre todo está dirigida a que me hagáis dudas 5 00:00:23,550 --> 00:00:28,010 ahora que ya habéis tenido un tiempo para ver la unidad 1 y la 0, 6 00:00:28,010 --> 00:00:44,409 que bueno, el acero pues sigue, digamos, estando en marcha, ¿no? Por eso de que es transversal, que ya hablé en su momento, pero bueno, no sé cómo lo lleváis, un poco comentadme dudas o de la tarea, problemas que estéis encontrando. 7 00:00:44,409 --> 00:00:58,439 Bueno, veo que lo lleváis todo bastante bien y bastante claro 8 00:00:58,439 --> 00:01:05,200 Me indican... todavía me estoy pegando con el temario y no he llegado a la tarea 9 00:01:05,200 --> 00:01:12,280 Vale, bueno, las tareas son importantes en el sentido de que es donde se aplica 10 00:01:12,280 --> 00:01:19,280 Y donde realmente uno se pone en juego todo, pero bueno, como siempre 11 00:01:19,280 --> 00:01:22,420 Primero no son obligatorias, etc. 12 00:01:22,420 --> 00:01:43,859 Entonces, bueno, otro compañero me indica, de momento la UT1 bien y la 0 acabo de terminarla, me faltaría la 2. Vale, sí, la 2 la abrí hace, bueno, menos de una semana, bueno, entiendo que todavía estaréis con ella, sí que la 1 y la 1 sobre todo sí que es la que más deberíamos llevar ahora mismo ya vista, incluso con la tarea pues realizada. 13 00:01:44,640 --> 00:02:04,400 Dudas, aunque no hayáis hecho la tarea o tal, bueno, es verdad que en esta ocasión teníais bastantes vídeos que van hablando de la tarea, en específico de la 1 sobre todo, entonces entiendo que las dudas ya en esos vídeos se van resolviendo, aparte de todo lo que se iba explicando de la 0 en realidad, de cómo se funciona. 14 00:02:04,400 --> 00:02:07,099 indican ya tengo todas hechas 15 00:02:07,099 --> 00:02:08,240 lo que no sé si están muy bien 16 00:02:08,240 --> 00:02:10,919 vale, bueno, a ver, esto es verdad 17 00:02:10,919 --> 00:02:12,960 que hasta que no me la envíéis y la corrija 18 00:02:12,960 --> 00:02:15,500 pues va a haber feedback que no voy a poder dar 19 00:02:15,500 --> 00:02:17,300 si tenéis dudas en el proceso 20 00:02:17,300 --> 00:02:18,500 pues perfecto 21 00:02:18,500 --> 00:02:20,280 plantearlas por favor 22 00:02:20,280 --> 00:02:23,099 si no, pues sobre todo el criterio 23 00:02:23,099 --> 00:02:24,419 es que 24 00:02:24,419 --> 00:02:27,419 vais consiguiendo lo que se pide 25 00:02:27,419 --> 00:02:29,520 es decir, lo bueno y malo 26 00:02:29,520 --> 00:02:30,219 de este módulo 27 00:02:30,219 --> 00:02:32,740 bueno, en realidad en lo nuestro pasa 28 00:02:32,740 --> 00:02:36,000 en casi todo, se puede llegar por varios caminos. 29 00:02:36,240 --> 00:02:39,280 Entonces, mientras no se desvíe mucho de lo que se ha explicado 30 00:02:39,280 --> 00:02:41,139 y se aplique lo que se dice en el enunciado, 31 00:02:41,639 --> 00:02:44,060 si se consigue el objetivo, pues estará bien. 32 00:02:44,460 --> 00:02:46,879 A veces se puede llegar de un camino más rápido 33 00:02:46,879 --> 00:02:50,680 o de forma más optimizada, pero bueno, de cara a las tareas, eso. 34 00:02:51,080 --> 00:02:58,300 Lo importante es que vayáis consiguiendo los objetivos 35 00:02:58,300 --> 00:03:00,020 y si os bloqueáis en algo, pues me preguntéis. 36 00:03:00,460 --> 00:03:02,300 Me indican de mirar la tarea 2 y me surge una duda, 37 00:03:02,300 --> 00:03:04,360 Pero como no he mirado el temario igual es una duda tonta 38 00:03:04,360 --> 00:03:06,379 Puede serlo 39 00:03:06,379 --> 00:03:07,879 Porque igual está en el temario 40 00:03:07,879 --> 00:03:09,759 Pero bueno, si quieres comentarla 41 00:03:09,759 --> 00:03:12,639 Es verdad que la unidad 2 no es la que más me interesa 42 00:03:12,639 --> 00:03:13,120 Ahora mismo 43 00:03:13,120 --> 00:03:15,340 Ya habrá momentos, pero bueno 44 00:03:15,340 --> 00:03:17,319 Si estás con ello, planteala 45 00:03:17,319 --> 00:03:20,479 Y si veo que es de leerte el temario 46 00:03:20,479 --> 00:03:21,919 Pues te lo indico 47 00:03:21,919 --> 00:03:24,539 En ausencia de otras 48 00:03:24,539 --> 00:03:29,159 Me escribe 49 00:03:29,159 --> 00:03:31,120 Se indica que para las entradas del jugador 50 00:03:31,120 --> 00:03:33,539 puedes elegir joystick o teclado, ¿vale? 51 00:03:34,060 --> 00:03:35,939 ¿Es excluyente o podrían ponerse las dos? 52 00:03:36,080 --> 00:03:37,099 No, no es excluyente. 53 00:03:37,819 --> 00:03:41,099 Cuando vayáis leyendo el tema 2, lo primero, ¿vale? 54 00:03:41,159 --> 00:03:44,060 Bueno, el tema 2 es en el que ya se van introduciendo interacciones, 55 00:03:44,560 --> 00:03:48,780 pues eso, que ya podréis ir indicando mediante, en este caso, 56 00:03:48,879 --> 00:03:53,120 pues joystick, teclado o con el dispositivo que sea que capte inputs, 57 00:03:53,879 --> 00:03:58,639 ¿no? Entradas, interacciones, pues vais a poder ya asignar acciones, ¿no? 58 00:03:58,639 --> 00:04:23,060 Que es básicamente lo fundamental para que un videojuego sea tal, ¿no? Que sea interactivo. Entonces, se habla de que en este punto, bueno, ya llevo unos años, digamos que dentro de Unity había un sistema tradicional de capturar, capturar como captar, mejor dicho, esos inputs, había un método tradicional, ¿vale? 59 00:04:23,060 --> 00:04:24,899 que se gestiona con lo que se llama los Axies. 60 00:04:25,180 --> 00:04:29,000 Cuando lleguéis al tema lo veréis, en los Project Settings va a haber una forma 61 00:04:29,000 --> 00:04:35,920 de gestionar las entradas, estas interacciones, dentro del menú Edit. 62 00:04:36,160 --> 00:04:38,959 Ah, perdonad, que no os estoy compartiendo la pantalla, perdonad. 63 00:04:39,560 --> 00:04:44,680 Os comparto que si no me pongo a hablar y, pues bueno, le hablo al aire. 64 00:04:46,240 --> 00:04:51,220 ¿Veis mi monitor, verdad? Bueno, que es una pantalla de Unity. 65 00:04:51,220 --> 00:05:17,639 Si la veis, vale. Dame un segundo que se grabe bien. Vale. Pues lo que estaba comentando, que ya me había lanzado yo. Dentro de esos comportamientos tradicionales para que Unity pueda gestionar las entradas que vamos teniendo, si vamos a esta sección de Edit, en el menú Edit, Project Settings, hay una sección específica de lo que se llama el Input Manager. 66 00:05:17,639 --> 00:05:47,620 ¿Vale? Input Manager, en oposición a Input System, creo que esto queda bastante destacado además en los apuntes, Input Manager es el sistema clásico, digamos, de gestión que todavía sigue vigente, pero es verdad que está siendo reemplazado o complementado, se podría decir, por otro sistema que es este Input System, que aquí vamos a manejar de una forma un poco por encima y lo pone el temario que ni siquiera es, hay un apartado que sí, pues lo que es la filosofía, 67 00:05:47,620 --> 00:06:03,560 Pero luego el uso es más avanzado y en estas alturas de curso es complicada. Es un sistema que está pensado para gente que ya se lleva mejor con Unity que nosotros en estos momentos. Porque ya a nivel de programación tiene más miga que aún así. 68 00:06:03,560 --> 00:06:09,560 oye si os ponéis también con los tutoriales dejo bastante documentación creo para ir viendo las 69 00:06:09,560 --> 00:06:16,839 bondades básicamente sobre todo tiene más cosas sobre todo por lo que este input system el que 70 00:06:16,839 --> 00:06:22,839 es el novedoso novedoso que bueno que en realidad llevar varios años ese sistema lo que incorpora 71 00:06:22,839 --> 00:06:27,680 es que es mucho más versátil a la hora de detectar distintos inputs y esto es sobre todo en un 72 00:06:27,680 --> 00:06:33,379 momento en el que pues hay más dispositivos con la realidad virtual pues que va con pues eso con 73 00:06:33,379 --> 00:06:37,620 gafas que van captando las inclinaciones, los movimientos, luego los móviles también 74 00:06:37,620 --> 00:06:45,040 con sus osciloscopios, acelerómetros, etc. Había un momento que había muchas más formas 75 00:06:45,040 --> 00:06:51,459 de meter inputs que las que estaban planteadas por defecto mediante este input manager. Eso 76 00:06:51,459 --> 00:06:56,860 es como una introducción. Cuando os metáis en estos axes vais a ver que tiene varias 77 00:06:56,860 --> 00:07:00,040 opciones, se describe en el 78 00:07:00,040 --> 00:07:05,040 contenido de ese tema 2, pero vais a ver que hay momentos 79 00:07:05,040 --> 00:07:09,040 en el que dentro de cada uno de estos ejes, que estos son nombres que vamos 80 00:07:09,040 --> 00:07:13,240 dando a conjuntos, ¿vale? Estos que se despliegan, conjuntos de instrucciones 81 00:07:13,240 --> 00:07:17,060 que recogen, pues eso, ese input, se puede decir de qué tipo es 82 00:07:17,060 --> 00:07:21,120 si mediante un movimiento de ratón, vais a ver que son movimientos 83 00:07:21,120 --> 00:07:23,699 pues eso, basados sobre todo para 84 00:07:23,699 --> 00:07:29,019 para gamepads o teclado y ratón, ¿vale? 85 00:07:29,019 --> 00:07:34,519 Por eso falta un poco todo lo más avanzado en cuanto a móviles y VR, por ejemplo, ¿vale? 86 00:07:34,779 --> 00:07:37,819 Que también se puede hacer con librerías que hay aparte, ¿vale? 87 00:07:37,819 --> 00:07:42,100 Que gestionan los access de otra forma, pero bueno, así por defecto vais a ver 88 00:07:42,100 --> 00:07:47,680 pues eso, que se refiere a teclas o botones de un teclado, 89 00:07:47,800 --> 00:07:50,259 que también pueden ser de un gamepad, ¿vale? 90 00:07:50,399 --> 00:07:52,000 Aunque aquí no lo ponga claramente. 91 00:07:53,699 --> 00:08:04,319 también puede ser el movimiento de un ratón o ejes de un joystick, que realmente también se pueden asociar, dependiendo del dispositivo, a teclas de un gamepad. 92 00:08:04,839 --> 00:08:11,420 Entonces, cuando nosotros hacemos un axis de esto, por ejemplo, este horizontal, y vais a ver que ya viene prehecho, 93 00:08:11,420 --> 00:08:18,740 vienen varios prehechos para usarlo, porque son como los típicos, como este de movimiento, botón para movimiento negativo y positivo, 94 00:08:18,740 --> 00:08:21,300 que son los dos ejes de dirección, por ejemplo 95 00:08:21,300 --> 00:08:22,579 en un gamepad 96 00:08:22,579 --> 00:08:25,160 cuando tenemos la cruceta, cuando hablo de gamepad 97 00:08:25,160 --> 00:08:27,220 me refiero, por si acaso alguien no lo tiene 98 00:08:27,220 --> 00:08:29,120 claro, al mando de la Xbox o de la 99 00:08:29,120 --> 00:08:31,220 Playstation, cuando tenemos esa cruceta 100 00:08:31,220 --> 00:08:33,519 de dirección, al final son ejes 101 00:08:33,519 --> 00:08:34,639 opuestos 102 00:08:34,639 --> 00:08:37,259 los de dirección, si movemos 103 00:08:37,259 --> 00:08:39,320 el joystick o la cruceta 104 00:08:39,320 --> 00:08:40,460 hacia la izquierda 105 00:08:40,460 --> 00:08:43,120 pues es el valor negativo 106 00:08:43,120 --> 00:08:44,360 que indicará que 107 00:08:44,360 --> 00:08:47,120 mediante la programación que ya iremos haciendo, que se mueve 108 00:08:47,120 --> 00:08:49,220 a la izquierda, si le damos a ese 109 00:08:49,220 --> 00:08:51,120 mismo eje pero a la otra dirección, al positivo 110 00:08:51,120 --> 00:08:52,779 ¿vale? por eso están estos contrapuestos 111 00:08:52,779 --> 00:08:55,200 que en el teclado además vais a 112 00:08:55,200 --> 00:08:57,100 ver que se relacionan 113 00:08:57,100 --> 00:08:59,159 con la cruceta esta típica del WAS 114 00:08:59,159 --> 00:09:00,580 ¿no? de la WASD 115 00:09:00,580 --> 00:09:02,840 entiendo que sabéis de qué hablamos 116 00:09:02,840 --> 00:09:05,039 bueno, está ya, está este control 117 00:09:05,039 --> 00:09:07,240 de horizontal, si os dais cuenta, para ir de izquierda a derecha 118 00:09:07,240 --> 00:09:08,440 para el movimiento horizontal 119 00:09:08,440 --> 00:09:10,559 y en este momento está 120 00:09:10,559 --> 00:09:12,080 pensado para 121 00:09:12,080 --> 00:09:15,039 para el 122 00:09:15,039 --> 00:09:16,440 para ser usado con 123 00:09:16,440 --> 00:09:42,779 con teclas del teclado por ejemplo. Si aquí pusiéramos joystick estaríamos cancelando que se usen ratón y tecla, pero no hay nada que impida y si os dais cuenta aquí hay una entrada que se llama horizontal, un eje llamado horizontal, pero luego hay otro que se llama horizontal y vais a ver que se pueden hacer diferentes entradas. 124 00:09:42,779 --> 00:09:52,240 Entonces, si aquí hacemos otra llamada igual que se llama joystick, pues aquí podemos configurar lo de joystick y funcionan en base al mismo nombre. 125 00:09:52,580 --> 00:09:58,860 Cuando ya veáis cómo se mete el nombre del axis por código que lo pone en el tema, pues habrá que poner horizontal. 126 00:09:59,500 --> 00:10:06,159 Dependiendo del input, si tocamos la tecla A, por ejemplo, vas a ver que es la izquierda por lo que le estamos determinando. 127 00:10:06,159 --> 00:10:20,019 Pero si en la cruceta tocamos la tecla izquierda, se moverá a la izquierda, pero si además en los joystick le definimos otro, con estas acciones también que hay aquí, que también se explican, pues dependerá de qué detecte, de qué entrada esté detectando. 128 00:10:20,019 --> 00:10:52,529 Entonces, no son excluyentes, se pueden poner ambas, ¿vale? Entonces, básicamente, los ejes incluso se pueden duplicar y a un mismo control darle distintos, es decir, se puede poner ahora que mouseX también sea la A, que es lo que estaba, pues ya dependiendo del contexto donde se desencadene este comando, ¿no? 129 00:10:52,549 --> 00:11:06,470 En el tema 2, en la tarea vais a ver que ya hay que mover la nave, que se mueva, sube, baja, izquierda, derecha y gira, rota sobre sí misma para esquivar los obstáculos. 130 00:11:06,470 --> 00:11:28,070 Bueno, pues ahí ya iremos poniendo las distintas operaciones que tienen que hacer. Esto al final son ejes preparados para ser usados con acciones que luego pongamos, pues con el transform o con lo que hagamos, o añadiendo fuerzas como veremos en la física del tema 3, pero esto al final son como instrucciones de inputs. 131 00:11:28,070 --> 00:11:30,210 me preguntan, en la tarea de igual 132 00:11:30,210 --> 00:11:32,470 ¿qué inputs, botones ponemos para la dirección 133 00:11:32,470 --> 00:11:34,629 y rotación? porque lo verías tú en Project Settings 134 00:11:34,629 --> 00:11:36,370 ¿no? lo suyo sería usar 135 00:11:36,370 --> 00:11:38,889 los lógicos, pero si no me equivoco 136 00:11:38,889 --> 00:11:40,450 y dame un segundo que me meto 137 00:11:40,450 --> 00:11:41,789 otra vez en el enuncio de la tarea 138 00:11:41,789 --> 00:11:43,549 si no me equivoco ya os daba 139 00:11:43,549 --> 00:11:45,990 porque depende de la tarea a veces 140 00:11:45,990 --> 00:11:48,710 los dejo 141 00:11:48,710 --> 00:11:50,409 y a veces no, estamos hablando 142 00:11:50,409 --> 00:11:52,370 de la tarea 2, bueno sí, porque en las 143 00:11:52,370 --> 00:11:53,870 anteriores todavía no hay inputs 144 00:11:53,870 --> 00:11:56,389 bueno, en la 0 alguno 145 00:11:56,389 --> 00:12:01,009 puedo ver déjame un segundo que me meta vale aquí lo tenemos en la tarea 2 146 00:12:03,210 --> 00:12:10,029 si no me equivoco no pongo que inputs hay que hacer vale ya no me acuerdo a veces pero creo 147 00:12:10,029 --> 00:12:16,029 que no entonces podéis poner los que queráis sí que es verdad que os pediría que puede ser 148 00:12:16,029 --> 00:12:20,230 joystick derecho del gamepad o teclas adicionales del teclado hago referencias en ocasiones 149 00:12:20,230 --> 00:12:23,870 a elementos, pero sí 150 00:12:23,870 --> 00:12:26,009 yo voy a poder verlo con los 151 00:12:26,009 --> 00:12:29,629 cuando habrá vuestro proyecto 152 00:12:29,629 --> 00:12:31,830 los project settings se guardan, entonces 153 00:12:31,830 --> 00:12:34,649 yo podré verlo, sí, pero intentad 154 00:12:34,649 --> 00:12:37,350 si es que si no me equivoco, sí que lo 155 00:12:37,350 --> 00:12:41,250 poní en algún punto, intentad que sea 156 00:12:41,250 --> 00:12:43,669 con la combinación de teclas WAS, entiendo 157 00:12:43,669 --> 00:12:47,049 esto también por si ocurre en algún momento, teclado 158 00:12:47,049 --> 00:12:48,730 ordenador, cuando digo 159 00:12:48,730 --> 00:13:10,669 cuando digo las teclas WAS, son, a ver si me meto aquí en el teclado, la W para ir hacia adelante o subir, vamos, es la cruceta que tenemos aquí, que también se suele duplicar, esta cruceta se traslada a la W como la flecha de arriba, a la de izquierda, ese de abajo, de derecha, por si acaso. 160 00:13:10,669 --> 00:13:18,549 Entonces, los suyos que uséis, de hecho, dupliquéis esta cruceta y esta 161 00:13:18,549 --> 00:13:20,929 Que es como viene por defecto además en los ejes 162 00:13:20,929 --> 00:13:26,769 En este sentido tampoco deberíais trastear o variar demasiado los que ya vienen preparados 163 00:13:26,769 --> 00:13:30,590 En la horizontal vais a ver eso, que A y D se refieren a los laterales 164 00:13:30,590 --> 00:13:36,110 Las flechas en el teclado, las que corresponden a izquierda y derecha en este WASD 165 00:13:36,110 --> 00:13:41,269 pero también tiene la alternativa, bueno, se complementa con Lord del teclado aquí, 166 00:13:41,809 --> 00:13:45,690 tanto si tocamos la tecla de la flecha izquierda como si tocamos la A, 167 00:13:46,389 --> 00:13:52,970 haría la misma acción mediante este horizontal y vertical vais a ver que es arriba-abajo o SW, 168 00:13:52,970 --> 00:14:01,509 que también son las correspondientes a WASD, entonces intentad que sea a través de esas. 169 00:14:01,509 --> 00:14:05,750 luego por ejemplo para la rotación 170 00:14:05,750 --> 00:14:07,730 tu BQ 171 00:14:07,730 --> 00:14:09,789 vale, pues también se puede 172 00:14:09,789 --> 00:14:11,049 sí, sí, sí, sin problema 173 00:14:11,049 --> 00:14:12,669 yo luego lo voy a poder ver 174 00:14:12,669 --> 00:14:15,809 siempre que me compartáis el proyecto de Unity 175 00:14:15,809 --> 00:14:17,570 lo digo porque más adelante también 176 00:14:17,570 --> 00:14:19,990 y probablemente en posteriores tareas 177 00:14:19,990 --> 00:14:20,970 os lo pido así 178 00:14:20,970 --> 00:14:22,409 una cosa es 179 00:14:22,409 --> 00:14:25,970 esto ya es avanzar un poco, pero lo que os pido es que me compartáis el proyecto 180 00:14:25,970 --> 00:14:27,649 quitando el library 181 00:14:27,649 --> 00:14:29,990 si es posible, más que nada para que no pese 182 00:14:29,990 --> 00:14:32,389 Todavía en estas tareas no es súper pesado el proyecto 183 00:14:32,389 --> 00:14:33,750 Yo voy a ver 184 00:14:33,750 --> 00:14:35,350 Al abrir aquí, al cargar el proyecto 185 00:14:35,350 --> 00:14:37,669 Voy a ver vuestros project settings como los habéis configurado 186 00:14:37,669 --> 00:14:38,789 Pero ojo 187 00:14:38,789 --> 00:14:41,309 También si hacéis la cabeza en otro momento 188 00:14:41,309 --> 00:14:42,950 A lo mejor lo que os pido es que me compartáis 189 00:14:42,950 --> 00:14:45,509 No el proyecto en sí, todo lo que es el proyecto 190 00:14:45,509 --> 00:14:47,149 Sino que me compartáis 191 00:14:47,149 --> 00:14:49,149 Por ejemplo esto 192 00:14:49,149 --> 00:14:51,090 Una parte de 193 00:14:51,090 --> 00:14:53,769 Vuestro videojuego, de vuestra aplicación 194 00:14:53,769 --> 00:14:54,950 Como un package 195 00:14:54,950 --> 00:14:57,169 Y un package al final lo que hace es guardar 196 00:14:57,169 --> 00:14:58,789 Todo esto que tenemos aquí, los scripts 197 00:14:58,789 --> 00:15:08,429 Los assets, incluso si nos metemos en las escenas, hasta la jerarquía y todo lo relacionado con la escena. 198 00:15:08,830 --> 00:15:17,210 Pero es verdad que lo que es el proyecto en sí, que es un orden superior, que está fuera de lo que es la escena y todo se supedita a lo que vayamos poniendo aquí, 199 00:15:17,350 --> 00:15:24,629 eso ahí no lo voy a tener. Entonces en ocasiones, si me ponéis controles que se salen, en otros sí que ser específico, 200 00:15:24,629 --> 00:15:26,870 Pues tenéis que hacer que la izquierda sea con tal tecla, ¿no? 201 00:15:27,350 --> 00:15:37,789 Si me vais a hacer algo diferente, deberíais indicarlo, a lo mejor en el código mediante comentarios o, bueno, en la entrega de la tarea me lo indicáis, ¿vale? 202 00:15:38,129 --> 00:15:43,070 Si llegara el caso de eso. Normalmente en la propia tarea se indica. 203 00:15:44,450 --> 00:15:46,730 ¿Vale? No sé si me estoy explicando. 204 00:15:48,889 --> 00:15:52,519 ¿Vale? ¿Sí? Vale. 205 00:15:53,740 --> 00:15:54,500 Más dudas. 206 00:15:57,840 --> 00:15:58,879 ¿Tengo que ir a esta manera? 207 00:15:58,879 --> 00:16:08,220 Vale, me pregunta una compañera. Una pregunta. Todas las veces que habrá Unity tengo que ir a External Tools y cambiarlo para Visual Studio. ¿Es normal? ¿Resulta un poco incómodo? 208 00:16:08,220 --> 00:16:26,820 No, debería quedarse por defecto cuando abrimos Edit y Preferencias. Bueno, lo que ponía en los apuntes, que hay que escoger mediante esta opción de External Tools, habría que seleccionar de este desplegable el que os corresponda. 209 00:16:26,820 --> 00:16:34,179 En este caso, 2019, el Visual Studio 2019 o 2022, va a dar un poco igual los suyos que escogéis el 2022. 210 00:16:34,379 --> 00:16:46,740 En este ordenador, por lo que sea, tengo 2019 y no debería ser buscar aquí por Browse, debería ser seleccionarlo aquí y una vez se tiene aquí y se guarda proyecto y se cierra, debería estar ya seleccionado. 211 00:16:47,440 --> 00:16:56,700 No hay que cambiarlo todas las veces, ¿no? El tuyo no se guarda, pero ¿te sale en el desplegable la versión? Sí. 212 00:16:59,419 --> 00:17:02,639 Pues no sé por qué puede ser, entonces. 213 00:17:08,269 --> 00:17:11,250 Debería funcionar. Nunca me he topado con este problema. 214 00:17:13,769 --> 00:17:19,710 Porque en tu caso... Ya has conseguido, lo digo porque con esta compañera hubo conflictos al principio. 215 00:17:20,170 --> 00:17:26,730 ¿Conseguiste que el Unity corriera sin ser administrador de manera normal en los proyectos? 216 00:17:27,950 --> 00:17:30,190 Sí, vale. Eso está resuelto. 217 00:17:30,190 --> 00:17:47,029 Pues te lo tendría que mirar porque es una de esas cosas que a mí nunca me ha ocurrido. Por ejemplo, para que os hagáis una idea, yo si aquí escojo 2022, ¿vale? Y cierro el proyecto. Bueno, lo guardo primero y lo cierro. Si ahora lo vuelvo a abrir, ¿vale? Estoy en Unity Hub y lo vuelvo a abrir. 218 00:17:47,029 --> 00:17:48,910 cuidado un segundico 219 00:17:48,910 --> 00:17:51,250 bueno, se está abriendo en el otro monitor, no lo veis 220 00:17:51,250 --> 00:17:52,250 pero se está abriendo el proyecto 221 00:17:52,250 --> 00:17:57,549 yo ahora cuando me meta aquí 222 00:17:57,549 --> 00:17:58,710 en edit 223 00:17:58,710 --> 00:18:01,170 preferencias, external tools 224 00:18:01,170 --> 00:18:03,089 ves que se mantiene al que he cambiado 225 00:18:03,089 --> 00:18:05,490 entonces no lo sé, te lo tendría que mirar 226 00:18:05,490 --> 00:18:07,309 porque bueno, habría que buscarlo 227 00:18:07,309 --> 00:18:09,410 yo no tengo 228 00:18:09,410 --> 00:18:11,490 no tengo claro por qué ocurre eso 229 00:18:11,490 --> 00:18:13,289 vale 230 00:18:13,289 --> 00:18:16,940 vale, a ver una cosa 231 00:18:16,940 --> 00:18:17,720 perdonad 232 00:18:17,720 --> 00:18:20,900 que me está abriendo aquí un código 233 00:18:20,900 --> 00:18:22,900 buenas, esperad un segundo 234 00:18:22,900 --> 00:18:24,180 perdón, sí dime 235 00:18:24,180 --> 00:18:26,640 sí, pero estoy dando clase 236 00:18:26,640 --> 00:18:30,460 sí, sí, sin problema 237 00:18:30,460 --> 00:18:33,990 entra, entra, vale 238 00:18:33,990 --> 00:18:35,029 a ver 239 00:18:35,029 --> 00:18:37,690 vale, perdón 240 00:18:37,690 --> 00:18:40,509 que estaba aquí con esto 241 00:18:40,509 --> 00:18:42,529 que han entrado al estudio 242 00:18:42,529 --> 00:18:44,349 vale, alguna duda más 243 00:18:44,349 --> 00:18:46,230 así que os pueda surgir 244 00:18:46,230 --> 00:18:48,250 de 245 00:18:48,250 --> 00:18:50,930 sobre todo los primeros temas 246 00:18:50,930 --> 00:19:08,789 Y mientras estoy, he cambiado justo a Visual Studio 2022 para tener el más parecido a vosotros, aunque si escogéis el 2019 realmente no vais a notar mucha diferencia si también lo tuvierais ya instalado porque pusisteis otra versión de Unity o lo que sea. 247 00:19:08,789 --> 00:19:11,309 aparte de 248 00:19:11,309 --> 00:19:14,470 que haya que configurar en cada ocasión 249 00:19:14,470 --> 00:19:16,089 entrar a external tools 250 00:19:16,089 --> 00:19:18,190 y configurarlo, más o menos os está funcionando 251 00:19:18,190 --> 00:19:19,950 bien de cara a la tarea, estáis teniendo 252 00:19:19,950 --> 00:19:22,250 estáis teniendo 253 00:19:22,250 --> 00:19:23,250 así dificultades 254 00:19:23,250 --> 00:19:33,339 a ver un segundillo 255 00:19:33,339 --> 00:19:41,480 a ver, espera que os leo 256 00:19:41,480 --> 00:19:42,920 Unity a mi me va bien, vale 257 00:19:42,920 --> 00:19:45,299 si que hubo con algunos compañeros que hubo 258 00:19:45,299 --> 00:19:47,339 algún conflictillo así al arrancar 259 00:19:47,339 --> 00:19:49,539 pero menos esto que me acaban de decir 260 00:19:49,539 --> 00:19:51,460 que dentro de lo malo es algo menor 261 00:19:51,460 --> 00:20:10,099 Pero me da miedo que indique algo más preocupante, pero bueno, si el resto de cosas funciona bien, pues igual tenemos que mirar qué es que no se está guardando. En general bien. Vale, ¿cómo vais con lo...? ¿Visteis las tutorías que dejé grabadas? Vamos, que se correspondían con el año pasado. 262 00:20:10,099 --> 00:20:35,519 Lo digo por si no, nos ponemos a ver alguna cosilla que no estaba en esos vídeos y vamos a ello. ¿Sí? ¿Más o menos os queda claro? ¿Ya está? Ah, vale, genial. Vais siguiendo, ¿no? Y perfecto. Sí, me piden palabra, cuéntame. 263 00:20:35,519 --> 00:20:38,039 hola, es una duda que a lo mejor 264 00:20:38,039 --> 00:20:39,859 está fuera del temario 265 00:20:39,859 --> 00:20:41,839 actual, pero es que tengo una duda con 266 00:20:41,839 --> 00:20:43,779 las escenas, no sé si lo 267 00:20:43,779 --> 00:20:45,759 puedes resolver, en plan, no sé cuándo 268 00:20:45,759 --> 00:20:47,319 hay que crear una escena 269 00:20:47,319 --> 00:20:50,019 porque es que yo estoy avanzando para el tema del proyecto 270 00:20:50,019 --> 00:20:51,779 vale, entonces 271 00:20:51,779 --> 00:20:53,839 no sé cuándo debería cambiar de escena 272 00:20:53,839 --> 00:20:55,119 o hacer otra escena diferente 273 00:20:55,119 --> 00:20:57,240 o... 274 00:20:57,240 --> 00:20:59,720 sí, eso ya se verá en su momento 275 00:20:59,720 --> 00:21:01,619 vale, y es 276 00:21:01,619 --> 00:21:03,759 bastante más avanzado, eso lo veremos 277 00:21:03,759 --> 00:21:04,559 en el tema 278 00:21:04,559 --> 00:21:07,339 cuatro empezaremos a ver eso 279 00:21:07,339 --> 00:21:08,799 vale, vale, entonces yo me adelanto 280 00:21:08,799 --> 00:21:11,000 simplemente 281 00:21:11,000 --> 00:21:13,240 así como introducción te diré 282 00:21:13,240 --> 00:21:15,259 que las escenas, estas escenas 283 00:21:15,259 --> 00:21:17,180 que vamos creando son como los distintos niveles 284 00:21:17,180 --> 00:21:18,920 de nuestro juego, entonces 285 00:21:18,920 --> 00:21:21,200 dependiendo un poco del juego, las escenas pueden 286 00:21:21,200 --> 00:21:22,099 tener un funcionamiento 287 00:21:22,099 --> 00:21:23,720 u otro 288 00:21:23,720 --> 00:21:27,279 por ejemplo, si tienes 289 00:21:27,279 --> 00:21:28,700 un juego, pues yo que sé, de puzles 290 00:21:28,700 --> 00:21:31,160 y cada nivel es 291 00:21:31,160 --> 00:21:32,880 independiente, es decir 292 00:21:32,880 --> 00:21:53,400 Es un Tetris, van cayendo las piezas y si superas tal puntuación pasas a otro escenario, a otra forma de la escena. Ahí lo que sería, sería cargar el siguiente escenario, una vez se ha llegado a esa puntuación, pues dice carga al siguiente nivel y el siguiente nivel lo que es, es otro escenario. 293 00:21:53,400 --> 00:21:57,599 De hecho, no, se empieza a ver en el tema 3, perdón, que ahí se ve algo en la tarea. 294 00:21:59,299 --> 00:22:04,420 Pero eso, ahí habrá que ir cargando, porque por código podemos ir diciendo, ahora que se abra esta escena, ¿no? 295 00:22:04,420 --> 00:22:11,400 Si es que yo tengo hecho ya una parte de un videojuego, que va a ser para el proyecto, bueno, estoy mirando eso, 296 00:22:11,859 --> 00:22:16,839 y tengo una escena principal, que es el menú principal del juego, con las opciones, iniciar el juego y salir, 297 00:22:16,839 --> 00:22:23,039 y me cambiaría escena, pero es que luego, por ejemplo, se mueve el personaje en distintos mundos, por así decir, 298 00:22:23,400 --> 00:22:27,200 Y ahí no sé si hacer un cambio de escena o... Es que ahora mismo lo tengo en la misma escena todo. 299 00:22:27,819 --> 00:22:33,380 Pero, claro, ¿sería como que al irse moviendo el personaje abre más espacios o algo así? 300 00:22:33,380 --> 00:22:42,000 No, literalmente tengo como un teletransportarse. Le da al botón que yo tengo puesto de input, que es la E, y me cambia a otro escenario. 301 00:22:42,619 --> 00:22:52,799 No, en ese caso, lo suyo, para intentarnos sobrecargar, depende un poco de la carga, pero lo suyo sería que tengas un nivel que se arranca por defecto 302 00:22:52,799 --> 00:22:57,440 y cuando le des a esa tecla E que tiene el poder o la capacidad de teletransportarse, por lo que entiendo, 303 00:22:57,960 --> 00:22:59,000 ahí cargue el otro nivel. 304 00:22:59,240 --> 00:23:02,799 A menos... Bueno, no, eso sería lo óptimo. 305 00:23:03,240 --> 00:23:14,039 A menos... Depende un poco de cuánto de intensivo sea lo que pide al ordenador ese nuevo nivel, 306 00:23:14,180 --> 00:23:20,500 porque sí que es verdad que si ya está cargado, al darle a la E ya digamos que es variar algunos elementos 307 00:23:20,500 --> 00:23:22,440 si está todo dentro de la escena, es casi activar 308 00:23:22,440 --> 00:23:24,519 y desactivar elementos, más que cambiar de escena 309 00:23:24,519 --> 00:23:26,380 pero si 310 00:23:26,380 --> 00:23:28,200 es una escena compleja, etcétera 311 00:23:28,200 --> 00:23:29,980 lo suyo es tener otra escena que se carga 312 00:23:29,980 --> 00:23:32,460 y hay formas de que se vaya precargando 313 00:23:32,460 --> 00:23:34,420 antes para que la transición 314 00:23:34,420 --> 00:23:36,059 sea más rápida, ¿vale? 315 00:23:36,099 --> 00:23:37,759 pero depende un poco también, a veces 316 00:23:37,759 --> 00:23:40,500 es casi mejor no complicarse y hacerlo todo al mismo nivel 317 00:23:40,500 --> 00:23:42,160 pero si son muchos elementos 318 00:23:42,160 --> 00:23:42,720 pues sí 319 00:23:42,720 --> 00:23:46,119 más que nada, depende del juego 320 00:23:46,119 --> 00:23:47,819 claro, tendríamos que ver más cosas, pero 321 00:23:47,819 --> 00:23:49,440 más que nada porque 322 00:23:49,440 --> 00:23:53,059 al cambiar de escena no es solo cambiar el escenario 323 00:23:53,059 --> 00:23:54,740 digamos, tiene que conservar 324 00:23:54,740 --> 00:23:56,259 pues a lo mejor la posición del personaje 325 00:23:56,259 --> 00:23:58,980 ¿no? entonces si estás en el mismo 326 00:23:58,980 --> 00:24:00,259 nivel, ¿el qué verdad? 327 00:24:00,740 --> 00:24:02,920 que la escala y todo también se tiene que conservar 328 00:24:02,920 --> 00:24:04,819 claro, si estás en el mismo nivel es fácil 329 00:24:04,819 --> 00:24:06,900 porque al final es activar y desactivar elementos 330 00:24:06,900 --> 00:24:08,559 si no pues es que conserve 331 00:24:08,559 --> 00:24:10,940 valores 332 00:24:10,940 --> 00:24:12,700 tampoco es configurarlo 333 00:24:12,700 --> 00:24:12,960 vaya 334 00:24:12,960 --> 00:24:16,400 me preguntan 335 00:24:16,400 --> 00:24:17,859 sí dime, dime, perdón 336 00:24:17,859 --> 00:24:47,839 Ah, no, no, no, que muchas gracias. 337 00:24:47,859 --> 00:25:08,480 Que cuando lanzamos el juego se hace una copia, varias, lo que se pide. Eso es la tarea 1. Luego en la tarea 2 pasamos a otro proyecto, que podéis crear otra escena, que beba de ahí, pero es verdad, a lo que me refería es que si quiero hacer otro nivel sería hacer otra escena. 338 00:25:08,480 --> 00:25:31,420 Sí, exacto. Las escenas así, la primera interpretación que le tendríamos que dar es que son niveles, niveles que se pueden ir cargando y pasando de uno a otro. Sí que es verdad, imaginaos que estáis en un juego de mundo abierto, ¿vale? Y estáis caminando y claro, pues bueno, esto ya es un juego que se japa un poco a mis conocimientos, ¿no? 339 00:25:31,420 --> 00:25:34,599 Pero imaginaos que estáis jugando a un Red Dead Redemption, que el mapa es gigantesco. 340 00:25:35,259 --> 00:25:41,480 Claro, no se carga todo el mapa de una, ni de broma, claro, se van cargando, ellos usarán métodos más refinados, ¿vale? 341 00:25:41,480 --> 00:25:47,900 Pero como en un juego de mundo abierto que vas caminando, al irte aproximando a los límites, a lo mejor, de lo que se carga al principio, 342 00:25:48,059 --> 00:25:56,579 cuando sigues la carretera y llegas al final, pues habrá un collider o habrá un detector de que te estás acercando a ese límite 343 00:25:56,579 --> 00:26:16,599 Y de forma dinámica se carga también el siguiente nivel del espacio que está al ir avanzando. Pues imaginaos, como estáis viendo en mi pantalla, si veis la cuadrícula, a lo mejor se carga el espacio correspondiente a esta cuadrícula y ahí está el personaje pequeñito y no se ve que no está cargado el resto. 344 00:26:16,599 --> 00:26:18,680 cuando nos vamos acercando a este límite 345 00:26:18,680 --> 00:26:21,079 en vivo se mantiene este 346 00:26:21,079 --> 00:26:22,220 y se carga a otro nivel 347 00:26:22,220 --> 00:26:25,240 es por lo que decía que depende del juego 348 00:26:25,240 --> 00:26:27,579 si el juego es un Tetris las pantallas son independientes 349 00:26:27,579 --> 00:26:28,779 son niveles independientes 350 00:26:28,779 --> 00:26:30,680 cuando se van cargando 351 00:26:30,680 --> 00:26:32,619 y tiene que parecer que es una sucesión 352 00:26:32,619 --> 00:26:34,559 sin costura 353 00:26:34,559 --> 00:26:36,799 cuando nos vamos acercando se cargará 354 00:26:36,799 --> 00:26:38,519 a este nivel y estarán los dos 355 00:26:38,519 --> 00:26:40,720 incluso cuando ya avancemos y nos metamos aquí 356 00:26:40,720 --> 00:26:42,640 en esta cuadrícula, cuando estemos aquí 357 00:26:42,640 --> 00:26:45,019 ya no se vea nada del resto de cuadrículas 358 00:26:45,019 --> 00:26:46,099 porque estamos metidos ahí 359 00:26:46,099 --> 00:26:50,660 Se descarga y los recursos se relajan, digamos, de este nivel 360 00:26:50,660 --> 00:26:54,640 Y nos quedamos en este, que luego, si tenemos configurado que la carretera sigue por aquí 361 00:26:54,640 --> 00:26:57,980 Y aquí abrimos otro espacio, pues pasará lo mismo 362 00:26:57,980 --> 00:27:02,019 Se van de manera dinámica, o de manera aditiva se diría 363 00:27:02,019 --> 00:27:04,779 Se van cargando y descargando niveles, ¿vale? 364 00:27:04,819 --> 00:27:06,039 Para no tener todo abierto 365 00:27:06,039 --> 00:27:09,200 Todo depende un poco del juego 366 00:27:09,200 --> 00:27:12,099 Es una forma de ir gestionando los recursos 367 00:27:12,099 --> 00:27:31,779 Porque claro, tú no puedes tener mapas inmensos con 85.000 cosas a la vez y que se cargue además a la vez. Pues hay formas de irlo gestionando, ¿no? De esas cosas ya se hablará. Sobre todo entre niveles independientes, de eso vais a hacer y de que se vayan cargando escenas también veremos algo. 368 00:27:31,779 --> 00:28:08,789 Si se vayan cargando, digo, espacios de manera aditiva. Más cosas. Si no, pues explico un par de cosillas y que me digáis. La próxima tutoría ya sí que, también espero que hayáis podido tener tiempo, porque tampoco ha habido plazo de ver la unidad 2 y empezar con la tarea y ahí surgirán más dudas concretas, imagino. 369 00:28:09,789 --> 00:28:14,450 Pero bueno, la primera unidad, yo creo que en los vídeos queda bien explicado cómo se hace la tarea 1, 370 00:28:14,990 --> 00:28:19,089 la 0 también se dibuja, voy a dar de hecho alguna indicación ahora, 371 00:28:19,089 --> 00:28:28,430 y también, incluso de la tarea 0, hablar de algunos apuntes que ya se introducen en el tema 2 de las interacciones. 372 00:28:29,430 --> 00:28:32,029 Entonces, bueno, si no hay más dudas, eso, tiro por ahí. 373 00:28:33,750 --> 00:28:35,829 Eso, si tenéis dudas, prefiero resolverlas, claro. 374 00:28:35,829 --> 00:28:46,880 vale vale si nadie dice nada pues voy adelante con ello perfecto a ver que yo tengo aquí preparadas 375 00:28:46,880 --> 00:28:55,160 algunas cosillas vale en las grabaciones de las tutorías iba hablando pues eso de operaciones 376 00:28:55,160 --> 00:29:05,539 entre entre números la aparición de los vectores los vector 3 los vector 2 eso voy a ir hablando 377 00:29:05,539 --> 00:29:10,640 de algunos operadores como el booleano que creo que no introducía así por encima pues algo que 378 00:29:10,640 --> 00:29:16,940 me parece bastante importante vale que es y voy a hacer aquí un script nuevo vale para ir usando 379 00:29:16,940 --> 00:29:25,579 durante la tutoría de llamar yo que sé explicaciones tutoría 4 4 yo que sé mínimamente y lo hablo por 380 00:29:25,579 --> 00:29:36,039 aquí. Esto de poner un 4 aquí, de hecho lo voy a cambiar, ya es mala práctica. Voy 381 00:29:36,039 --> 00:29:40,980 a poner tool 4. De hecho, una de las cosas que os digo es para que no genere conflicto, 382 00:29:41,099 --> 00:29:46,440 intentad evitar, en la medida de lo posible, incluir números en el nombre de los scripts 383 00:29:46,440 --> 00:29:51,160 o de las clases, básicamente, que en este caso sería lo mismo. Dame un segundo que 384 00:29:51,160 --> 00:30:06,900 abre a esto y lo cambia aquí para que sea el mismo. Vale, vamos allá. Entonces, os hablé de los booleanos, si me repito me interrumpís, si voy rápido me interrumpís, ¿vale? 385 00:30:08,579 --> 00:30:17,400 Hablábamos de que uno de los tipos de variables que se pueden generar son los booleanos, ¿no? Por ejemplo, booleano es estar vivo, para decirle al jugador si está vivo o no. 386 00:30:17,400 --> 00:30:26,839 Si lo que decíamos los booleanos son un 1 o un 0, que si es un 1 es un valor positivo, si es un 0 es un valor negativo 387 00:30:26,839 --> 00:30:34,339 Básicamente lo que nos sirve esto es para sobre todo introducir condiciones que en las estructuras de control condicionales 388 00:30:34,339 --> 00:30:39,339 Pues nos permitan que ocurran ciertas acciones o no ocurran esas acciones y ocurran otras 389 00:30:39,339 --> 00:31:05,299 Entonces, por ejemplo, si empezamos el juego y decimos que al arrancar ya por defecto lo inicializamos como true, si por algún motivo queremos que haya una opción, queremos que ocurra algo que pasa a ser lo opuesto, es decir, cuando estamos escribiendo el código no en todo momento a medida que vamos haciendo operaciones sabemos si vivo vale verdadero o falso. 390 00:31:05,299 --> 00:31:23,339 Pero sí que nos puede interesar, por ejemplo, al activar un interruptor, y de hecho lo voy a llamar interruptor, que es mejor ejemplo, cuando vamos a una habitación, puede que al decirle pulsa aquí, no sea la acción la que queramos decirle si se enciende o se apaga. 391 00:31:23,339 --> 00:31:41,500 Igual cuando vamos a cierto momento no queremos decirle no. Cuando tú pulses aquí queremos que valga falso. ¿Por qué? Porque un interruptor normalmente si lo que hacemos es pulsarlo, lo que hacemos es activar o desactivar. Si está activado, desactiva. Si está desactivado, activa. Hace la operación opuesta. 392 00:31:41,500 --> 00:31:54,400 Hay un operador que no estaba visto y es interesante que conozcáis, que es este de la exclamación como para indicar contrario a, como lo opuesto a. 393 00:31:54,880 --> 00:32:06,220 Entonces, si ponemos aquí interruptor, lo que estamos diciendo es que dentro de la variable interruptor, que en este momento vale true, pues se guarde lo contrario a lo que tenga. 394 00:32:06,220 --> 00:32:09,299 este operador en este caso, en este contexto 395 00:32:09,299 --> 00:32:11,400 no tendría sentido por ejemplo con variables de tipo 396 00:32:11,400 --> 00:32:13,339 numérico, porque no puede 397 00:32:13,339 --> 00:32:14,559 decir lo contrario a 5 398 00:32:14,559 --> 00:32:17,180 nuestra cabeza podría decir 399 00:32:17,180 --> 00:32:19,039 el negativo en R5, pero no es eso 400 00:32:19,039 --> 00:32:21,380 un negativo y un positivo no es 401 00:32:21,380 --> 00:32:22,880 estrictamente lo contrario tampoco 402 00:32:22,880 --> 00:32:25,299 entonces sirve sobre todo 403 00:32:25,299 --> 00:32:27,220 para las booleanas, entonces este 404 00:32:27,220 --> 00:32:29,220 operador es muy importante porque va a haber operaciones 405 00:32:29,220 --> 00:32:31,299 que a lo mejor estamos haciendo un montón de 406 00:32:31,299 --> 00:32:32,980 cosas y lo que queremos no es que sea 407 00:32:32,980 --> 00:32:34,160 decir en ese momento 408 00:32:34,160 --> 00:32:57,400 Entonces, si yo pulso, ¿no? Si yo pulso, bueno, aquí se me ha puesto... Espera. Si yo pulso, ¿vale? Lo pongo con texto cotidiano, coloquial. Si yo pulso, pues quiero que lo que valga aquí pase a ser lo contrario, ¿vale? Esto se consigue con ese operador de contrario, ¿vale? 409 00:32:57,400 --> 00:33:11,819 Entonces, ¿qué ocurre? Que cuando llegamos aquí y tú pulsas, pues el interruptor pasa, en este caso, a ser falso. Si en el momento que llegáramos el interruptor variara falso, pasaría a ser verdadero, ¿vale? 410 00:33:11,819 --> 00:33:36,119 Lo hago con un ejemplo muy rápido, pero como siempre, si yo aquí hago un debug log y digo que vale interruptor, para ver qué valor tiene, si yo ahora le vinculo el script, que tiene que ser este de explicaciones, porque creo que no tengo otro script aplicado. 411 00:33:36,119 --> 00:33:51,140 Vale, perfecto. Y borro este que lo tenía antes de las pruebas. Remove. Si yo ahora lanzo este script, va a poner true, porque es lo que tenemos guardado. True, enséñame lo que vale interruptor. 412 00:33:51,140 --> 00:34:06,200 Por lo contrario, si yo pongo que interruptor, lo que había puesto antes, sea lo opuesto a interruptor, pues veréis que ahora lo que va a indicar, guardo lo que va a indicar y vuelvo a ejecutar, lo que va a indicar ahora es falso. 413 00:34:06,200 --> 00:34:10,079 ¿vale? ¿esto qué significa? bueno, pues si hacemos esto 414 00:34:10,079 --> 00:34:13,360 en el update, por ejemplo 415 00:34:13,360 --> 00:34:17,559 ¿vale? vais a ver que lo que va a estar es alternando todo el rato entre uno y otro 416 00:34:17,559 --> 00:34:20,800 fotograma, fotograma, va a ir alternando 417 00:34:20,800 --> 00:34:25,840 true, false, true, false, true, false, lo vais viendo, bueno, no para de ejecutarse 418 00:34:25,840 --> 00:34:29,980 pero eso, es una consecución de apagarse, encenderse, apagarse 419 00:34:29,980 --> 00:34:34,039 encenderse, ¿vale? que sepáis que esta lógica existe porque habrá ocasiones 420 00:34:34,039 --> 00:34:55,320 en las que es útil. Esta exclamación también sirve para las condiciones. Por ejemplo, imaginaos, voy a alestar de nuevo, y yo pongo una condición que es if, 421 00:34:55,320 --> 00:35:11,960 ¿No? Esto entiendo que más o menos ya vais viendo cómo funciona, ¿no? Lo de las estructuras de control, si no me decís y lo revisamos, pero ponemos si interruptor es igual a verdadero, ¿vale? 422 00:35:11,960 --> 00:35:23,539 Pues entonces voy a poner una instrucción que sea que se muestre un mensaje, no voy a poner el valor, sino que ponga un mensaje de está encendido. 423 00:35:25,079 --> 00:35:32,239 Entonces, ahora mismo, como se cumple esa condición de que interruptor es true porque nada lo ha cambiado, pues llega aquí y dice interruptor es igual a true. 424 00:35:32,239 --> 00:35:49,659 Sí, pues vale, voy a mostrar, el texto está encendido. ¿Qué ocurre? Que si aquí ponemos, y esto también solo sirve para las booleanas, bueno, cuando digo solo, siempre puede haber excepciones, pero esto sobre todo se usa para las booleanas. 425 00:35:49,659 --> 00:36:11,739 Os podéis encontrar que la condición sea esta. Pone sí, interruptor solo. Y dice, vale, pero interruptor igual a qué. Cuando se está hablando en la condición, se está poniendo una variable que es booleana, solo con poner interruptor significa que si interruptor es verdadero, es decir, interruptor sí o interruptor existe, es lo mismo que poner lo que estaba puesto antes. 426 00:36:11,739 --> 00:36:40,300 Es decir, podéis llegar aquí y es exactamente lo mismo. Si interruptor existe, strut, pues vais a ver que ahora cuando lanzo pone otra vez encendido. De hecho, si yo pusiera interruptor strut y si no, pues pongo interruptor está apagado, para que veáis que funciona, pues vais a ver que ahora lo que va a mostrar no es está encendido. 427 00:36:40,300 --> 00:36:56,650 Bueno, perdón, va a mostrar que está encendido. Si yo aquí pusiera false, voy a agrandar esto para que no moleste tanto, vais a ver que ahora la condición no se cumple y pasa aquí. 428 00:36:56,650 --> 00:37:10,909 Aquí no pone ningún operador de este tipo, ni de diferente, ni de nada. Entonces, cuando yo le dé, vais a ver que lo que está mostrando es que está apagado. 429 00:37:10,909 --> 00:37:25,050 Lo hago para que lo veáis y vais a ver que ahora pone está apagada. Entonces simplemente que a veces veréis esta instrucción como algo suelto y significa que está diciendo que si esto es un booleano verdadero. Eso existe. 430 00:37:25,050 --> 00:37:44,050 Que no es lo mismo que si nos encontramos esto, que os he dicho lo opuesto. Si pone esto es lo opuesto a que exista interruptor, por tanto que sea falsa. Ahora vais a ver que cuando llegamos aquí la condición que se va a ejecutar es esta, porque realmente es lo contrario a interruptor, por tanto es falso. 431 00:37:44,050 --> 00:38:00,969 Y vais a ver que ahora lo que va a poner es está encendido porque se aplica esa condición. Vamos a verlo nuevamente, guardo aquí, y le doy y va a poner está encendido. Entonces, ojo porque eso puede ocurrir en ocasiones. 432 00:38:00,969 --> 00:38:19,429 ¿Vale? Luego también el operador de la exclamación, y ya no solo... Bueno, lo voy a hacer con booleano y luego lo hago con un número. ¿Vale? También existe el operador diferente a true. ¿Vale? 433 00:38:19,429 --> 00:38:41,630 Y aquí lo que estamos diciendo, a diferencia de cuando ponemos los dos iguales, que es el comparativo de igual, es el comparativo de diferencia. Ahora dice si interruptor no es true, que es este caso, pues está encendido. ¿Se va a cumplir? Sí, porque al ser falso no es true. Que sepáis que la exclamación también se usa para eso. 434 00:38:41,630 --> 00:38:51,650 Y está encendido, se cumple y por tanto está ahí. ¿Qué ocurre? Y sigo hablando de este operador de exclamación que es muy importante porque lo encontraréis o lo necesitaréis. 435 00:38:51,650 --> 00:39:06,289 Si yo pongo un valor int, que es un número, yo que sé, valor, voy a llamarlo valor, y es un 5, ¿vale? Si llego aquí y la condición es valor es diferente a 5, ¿vale? 436 00:39:06,289 --> 00:39:21,829 Bueno, y aquí me falta un punto y coma. Esto no se va a ejecutar, ¿no? Porque estamos diciendo que si el valor es diferente a 5, que se jute está encendido. Voy a poner, si valor es diferente a 5, es diferente a 5. 437 00:39:21,829 --> 00:39:50,039 Si no, pues es igual a 5, ¿no? Si no, evag.log, bueno, ahora lo escribo mejor, vale 5 y aquí cierro y cierro, ¿vale? Ahora mismo el valor es 5, llega aquí y dice, ¿es diferente de 5? No, por tanto no va a poner que es diferente de 5, porque efectivamente vale 5, ¿vale? 438 00:39:50,039 --> 00:40:00,699 Entonces, veis que con esta operación filtramos que algo sea igual o diferente, porque en ocasiones lo que nos puede interesar es que algo precisamente sea diferente a los distintos valores que podamos tener en el juego, ¿no? 439 00:40:01,440 --> 00:40:12,579 Entonces, yo cuando lanzo ahora esto, va a poner, vale, 5, ¿vale? Que no es lo mismo que si aquí pusiéramos, pues, igual a 5, pues la que lanzaría es esta, ¿vale? 440 00:40:12,579 --> 00:40:34,900 Entonces, este operador, digo, no se había visto y creo que es bastante relevante para las condiciones. ¿Qué tal? ¿Me seguís? A ver, alguien me ha escrito. Vale, es complicado. Bueno, mira, copio el mensaje y lo pongo en la pantalla porque no sé ni cómo leerlo. 441 00:40:34,900 --> 00:40:59,880 Me ha escrito esto de aquí. Me pone diferente true, sería lo mismo que igual false, teniendo solo true y false. Exactamente. Porque recordad, vuelvo a decirlo, esto de diferente, cuando se pone delante del nombre de la variable, como hacíamos antes con esto, pues solo tiene sentido, o principalmente sentido, en las variables booleanas. 442 00:40:59,880 --> 00:41:16,599 Por eso que digo que puedes pasar de un valor a otro. Cuando lo hacemos aquí, con valores que pueden tener infinitos resultados, como es un ínteger, que puede ser cualquier número positivo o negativo, el cero, aquí es diferente a este valor, pero puede ser cualquier otro. 443 00:41:16,599 --> 00:41:21,539 luego hay otra cosa que también os podéis encontrar 444 00:41:21,539 --> 00:41:23,599 y se usa mucho para prevenir que ocurran 445 00:41:23,599 --> 00:41:25,679 errores en el código, pues ya habréis notado 446 00:41:25,679 --> 00:41:27,400 que esta, lo vuelvo a poner aquí 447 00:41:27,400 --> 00:41:29,639 que esta línea roja sale mucho 448 00:41:29,639 --> 00:41:31,420 y si sale esa línea roja da problemas 449 00:41:31,420 --> 00:41:33,659 de ejecución del juego, por tanto no pueden 450 00:41:33,659 --> 00:41:35,360 funcionar, es 451 00:41:35,360 --> 00:41:37,699 usar el concepto de null 452 00:41:37,699 --> 00:41:39,820 de nulo, ¿vale? y nulo en programación 453 00:41:39,820 --> 00:41:41,260 significa algo que no existe 454 00:41:41,260 --> 00:41:43,340 ¿qué quiere decir esto? 455 00:41:43,679 --> 00:41:44,559 que a lo mejor 456 00:41:44,559 --> 00:42:00,480 Por ejemplo, tenemos aquí, sería LicePill, y esto ya os suena, y creamos un GameObject, cuando hagáis la práctica, la tarea de instanciación, una instancia. 457 00:42:00,480 --> 00:42:15,420 Y puede ser que en cierto momento nosotros digamos, instantiate, voy a copiarlo de otro lado que lo tengo ya hecho y así no tardo de más. 458 00:42:15,420 --> 00:42:20,440 instanciate 459 00:42:20,440 --> 00:42:22,800 bueno, sí, instanciate 460 00:42:22,800 --> 00:42:24,099 y voy a ir a la 461 00:42:24,099 --> 00:42:26,460 más básica que sería instanciar 462 00:42:26,460 --> 00:42:28,000 si 463 00:42:28,000 --> 00:42:30,639 yo 464 00:42:30,639 --> 00:42:32,280 intento hacer esto y lanzo el juego 465 00:42:32,280 --> 00:42:33,539 vale 466 00:42:33,539 --> 00:42:36,239 va a poner error 467 00:42:36,239 --> 00:42:38,480 ¿por qué? porque hay una instancia 468 00:42:38,480 --> 00:42:40,800 vale, esto que hemos dejado aquí está vacío 469 00:42:40,800 --> 00:42:42,900 y no existe, entonces no sabe qué hacer 470 00:42:42,900 --> 00:42:44,719 y pone la variable 471 00:42:44,719 --> 00:42:51,019 la instancia de la clase en explicaciones tut4 no ha sido asignado y el juego se detiene no es 472 00:42:51,019 --> 00:42:56,539 que se puede hacer mucho más es que hay un error grave no a veces para evitar eso porque en 473 00:42:56,539 --> 00:43:02,780 ocasiones podemos estar haciéndolo en ocasiones no se puede hacer una condicional de que algo 474 00:43:02,780 --> 00:43:08,780 exista vale mira de hecho lo está aconsejando ahí porque está detectando que algo pasa si ponemos y 475 00:43:08,780 --> 00:43:14,780 Y de hecho, con el tabulador, como me salía la sugerencia, pulso el tabulador y lo pongo. 476 00:43:16,019 --> 00:43:19,179 Podemos hacer que haya un comparativo de que algo exista o no. 477 00:43:19,420 --> 00:43:26,539 Y aquí decimos, sí, nosotros hemos hecho esta variable y debería existir, y en teoría la vamos a usar y por eso la hemos creado, 478 00:43:27,000 --> 00:43:33,980 pero en ocasiones a lo mejor estamos jugando un juego y le decimos, cuando le demos al botón izquierdo del ratón, que dispare balas de nuestra arma. 479 00:43:33,980 --> 00:43:37,139 y en ocasiones puede ser que no haya balas 480 00:43:37,139 --> 00:43:38,440 porque la bala sea un prefab 481 00:43:38,440 --> 00:43:41,099 que se lanza la bala físicamente 482 00:43:41,099 --> 00:43:42,699 a lo mejor al arrancar el juego 483 00:43:42,699 --> 00:43:44,659 no hemos cogido ningún power up 484 00:43:44,659 --> 00:43:47,400 ningún ítem que sea el de adquirir balas 485 00:43:47,400 --> 00:43:48,400 entonces está vacío 486 00:43:48,400 --> 00:43:51,079 si no lo hemos contemplado puede que llegue el caso 487 00:43:51,079 --> 00:43:52,699 en el que ocurra esto, estoy poniendo como un ejemplo 488 00:43:52,699 --> 00:43:55,179 que pudiera ocurrir esto, hasta que no cojamos bala 489 00:43:55,179 --> 00:43:56,960 no estamos rellenando este game object 490 00:43:56,960 --> 00:43:58,519 para luego instanciar esas balas 491 00:43:58,519 --> 00:44:01,159 entonces si estamos dando a la condición 492 00:44:01,159 --> 00:44:02,840 de si pulsa y cuando pulses 493 00:44:02,840 --> 00:44:06,800 que se lance la bala. Va a dar error porque va a decir, vale, si yo estoy 494 00:44:06,800 --> 00:44:10,699 haciendo esa operación, pero no instancionada porque no hay nada y sale este mismo error que 495 00:44:10,699 --> 00:44:14,659 estábamos viendo antes. En ocasiones, aquí podemos poner luego más condiciones 496 00:44:14,659 --> 00:44:16,820 en plan, si pulso 497 00:44:16,820 --> 00:44:22,719 gatillo, estoy hablando físico para que lo entendamos, esta condición 498 00:44:22,719 --> 00:44:25,500 que se ejecute lo que hay aquí 499 00:44:25,500 --> 00:44:30,860 tenemos esto y que se ejecute aquí. Pero este 500 00:44:30,860 --> 00:44:35,659 errores porque no está declarada la variable, ni hay un método ni nada, pero en ocasiones 501 00:44:35,659 --> 00:44:41,059 para directamente evitarnos el error de que algo no funcione, porque aquí instancia no 502 00:44:41,059 --> 00:44:46,880 estaría funcionando todavía porque no existe, no está asignada, si ponemos esto de aquí 503 00:44:46,880 --> 00:44:52,460 y lo voy a poner así para que lo veamos como antes, recordad que yo antes cuando no he 504 00:44:52,460 --> 00:44:56,820 puesto esta condición y solo he puesto la línea de instancia, daba error porque no 505 00:44:56,820 --> 00:45:07,039 encontrar la instancia, pero ahora si decimos, oye, si la instancia es igual a null, no existe, ¿vale? Hace esto. Esto no tiene sentido porque lo que queremos decir 506 00:45:07,039 --> 00:45:17,480 es precisamente, si instancia existe, si instancia es diferente a null, es decir, de verdad hemos asignado algo, ejecuta la instanciación, ¿vale? 507 00:45:17,480 --> 00:45:38,809 Vais a ver que ahora cuando lo hago, aunque no está instanciando nada, es decir, está pasando por esta condición. Me explico. Llega aquí el código y dice, ¿instancia es diferente a null? No, es igual a null, porque no existe. 508 00:45:38,809 --> 00:45:47,170 Entonces pasa esto y no hay ningún problema. Con esta línea aquí hemos evitado que haya un problema, que salga el error grave y se detenga. 509 00:45:47,650 --> 00:46:07,809 Si instancia es igual a null, es decir, que no hemos asignado nada, aquí ponemos debug log que ponga no hay objeto asignado. 510 00:46:08,809 --> 00:46:11,789 y luego lo que hacemos aquí es 511 00:46:11,789 --> 00:46:14,150 si ocurre lo contrario 512 00:46:14,150 --> 00:46:15,250 que es con este else 513 00:46:15,250 --> 00:46:18,769 si ocurre lo contrario 514 00:46:18,769 --> 00:46:19,909 pues que se instancia 515 00:46:19,909 --> 00:46:21,289 es decir, si sí se hubiera asignado 516 00:46:21,289 --> 00:46:22,289 pues habrá que instanciar 517 00:46:22,289 --> 00:46:25,429 en este caso estamos todavía en el momento 518 00:46:25,429 --> 00:46:26,510 aquí me falta una llave 519 00:46:26,510 --> 00:46:29,730 estamos en el momento en el que no se ha instanciado nada 520 00:46:29,730 --> 00:46:31,489 y aquí debe de faltar otra llave 521 00:46:31,489 --> 00:46:32,150 por lo que veo 522 00:46:32,150 --> 00:46:35,489 algo me saltó por ahí 523 00:46:35,489 --> 00:46:36,590 pues no 524 00:46:36,590 --> 00:47:03,659 A ver, ¿qué me está diciendo esto? Ah, no, que borra una llave por aquí debe ser. Sí, aquí hay una llave borrada. Void, update, abre, cierra. No, está bien. ¿Qué está pasando aquí? A ver, una llave y con llave. Vale, y aquí falta esta llave. Vale, esta llave que de hecho se puede eliminar porque he puesto alguna de más. 525 00:47:03,659 --> 00:47:09,739 Entonces, ahora mismo estamos en el caso de que no existe esta instancia 526 00:47:09,739 --> 00:47:11,420 Por eso va a poner no hay objeto asignado 527 00:47:11,420 --> 00:47:16,460 Y yo aquí, a ver, tengo que guardar, importante, el script 528 00:47:16,460 --> 00:47:21,719 Y ahora yo lanzo el juego y me va a poner ese mensaje porque no tiene nada que asignar 529 00:47:21,719 --> 00:47:27,039 No hay otro objeto asignado, pero como luego salta esta operación que remite instancia 530 00:47:27,039 --> 00:47:28,719 La salta y no hay error 531 00:47:28,719 --> 00:47:32,199 En el momento en el que arrastremos, por ejemplo, un prefab ahí 532 00:47:32,199 --> 00:47:48,599 pues yo qué sé, aquí tengo algún prefab, mira, pues la nave, la asigno, ¿vale? Porque sería la isField, y cuando lanzo, ahora vais a ver que lo que hace es, si voy aquí, pues lo que ha hecho es la instancia, ese clon de esta nave que tenía yo preparada, ¿por qué? 533 00:47:48,599 --> 00:47:51,380 Porque ha llegado aquí, ha dicho si instancia es igual a null 534 00:47:51,380 --> 00:47:53,000 No, no es igual a null, sí que tiene algo 535 00:47:53,000 --> 00:47:55,320 Por tanto, lo que tengo que hacer 536 00:47:55,320 --> 00:47:56,639 Es instanciar, ¿vale? 537 00:47:56,639 --> 00:47:58,739 Y veis que en todo momento se puede ir 538 00:47:58,739 --> 00:48:01,579 Enfocando en que sea igual, diferente 539 00:48:01,579 --> 00:48:03,400 Ahora, si es diferente a null 540 00:48:03,400 --> 00:48:04,619 Lo que va a hacer es 541 00:48:04,619 --> 00:48:07,420 Poner esto, porque como sí tiene algo 542 00:48:07,420 --> 00:48:09,699 Aunque luego se va a saltar las siguientes condiciones 543 00:48:09,699 --> 00:48:11,079 Porque ya se ha cubierto la primera 544 00:48:11,079 --> 00:48:13,619 Pero yo ahora cuando lanzo el juego 545 00:48:13,619 --> 00:48:14,900 Me va a poner otra vez el texto 546 00:48:14,900 --> 00:48:16,860 No ha hecho ninguna instanciación 547 00:48:16,860 --> 00:48:18,380 Y me ha puesto no hay objeto asignado 548 00:48:18,380 --> 00:48:32,000 ¿Vale? Veis que estos operadores son muy importantes porque son los que van a ir marcando qué se ejecuta y qué no durante el código. ¿Vale? ¿Queda claro esto? A ver, voy a veros en el chat. 549 00:48:32,000 --> 00:48:44,010 Vale, me seguís, ¿no? Hasta aquí. Un operador importante que no estaba explicado todavía en el otro. 550 00:48:44,570 --> 00:48:59,550 Vale, otra cosa que explicaba, el Plated Mode, aunque bien he explicado los apuntes, ¿os queda claro lo que es esto de que se ponga roja la pantalla y qué supone y qué no? Lo digo porque para el tema 2 ya es algo bastante importante. 551 00:48:59,550 --> 00:49:26,500 A ver, decidme, por aquí, ni idea. Vale, en su momento veríais en los vídeos que se hablaba de que todas las acciones que se hagan durante el juego, durante la ejecución del juego, cuando se da a play, no se guardan, simplemente son acciones que podemos hacer aquí para probar. 552 00:49:26,500 --> 00:49:42,820 Voy a hacer un ejemplo rápido. Voy a hacer que esto sí se instancie, ya que lo tengo aquí preparado. No pongo ni condición. Está asignado y se instancia la nave. Esto cuando tengáis que mover cosas y usar el transform va a ser importante, por eso os lo digo. 553 00:49:42,820 --> 00:49:58,079 Voy a poner este ente object en el que he puesto la instanciación en el 0, 0, 0, para que esté en un punto de origen. Lo que he hecho ha sido resetear con estos tres puntitos, se puede resetear el componente. 554 00:49:58,619 --> 00:50:10,659 Ahora lo que va a hacer es instanciar, y voy a ponerme el game aquí al lado para tener la escena y el game, instanciar la nave en el punto 0, 0 porque es donde está básicamente el nulo. 555 00:50:10,659 --> 00:50:27,639 Yo luego puedo estar haciendo pruebas e ir viendo a ver qué pasa si yo pongo la nave aquí o si la subo, ¿vale? Vais a ver que yo cuando detenga la ejecución nada de eso se ha guardado, no se ha guardado ni el clon que se ha emitido ni los valores del clon. 556 00:50:27,639 --> 00:50:49,960 Si lo hiciera en juego también, que sí que se ve aquí, ¿vale? Y empiezo a decir, en vez de mover la nave voy a mover el nulo que origina esa nave, ¿vale? Que es independiente porque no lo ha hecho su hijo, como podéis ver, ¿vale? Y voy probando y digo, yo quiero que la nave, como se va a instanciar donde esté este nulo cuando arrancamos el juego, lo voy a colocar ahí, ¿vale? Y dice, ese es el punto que quiero. 557 00:50:49,960 --> 00:51:03,639 Cuando paró la ejecución, veis que vuelve al punto en el que estaba antes. Entonces, mientras estamos probando el juego en su reproducción, tened cuidado que todo lo que vayáis cambiando, todos los valores, se pierden. 558 00:51:04,300 --> 00:51:16,480 O incluso mover la cámara, pone un compañero, exactamente. Todo se pierde. Entonces, para advertir de que eso está ocurriendo, hay una indicación visual, que yo creo que lo indiqué, pero me parece relevante en este momento del curso verlo, 559 00:51:16,480 --> 00:51:29,679 que es que si vamos a Edit y Preferencias, hay una sección que se llama Colors, que es con lo que se asignan los colores que se muestran ciertas cuestiones de la interfaz. 560 00:51:29,960 --> 00:51:37,780 Y hay uno, un valor que se llama Play Mode Tint, y por defecto viene en un gris, que veréis si no lo habéis cambiado, que cuando activáis este Play en vuestros casos, 561 00:51:37,780 --> 00:51:40,500 Se pone un poquito más gris la pantalla 562 00:51:40,500 --> 00:51:41,980 Pero casi no se nota 563 00:51:41,980 --> 00:51:44,320 Os sugiero que aquí pongáis un color 564 00:51:44,320 --> 00:51:45,360 Más o menos chillón 565 00:51:45,360 --> 00:51:47,320 Voy a poner ahora un verde para que veáis 566 00:51:47,320 --> 00:51:49,539 Que lo que hace, una vez ya lo asignáis 567 00:51:49,539 --> 00:51:50,699 Es que al darle al play 568 00:51:50,699 --> 00:51:53,440 Se colorea esto de otra forma 569 00:51:53,440 --> 00:51:55,539 Para saber que en ese momento estamos en la reproducción 570 00:51:55,539 --> 00:51:58,079 Porque es muy fácil pensar que no estamos en la reproducción 571 00:51:58,079 --> 00:51:59,139 Ponernos a tocar valores 572 00:51:59,139 --> 00:52:01,199 Y de pronto anda, pero si está en reproducción 573 00:52:01,199 --> 00:52:04,539 Y paramos, y todo lo que habíamos trasteado 574 00:52:04,539 --> 00:52:05,619 No se ha guardado 575 00:52:05,619 --> 00:52:22,480 Entonces os recomiendo para estar como alerta o prevenidos de que estamos en el momento de editar, que pongáis un color que tampoco sea súper estridente y moleste, pero que marque. Yo me lo pongo rojo como de alerta y así colorea todo. 576 00:52:22,480 --> 00:52:27,340 y sé que todos los cambios que está haciendo en este momento son temporales, ¿vale? 577 00:52:28,159 --> 00:52:33,519 Y que, por ejemplo, y esto ocurre mucho, a lo mejor sí que sabemos que es aquí donde queremos colocar este nulo, 578 00:52:34,139 --> 00:52:37,079 sabemos que al parar se va a ir al traste, ¿no? 579 00:52:37,539 --> 00:52:41,280 Y entonces lo que tenemos que hacer es apuntarnos estos valores para luego replicarlos. 580 00:52:41,559 --> 00:52:48,420 O, con clic derecho, copiar el valor, lo copiáis, lo tenéis ahí, 581 00:52:48,599 --> 00:52:51,079 y ahora lo que pasa es que esto vale con algún valor, no con todos. 582 00:52:51,079 --> 00:53:08,420 Y ahora podéis ir y pegarlo. Y ahí lo tenéis. Y ahora se ha colocado donde habéis hecho esta prueba mientras estaba en vivo. Y también porque en ocasiones vais a ir viendo que estas pruebas las hacéis porque al darle a ejecutar el juego efectivamente se van a mover cosas, lo que tengáis ya previsto que se mueva. 583 00:53:08,420 --> 00:53:39,840 Entonces, las pruebas las queréis hacer en vivo, pero cuando paréis el juego, eso, todo lo que estéis ajustando, lo vais a tener que reajustar, ¿sí? Por eso también, y mira, me sirve también de ejemplo, si por ejemplo estáis en esto y decís aquí en este momento, ah, vale, pues voy a asignar, lo he vaciado el GameObject que referencia a esta instanciación, digo, voy a asignar la nave y lo pongo ahí, vale, y luego digo, ya lo he hecho y sigues haciendo cosas aquí y tocas y ves que bien, ya lo he asignado. 584 00:53:39,860 --> 00:53:51,780 Cuando salgáis de aquí, fijaos que está en Node. Entonces, eso. Que mientras estéis en este modo de trabajar, no se están guardando las cosas. 585 00:53:53,940 --> 00:54:05,079 Más cosas. En el tema 2, lo que pasa es que casi prefiero que lo veáis. Se habla ya de los vectores 3, los vector 2, cómo se opera. 586 00:54:05,079 --> 00:54:09,920 en las primeras 587 00:54:09,920 --> 00:54:13,980 tutorías grabadas ya se hablaba como sumar y restar valores 588 00:54:13,980 --> 00:54:17,519 etcétera, pero aparecerá ya el concepto de sumar 589 00:54:17,519 --> 00:54:20,860 vectores que son valores, matrices con distintos 590 00:54:20,860 --> 00:54:25,340 elementos, no sé si alguno ya 591 00:54:25,340 --> 00:54:32,380 se ha metido en ello, pero si no me vale también 592 00:54:32,380 --> 00:54:34,860 bueno, estáis en ello, genial 593 00:54:34,860 --> 00:55:01,840 Bien, sí que me gustaría hablar de una cosa que es parecida o relacionada, digamos, con los vectores multidimensionales, ¿no?, que tienen varias propiedades, vaya, pero que no es exactamente lo mismo, que es algo que viene introducido en el tema cero, pero que, bueno, tampoco se ahonda demasiado, que es el concepto de array. 594 00:55:01,840 --> 00:55:12,880 ¿Sí? ¿Lo habéis visto en el tema cero? ¿Alguno me quiere explicar qué es eso? Y mientras voy yo preparando aquí una cosita. 595 00:55:14,639 --> 00:55:46,250 A ver, explicación de Stud4, un segundito. Vale, esto lo voy a explicar con ejemplos rápidos, que luego, más adelante, habría otras formas quizás mejores de hacerlas, pero me sirve. 596 00:55:46,250 --> 00:56:04,610 Y bueno, también se podría hacer de este modo, pero os digo, pues eso, una forma de conseguir algo. Imaginaos que estáis en un juego y vosotros tenéis cuatro armas posibles. Hay cuatro armas en el juego. 597 00:56:04,610 --> 00:56:28,110 Entonces, con un array, por ejemplo, lo que hace es, dentro de una sola variable, poder agrupar o poder tener recogido varios valores distintos. Si un número, si un int guarda un valor, por ejemplo, 5, en un array lo que se va a poder hacer es guardar varios valores. 598 00:56:28,110 --> 00:56:45,900 Por ejemplo, ¿vale? Y esto vamos a ver cómo se nos da. Se puede crear un array de un número de dimensiones determinada, ¿vale? Por ejemplo, este, y 5 aquí, ¿vale? 599 00:56:45,900 --> 00:57:09,659 Y vais a ver que la estructura de un array básicamente es una sucesión de valores separados por coma, ¿vale? Y esa sucesión de valores tiene un orden también, ¿vale? Entonces, dentro de este array llamado armas, que bueno, de momento lo voy a llamar número, luego ponemos el ejemplo de armas, estamos diciéndole que dentro de esta variable no solo se guarde un valor numérico, sino que se guarden varios. 600 00:57:09,659 --> 00:57:23,860 Y yo en cualquier momento voy a poder entrar en esa variable que tiene bolsillos, vamos a decir así, esa caja subdividida, que dentro tiene valores. ¿Cómo se accede a los valores de un array y cómo se guardan? 601 00:57:23,860 --> 00:57:43,440 La forma de inicializar un array, ¿vale? Esperad que lo compruebe porque esto siempre tengo mis... Sí, está bien. Siempre me equivoco en esto, no sé por qué. Es si declaramos un array, ¿vale? Después del nombre de la variable hay que poner este corchete vacío. No hay que poner nada ahí, ¿vale? 602 00:57:43,440 --> 00:57:59,019 Y luego, como hacemos siempre, ponemos el nombre de la caja, ¿vale? De la variable. Este es el tipo, ¿vale? Podrá ser in, string, booleano, lo que sea. Y luego la variable. Con esta corchete decimos que no solo va a haber un valor, que va a haber un array, que va a haber varios guardados. 603 00:57:59,019 --> 00:58:13,179 Si lo queremos, si queremos decir cuántos compartimentos o cuántas subdivisiones tiene ya, incluso ya con los valores, se puede hacer ya desde el momento de la declaración, de esta forma. 604 00:58:13,179 --> 00:58:28,860 Con esta forma de mostrarlo, lo que hacemos es ya incluir que ya en el primer valor que guarda este array valdrá 1, el segundo valdrá 2, el tercero valdrá 3 y el cuarto 5. 605 00:58:29,019 --> 00:58:46,360 ¿Vale? Entonces, llega el momento en el que, por ejemplo, podemos decir, ¿vale? Ahora ahondamos más en algunas cosas. Podemos decir debug log y quiero mostrar el valor que está dentro de la variable números en su posición 2. ¿Vale? 606 00:58:46,360 --> 00:59:15,880 Un segundillo, que me tengo que sonar los mocos, perdona, que me ahogo si no, pero voy a ver el chat que igual me habéis escrito algo, vale, a ver, me habéis escrito alguna cosa y no la había leído, me pone, o sea, un array en un shooter sería los diferentes tipos de balas de un arma y sus valores, 607 00:59:16,639 --> 00:59:24,280 Un array puede ser lo que nosotros queramos, pero lo que sí podemos hacer es que dentro de una variable podemos tener distintos GameObjects, por ejemplo, 608 00:59:24,579 --> 00:59:29,320 y mediante un número llamando a la misma variable podemos desplegar que sea este arma. 609 00:59:29,320 --> 00:59:40,019 Imagínate que en vez de aquí poner que es un int, es una variable tipo GameObject, como hacíamos en la instanciación, 610 00:59:40,019 --> 00:59:59,860 Y luego va guardando en distintos cajones, en distintos cajoncillos, distintas armas. Luego para desplegar un arma simplemente habría que aludir a esta variable con el valor, con la posición de ese valor. Pero esto es más avanzado. Vamos primero con lo más mudendano, que me lo habías escrito aquí, pero vamos a esto. 611 00:59:59,860 --> 01:00:22,920 ¿Vale? Vais a ver que yo cuando pongo 2, a ver, por ejemplo, la posición 2, vais a ver que para declarar después del tipo de variable hay que poner este corchetillo, estas llavecitas, estos corchetes, mejor dicho, y luego cuando queramos hablar o usar ese array como variable, habrá que poner el nombre de variable, los corchetes y dentro de los corchetes la posición que queramos usar. 612 01:00:22,920 --> 01:00:28,099 Entonces, ¿qué pensáis que va a mostrar consola? 613 01:00:28,179 --> 01:00:29,380 Porque estamos poniendo un debug log 614 01:00:29,380 --> 01:00:32,500 ¿Qué va a poner? ¿Qué número va a mostrar la consola? 615 01:00:33,500 --> 01:00:36,780 Aquí es para que acertéis o os equivoquéis y hablar de ello 616 01:00:36,780 --> 01:00:40,440 Lo normal es equivocarse 617 01:00:40,440 --> 01:00:41,619 Dos, creo 618 01:00:41,619 --> 01:00:44,079 Dos porque entiendo que tu lógica 619 01:00:44,079 --> 01:00:45,780 Lo ha puesto un compañero, dos 620 01:00:45,780 --> 01:00:49,039 La lógica es a pensar, vale, esta es la primera posición 621 01:00:49,039 --> 01:00:50,619 Y esta es la segunda, ¿no? 622 01:00:54,719 --> 01:00:56,400 ¿No? Es la lógica que has seguido 623 01:00:56,400 --> 01:01:01,199 Aquí empiezan cosas 624 01:01:01,199 --> 01:01:03,699 Simplemente para que lo veáis 625 01:01:03,699 --> 01:01:06,099 Si yo doy a play 626 01:01:06,099 --> 01:01:09,159 El número que muestra es 0 627 01:01:09,159 --> 01:01:10,860 Si os fijáis, aquí lo tenéis 628 01:01:10,860 --> 01:01:11,820 ¿Por qué? 629 01:01:12,300 --> 01:01:14,000 Porque las posiciones de un array 630 01:01:14,000 --> 01:01:16,360 Y normalmente todo lo que tenga varias dimensiones 631 01:01:16,360 --> 01:01:17,019 Suele ser así 632 01:01:17,019 --> 01:01:18,480 Siempre empieza por 0 633 01:01:18,480 --> 01:01:19,699 Es decir, la primera posición 634 01:01:19,699 --> 01:01:21,400 Que se refiere en este caso a esto 635 01:01:21,400 --> 01:01:22,159 Es 0 636 01:01:22,159 --> 01:01:24,119 Entonces, por ejemplo 637 01:01:24,119 --> 01:01:26,539 si hacemos este código 638 01:01:26,539 --> 01:01:27,599 lo que va a mostrar es un 639 01:01:27,599 --> 01:01:30,059 bueno, fijaos, yo estoy saliendo todo el rato 640 01:01:30,059 --> 01:01:32,159 cambiando de pantalla, me doy cuenta rápidamente 641 01:01:32,159 --> 01:01:34,159 de que estoy en play porque veo esto rojo 642 01:01:34,159 --> 01:01:35,940 ¿vale? ves que es útil también para eso 643 01:01:35,940 --> 01:01:37,699 le vuelvo a dar, ahora que he guardado 644 01:01:37,699 --> 01:01:39,400 y lo que muestra es 1 645 01:01:39,400 --> 01:01:42,260 ¿vale? si yo mostrara la posición 646 01:01:42,260 --> 01:01:42,820 3 647 01:01:42,820 --> 01:01:45,539 y guardo y vuelvo 648 01:01:45,539 --> 01:01:47,579 ¿cuál sería la 3 según esta lógica? 649 01:01:47,659 --> 01:01:48,960 ¿qué valor mostraría? 650 01:01:50,639 --> 01:01:51,860 3 sería 5 ¿no? 651 01:01:52,039 --> 01:01:53,440 0, la posición 0 652 01:01:53,440 --> 01:02:26,030 la posición 1, la posición 2 y la posición 3, ¿vale? Mostraría un 5, vamos a verlo, pero ya os adelanto que debería. 5, ¿vale? Vale. ¿Qué ocurriría si ponemos aquí un 5? A ver, ¿qué me decís? A ver, a ver... 653 01:02:26,030 --> 01:02:42,010 ¿Dos? Imagino, un compañero dice dos, imagino que tu lógica es que vuelva a empezar o algo así. No. Dentro de estas cajas lo que sucede es que tiene un número de compartimentos predefinidos en algún momento al inicio y que además no se puede variar en el tiempo. 654 01:02:42,010 --> 01:02:59,449 Es decir, en este caso ya hemos declarado que este array es de cuatro dimensiones, ¿vale? O de cuatro posiciones. La de dimensiones igual no es el término más correcto. Posiciones, tiene cuatro posiciones. Si pedimos que tenga más, no es que vaya a decir cero, porque como no existe, no. 655 01:02:59,449 --> 01:03:14,670 Lo que va a dar es un dato, esto de índice fuera del rango, ¿vale? Entonces, ojo, cuando vayáis a usar en algún momento Arrays, tened muy en cuenta que si nos salimos del rango que tiene, pues puede dar problemas, ¿vale? 656 01:03:14,670 --> 01:03:35,610 Entonces, esto lo digo porque hay otra forma de declarar un array, ¿vale? Y esto lo comento para poner la otra, que sería, por ejemplo, poner int, digo que es un array, números, y yo no sé los valores, pero sí sé que va a tener cuatro posiciones, como tenía este de antes, ¿vale? 657 01:03:35,610 --> 01:03:53,000 Y se declararía así, ¿vale? Entonces, aquí ahora mismo sí que vais a ver que si pongo 2, ¿el valor cuál va a ser? Esto lo he comentado, ¿eh? Esto es lógica para ver si vamos pillando cosas, ¿eh? Que entiendo que es más enrevesado de lo necesario probablemente ahora. 658 01:03:53,000 --> 01:04:18,190 A ver, ¿qué os pongo? Vale, bueno, el valor, en este caso sí que existen los compartimentos, ¿vale? Y no están cargados de nada, de cero, ¿vale? Pero sí que existen, entonces ahora cuando digo el valor 2, lo que va a mostrar es que vale cero, porque es el valor por defecto que viene. 659 01:04:18,190 --> 01:04:46,730 Me pregunta, ¿puede haber un Array dentro de un Array? Pues si no me equivoco, sí, pero tampoco es algo... Arrays de Arrays ya es complejo, suele ser complejo de gestionar. Por tanto, hay formas más, pues eso, mediante condiciones de ir gestionando Arrays por separado y que un Array desencadene otro Array, pero meter Arrays dentro de Arrays lo podemos probar, pero ya daría problemas. Vamos a verlo. 660 01:04:46,730 --> 01:04:57,469 Mira, vamos a hacer una prueba. Tenemos un... Vale, sí, mejor no nos metamos en el jardín, porque ya os digo que habría formas más fáciles de esa lógica de querer implementar llegar a ella. 661 01:04:58,289 --> 01:05:09,530 Entonces, eso, que sepáis que los arrays tienen valores, un número de cajas, digamos, de compartimentos predefinidos por, o que lo declaramos de forma explícita con los valores, 662 01:05:09,530 --> 01:05:29,369 o de forma explícita, pero solo con el número de posiciones que tiene, ¿vale? Y luego aquí es donde podemos ir operando como con cualquier cosa, con cualquier variable y decirle, vale, en este punto, ¿vale? Ahora mismo todo vale 0, pero en este punto la variable que está en la posición 1, que, ojo, la 1 sería la que está aquí, no la primera que se ve, ¿vale? Importante. 663 01:05:29,369 --> 01:05:45,809 Eso sí es importante que lo tengamos en cuenta. Pues esta que valga a 2, ¿vale? Y entonces ya se ha guardado dentro de números de esta variable, como siempre, porque está dentro del ámbito adecuado, que la posición 1 va a valer 2. 664 01:05:45,809 --> 01:06:06,280 Por eso yo ahora si muestro números 1 o incluso me salgo del start, lo he declarado aquí, he dado el valor aquí, se ha guardado en una caja que es una variable global y luego en el update lo pongo aquí, lo que va a mostrar es fotograma tras fotograma el valor 2. 665 01:06:06,280 --> 01:06:11,820 ¿Vale? Y vais a ver que 2, 2, 2, 2, pues no para ahí de sumarse todo el rato y ahí lo tenemos, ¿no? 666 01:06:12,099 --> 01:06:23,119 ¿Vale? Esta lógica de los arrays es importante porque aunque no funcionan exactamente como un array, y ya saldrán casos en los que un array es necesario, ¿vale? 667 01:06:23,159 --> 01:06:29,400 Ya más o menos sabemos cómo funcionan. Entiendo que se entiende un poco mejor que a lo mejor en los apuntes, aunque esté explicado también. 668 01:06:29,400 --> 01:06:47,539 Bien, si os dais cuenta, al final cuando tenemos valores con varias posiciones guardadas, ¿vale? Como este transform position vais a ver que al final tiene tres valores guardados, el de x, el de y y el de z, pero son tres valores distintos numéricos, ¿vale? 669 01:06:47,539 --> 01:07:05,880 Todo esto se basa, digamos, en valores multiposición, ¿no? Que pueden guardar varios valores en sí. En sí el position es más un strut, el vector 3 es un strut, ¿vale? Pero un poco el funcionamiento es parecido al de un array. 670 01:07:05,880 --> 01:07:19,699 Entonces, me parece conveniente al hablar de variables que pueden contener más de un valor, poner el ejemplo de los arrays como primer caso. 671 01:07:20,380 --> 01:07:32,519 Cuando veáis que trabajáis con coordenadas o con posiciones o con direcciones, esto en el tema 2, estoy adelantando, vais a ver que existe esto del vector 3 y el vector 2. 672 01:07:32,519 --> 01:07:54,420 Y un vector 3 al final, que es un tipo de variable que se puede generar como in, bool, etc., también puede ser posiciones. Y vais a ver que vais a tener que, new vector 3, vale, dame un segundo, new vector 3, 0, 1, a ver si me deja y no da problemas, vale. 673 01:07:54,420 --> 01:08:08,599 ¿Vale? Vais a ver que para decir estas posiciones que son vectores 3 como las que maneja el transform, ¿vale? Al final la lógica es un poco lo mismo. Poner valores separados por coma y en el orden adecuado, ¿sí? 674 01:08:08,599 --> 01:08:27,739 Cuando vais a ver también, que esto también se explica, que cuando estamos trabajando con Vector3, cuando generamos variables con más de un valor, ¿vale? Tenemos que ir como generando instancias, ¿vale? Ahora que hemos usado instancias de GameObjects, generando instancias de variables, ¿vale? 675 01:08:27,739 --> 01:08:36,600 Por eso vais a ver que cuando tengáis que hablar o poner un valor de un vector 3 en mitad de un código, vais a tener que poner esta palabra new, ¿vale? 676 01:08:36,600 --> 01:08:43,380 Porque un vector 3, como es un valor múltiple, guarda varios valores, hay que generar una nueva instancia que guarda varios valores. 677 01:08:44,000 --> 01:08:54,680 Esto entiendo que es quizá un poco más avanzado, pero a medida que vayáis haciendo las tareas, os va a ir surgiendo esta duda y seguramente lo veamos. 678 01:08:54,680 --> 01:09:14,840 Pero lo que vamos a poder hacer con un vector 3 es decirle, vale, yo quiero que este objeto que tenga este script, cuando arranque el juego, se ponga en esta posición, porque le estamos pasando un valor que es un vector 3 en x0, en y5 y en zi1. 679 01:09:14,840 --> 01:09:28,779 Si yo guardo y ejecuto este código, vais a ver que quien tiene el código, que es este juego, que ahora está en menos 8 y 15,25, al arrancarlo, se va a poner en 0, 5, 1, que son las posiciones que habíamos pasado por este valor. 680 01:09:29,560 --> 01:09:44,060 ¿Veis que un poco lo que está haciendo es colocar cada uno de estos números en la cajita correspondiente a su posición? Entonces así funcionan un poco los valores multiposición. 681 01:09:44,060 --> 01:09:48,310 vale, mira, acabas de hacerme una pregunta 682 01:09:48,310 --> 01:09:50,250 interesante, y que no voy a ahondar 683 01:09:50,250 --> 01:09:52,350 tampoco mucho, de hecho no lo 684 01:09:52,350 --> 01:09:54,189 vamos a ver seguramente en el curso 685 01:09:54,189 --> 01:09:56,369 más que como que existe, pero pone 686 01:09:56,369 --> 01:09:58,130 una duda que ha surgido, bueno 687 01:09:58,130 --> 01:09:59,989 puede haber, a raíz que guarden por ejemplo 688 01:09:59,989 --> 01:10:02,310 cuatro valores, pero estos son cero en un 689 01:10:02,310 --> 01:10:04,149 principio, ¿pueden esos valores cambiar con el tiempo 690 01:10:04,149 --> 01:10:06,289 por alguna modificación? ¿o son valores fijos? 691 01:10:06,350 --> 01:10:08,369 ah, perdona, te había entendido otra cosa más compleja 692 01:10:08,369 --> 01:10:10,310 pero que también, que era lo que me venía bien 693 01:10:10,310 --> 01:10:12,409 sí, de hecho, la respuesta 694 01:10:12,409 --> 01:10:14,229 es sí, los valores pueden ir cambiando 695 01:10:14,229 --> 01:10:32,729 durante el tiempo, es lo que he hecho antes, cuando yo pongo este, pongo yo que sé, varios valores, lo voy a llamar así, ¿vale? A este array, new, y voy a poner new int, ¿vale? 696 01:10:32,729 --> 01:10:53,630 Veis que cuando estoy declarando, lo que os he dicho antes, una nueva variable multiposición, vamos a decir, como un array, para generar, digamos, valores de esa variable, es muy normal tener que poner este operador de new. 697 01:10:53,630 --> 01:11:05,369 Si no, vais a ver también que da error. Cuando de un error en algo multiposición y digáis por qué pasa, probablemente es que falta este new. Ya iremos viendo la lógica, pero de momento quedamos con esto. 698 01:11:05,369 --> 01:11:24,189 Vale, lo que me preguntaba el compañero. Ahora mismo, todo esto, las cinco posiciones que tiene esta array, valen cero, ¿no? Existen, pero valen cero. No van a dar error si las llamamos, pero valen cero. Nosotros luego podemos ir diciendo int en su posición 1, que es lo que había hecho antes, vale 4. 699 01:11:24,189 --> 01:11:42,649 int, a ver, no, pero nada, te lo estoy haciendo mal, el nombre de la variable es varios valores, ¿vale? La posición 1 vale 4, en la posición 3, o en la posición 2, mira, incluso te lo indica ahí, vale 0. 700 01:11:42,649 --> 01:11:57,029 Ahí estamos cambiando los valores que hay aquí. Entonces, nosotros incluso podemos decir debug log y podemos decir que nos muestre varios valores. 701 01:11:58,369 --> 01:12:06,649 Y ahora lo que va a hacer es mostrarnos todo en la raíz de una. Dame un segundito y lo vemos. Ahora lo que me está diciendo... 702 01:12:06,649 --> 01:12:24,630 Vale, da problema esto, ¿no? Debug low, varios valores, y se podría poner 0, aquí varios valores, 1, etc. Podemos ir poniendo los diferentes, ¿vale? Voy a poner los dos primeros. 703 01:12:24,630 --> 01:12:40,470 Entonces, cuando muestre esto, varios valores, claro, esto lo está mostrando con un número, claro, hay que hacer otro debug log aquí, ¿vale? 704 01:12:40,470 --> 01:12:46,470 Pero aquí podemos ir viendo los distintos valores, habría que hacer distintos debug logs, no se pueden condensar todos en uno así. 705 01:12:47,109 --> 01:12:57,609 Si vamos mostrando los distintos debug logs, y vamos cambiando el valor que muestran, se me ha colado un 6, ¿vale? 706 01:12:57,609 --> 01:13:13,289 Si yo ahora lo ejecuto, vais a ver que no todos los números que ponen son 0. El primero será 0, el segundo será 4, el tercero será 0, el siguiente será 0 también, voy a ponerle un 7 mejor, ¿vale? Y 0. Entonces, aquí hemos cambiado los valores ya durante la ejecución del juego. 707 01:13:13,289 --> 01:13:15,750 Entonces yo si lanzo esto 708 01:13:15,750 --> 01:13:18,770 0, 4, 0, 7, 0 709 01:13:18,770 --> 01:13:20,750 Entonces aquí hemos creado el cajón 710 01:13:20,750 --> 01:13:21,989 Pero lo hemos cambiado después 711 01:13:21,989 --> 01:13:23,949 Incluso después podemos decir 712 01:13:23,949 --> 01:13:25,970 Vale, y que varios valores 3 713 01:13:25,970 --> 01:13:27,630 Una vez 714 01:13:27,630 --> 01:13:30,270 Ya lo ha impreso en pantalla 715 01:13:30,270 --> 01:13:30,890 En consola 716 01:13:30,890 --> 01:13:32,789 Vas a valer 717 01:13:32,789 --> 01:13:34,970 8 718 01:13:34,970 --> 01:13:36,430 Vale, entonces 719 01:13:36,430 --> 01:13:40,010 Lo que ponemos aquí 720 01:13:40,010 --> 01:13:40,770 Es 721 01:13:40,770 --> 01:13:45,720 0, 4, 0, 7, 0 722 01:13:45,720 --> 01:13:47,380 y a ver que no está mostrándolo 723 01:13:47,380 --> 01:13:49,439 vale, y me falta poner otra vez el debug log 724 01:13:49,439 --> 01:13:51,399 de 3, que es el que estoy cambiando 725 01:13:51,399 --> 01:13:53,159 y vais a ver que ahora va a haber otra línea 726 01:13:53,159 --> 01:13:55,180 que va a añadir un 8 727 01:13:55,180 --> 01:13:57,420 va a poner otra línea que es un 8 y lo hemos cambiado 728 01:13:57,420 --> 01:14:03,560 en dinámico, claro, vale 729 01:14:03,560 --> 01:14:04,479 ahí está 730 01:14:04,479 --> 01:14:07,000 si, se pueden concatenar 731 01:14:07,000 --> 01:14:09,760 lo que pasa es que si los 732 01:14:09,760 --> 01:14:11,239 concatenamos como son números 733 01:14:11,239 --> 01:14:12,979 habría que convertirlos en texto 734 01:14:12,979 --> 01:14:15,439 vale, pero bueno, igual me equivoco 735 01:14:15,439 --> 01:14:16,939 pero si yo los concateno así 736 01:14:16,939 --> 01:14:18,100 vale 737 01:14:18,100 --> 01:14:22,319 pongo este 738 01:14:22,319 --> 01:14:24,300 lo que va a hacer es sumarse 739 01:14:24,300 --> 01:14:26,380 lo que sí se puede hacer es decirle 740 01:14:26,380 --> 01:14:28,460 que aquí haya un espacio 741 01:14:28,460 --> 01:14:31,119 y como esto ya lo ha convertido 742 01:14:31,119 --> 01:14:32,579 en texto, pues ahí sí que lo haría 743 01:14:32,579 --> 01:14:34,699 pero bueno, vamos a poner un espacio 744 01:14:34,699 --> 01:14:37,260 y una coma, sí, lo estaba intentando 745 01:14:37,260 --> 01:14:38,659 hacer de otra forma, ahora sí que lo va a hacer 746 01:14:38,659 --> 01:14:43,020 ahí, vale, y ahora sí que lo va a mostrar 747 01:14:43,020 --> 01:14:45,020 0 y 4 que son los dos primeros valores 748 01:14:45,020 --> 01:14:47,220 que tenemos, el 0 que no hemos dicho nada 749 01:14:47,220 --> 01:14:55,100 y el 4 vale no sé si me vais siguiendo lo que había entendido le había entendido antes al 750 01:14:55,100 --> 01:15:01,420 compañero es que si una vez se han dicho cuántas posiciones tiene un array si se puede cambiar ese 751 01:15:01,420 --> 01:15:08,380 número de posiciones pues imagínate hemos dicho que hay cinco valores de armas cinco armas posibles 752 01:15:08,380 --> 01:15:14,659 y luego de pronto durante el juego quieres que haya siete ese ese tipo de operación no se puede 753 01:15:14,659 --> 01:15:18,859 hacer con array no se puede decir que a lo largo del juego no que va a cambiar los valores de estas 754 01:15:18,859 --> 01:15:29,060 cinco posiciones, sino que de pronto pasa a tener siete posiciones. Para eso existe otro concepto parecido, pero bueno, tiene más funcionalidad y es más complejo, 755 01:15:29,060 --> 01:15:41,060 que es el de lista, list en Unity. Voy a buscarlo aquí. Aquí hay, por ejemplo, si buscáis ahí documentación, las listas sí son un elemento que permite reordenar 756 01:15:41,060 --> 01:15:55,960 ordenar con otros comandos, cambiar el número, la longitud de posiciones, ¿vale? A ver, bueno, mira, de hecho aquí hay una explicación que dirá, las listas son muy parecidas a los arrays, ¿vale? 757 01:15:55,960 --> 01:16:05,220 Y tiene otra sintaxis y es más elaborado, por eso no hablamos de ello ahora, pero también existen las listas, ¿vale? Eso es lo que pensaba que me estabas preguntando. 758 01:16:05,220 --> 01:16:20,659 Los arrays, sí que es verdad que una vez se dice el número de posiciones, no hay forma fácil de cambiarlo. Por ejemplo, otra cosa importante, que esto no lo he puesto, pero si yo esta variable array, 759 01:16:20,659 --> 01:16:40,000 Si esta array, mejor dicho que variable, digo que sea un serialize fill y lo vemos aquí, guardo y voy aquí, vais a ver que se genera a nivel visual, como hemos hecho en otros momentos, las posiciones de un array de 5. 760 01:16:40,000 --> 01:16:54,180 Veis que empieza por el 0, tiene 5 posiciones, 5 posibles, y empieza por 0, por eso acaba siempre con un 1 menos, con un valor menos. Están aquí vacías porque recordad que hasta que no arranquemos el código, el screen no se ejecuta y te pone aquí los valores. 761 01:16:54,180 --> 01:17:14,180 Y aquí es lo mismo, aquí podemos ir cambiando los valores en vivo, etcétera, que cuando los paremos van a volver al cero porque una vez más, esto ya se dijo seguro en alguna de las grabaciones, estos valores varían los del código, siempre y cuando el código después no vuelvan a cambiar en ejecución estos valores. 762 01:17:14,180 --> 01:17:39,739 Hay un orden. Por defecto, nosotros aquí podemos decir que esto valga 5, pero al arrancar el juego ha habido una combinación. ¿Por qué? Porque como en ningún momento del código solo se han creado las cajas, pero no se dice que valga explícitamente 0, este valor lo hemos cambiado aquí, con la edición que hemos hecho de este valor mediante el inspector. 763 01:17:39,739 --> 01:17:57,659 Pero luego al arrancar el juego sí que se dice al iniciar el script que la posición 1 y 3 adquiera estos valores y por eso hace esta combinatoria. Vale 0 todo, pero estamos cambiando por el editor esto y por el código esto. 764 01:17:57,659 --> 01:18:13,520 Esto es lo mismo que cuando aquí estamos cambiando los valores de las posiciones. Aquí estamos cambiando posiciones. Si en el código no decimos explícitamente que adquiera otra posición, donde se irán colocando los elementos y la rotación, etc., si os fijáis es el mismo comportamiento. 765 01:18:13,520 --> 01:18:28,279 Esto es lo que estamos cambiando en el inspector. Esto no deja de ser, al final, una clase, un script que se llama transform y que se ha programado para que tenga estos huecos, igual que nosotros aquí estamos programando otra variable para que tenga estos huecos. 766 01:18:28,279 --> 01:18:46,579 Y aquí incluso se pueden ir cambiando órdenes, etcétera, de manera visual, que cuando yo arranque, pues ahora yo el que he cambiado a mano es esta posición 2, pero las otras dos por código nuevamente lo que están haciendo es lo que tienen que hacer, que es proporcionar unos valores. 767 01:18:46,579 --> 01:19:03,140 Y si yo luego después de mostrar esto, como he hecho antes, le digo que aquí varios valores 1 valga 100, pues en la posición 1, primero momentáneamente pondrá 4, pero finalmente la que se va a quedar es el 100. 768 01:19:03,399 --> 01:19:14,760 Ahí lo tienes. Aquí nos ha impreso 0 y 4, que son los valores que habíamos pedido al principio, pero tened en cuenta eso, el orden de ejecución. 769 01:19:16,579 --> 01:19:17,479 ¿Qué tal hasta aquí? 770 01:19:18,640 --> 01:19:22,739 Me estoy enrevesando con cosas, pero que son importantes para luego ir entendiendo 771 01:19:22,739 --> 01:19:24,340 y ir planteando nuestro código, ¿vale? 772 01:19:25,340 --> 01:19:27,319 Dudas que tengáis hasta este momento. 773 01:19:31,590 --> 01:19:36,229 Si tenemos cinco armas... 774 01:19:36,229 --> 01:19:38,010 Vale, me pregunta un compañero. 775 01:19:38,069 --> 01:19:39,710 Mi pregunta es más enfocada para videojuegos. 776 01:19:40,029 --> 01:19:42,069 De todo modo, nos estamos adelantando un poquito, ¿eh? 777 01:19:42,069 --> 01:19:44,390 Son preguntas más avanzadas, pero... 778 01:19:44,390 --> 01:19:49,289 Pone, si tenemos cinco armas, aparece una sexta y queremos cambiarla por alguna de las que portamos. 779 01:19:49,390 --> 01:19:52,029 ¿Cambiaría el valor del array donde tenemos el arma que vamos a perder? 780 01:19:52,029 --> 01:20:05,970 Eso es, también se puede hacer. Si, por ejemplo, en vez de... A ver si no me meto en ningún jardín de error, pero si en vez de ser un array de... Primero voy a poner una cosa un poco más sencilla. 781 01:20:05,970 --> 01:20:29,850 ¿Vale? Si yo creo un array de booleanas y le digo que sea de cinco valores, quiero que también veáis que esto, dependiendo del tipo de variable con la que se compone ese array, ¿vale? Veis que ahora las casillas son de sí o no, de clicar o no, ¿vale? Y esta se ha puesto positiva, a ver, porque ya estaba por defecto, ¿vale? 782 01:20:29,850 --> 01:20:43,529 Aquí podéis cambiar también el número de valores del array, pero en el editor, si lo cambiáis luego durante la ejecución, esto va a dar problemas. 783 01:20:43,930 --> 01:20:50,229 Entonces, si tenemos varias armas y, por ejemplo, lo que hacemos es un array de GameObjects, que son, por ejemplo, el prefab del arma, 784 01:20:50,229 --> 01:21:03,140 Vamos a poner eso como ejemplo. Cuando veamos ese array aquí, vais a ver que sorprendentemente lo que nos está pidiendo... 785 01:21:03,140 --> 01:21:12,800 Y fijaos que aunque yo esté cambiando el código aquí, el inspector es independiente. Si aquí ponemos 5, como estos varios valores, que es el nombre de la variable, recordadlo, 786 01:21:12,800 --> 01:21:31,460 Lo que va a hacer es esperar GameObjects, es decir, esperar prefabs, por ejemplo, o las armas. Tú sí que es verdad que mientras no cambies el número de compartimentos que tengamos aquí, puede haber un momento del juego que lo que hagamos es que en vez de estar cubo, se sustituya por nave prefab. Eso se puede ir haciendo. 787 01:21:31,460 --> 01:21:33,699 sí, y luego tú ya 788 01:21:33,699 --> 01:21:35,659 dices, lo que quiero mostrar es 789 01:21:35,659 --> 01:21:37,960 el valor, el arma 790 01:21:37,960 --> 01:21:39,739 el GameObject que está en varios valores 791 01:21:39,739 --> 01:21:41,979 posición 2, que es la nave 792 01:21:41,979 --> 01:21:43,760 ¿vale? entonces sí, eso se 793 01:21:43,760 --> 01:21:47,399 podrá hacer, ¿vale? 794 01:21:50,640 --> 01:21:51,899 me quería meter en 795 01:21:51,899 --> 01:21:53,420 operaciones de vectores 796 01:21:53,420 --> 01:21:56,119 bueno, vamos a verlo así un poquillo 797 01:21:56,119 --> 01:21:58,239 por encima, ¿vale? porque al final 798 01:21:58,239 --> 01:22:00,220 los vectores y esto que estamos hablando 799 01:22:00,220 --> 01:22:02,159 tiene cierta relación, entonces 800 01:22:02,159 --> 01:22:27,340 Entonces vamos a aprovechar, vamos a hablar de vector primero, yo que sé, pongo un nombre así identificativo, ¿vale? Y vector segundo. Aquí he creado dos variables, ¿vale? Que si las pusiera visibles en el inspector para que lo veamos como es esto realmente, que igual es la forma más fácil. 801 01:22:27,340 --> 01:22:45,380 Si yo voy a ver qué es esto de vector 3, y solo lo he puesto en vector primero, que sea visible, vais a ver que al final lo que nos está mostrando es vector primero, y cuando es un vector 3, lo que hace es que ya los vectores están relacionados con dimensiones, con ejes, mejor dicho. 802 01:22:45,380 --> 01:23:02,060 X, Y, Z, ¿vale? De hecho, también, para que veáis que existe, existe vector 2, que lo que tendrá será solo dos dimensiones, X e Y, por ejemplo, que se usará en juegos 2D, por ejemplo, o en juegos 3D, pero solo para tener dos. 803 01:23:02,600 --> 01:23:14,869 Incluso existe un vector 4, que si le doy, me pone x, y, z, w, que cuando leáis el tema va a tener relación con eso de los cuaternios, 804 01:23:15,149 --> 01:23:19,649 o para sonar. No me adelanto porque esto sí que es verdad que ya es complicar de más ahora mismo. 805 01:23:19,649 --> 01:23:27,130 Entonces un vector 3 al final lo que nos permite también es guardar ya valores desde el principio. 806 01:23:27,710 --> 01:23:39,350 Nuevamente, como es un valor compuesto por varios, y veis que cuando me pongo encima pone que es de tipo strut, y un strut es una especie de constructor de valores múltiples, 807 01:23:39,449 --> 01:23:47,109 bueno, no me quieren revesar con esto porque ni yo voy a saber explicarlo bien, cuando tenemos una variable de tipos, como lo que hemos dicho antes con los arrays, 808 01:23:47,109 --> 01:23:56,409 de diferentes valores, que guarda varios valores, hay que poner esta palabra nuevo cuando vayamos a inicializarlo o en muchas ocasiones usarlo. 809 01:23:56,409 --> 01:24:16,050 Yo digo que esto valga estos valores. Ahora mismo tenemos un valor aquí que se inicializa como 5, 1, 5. ¿Qué significa esto? Que yo puedo ir luego a el componente transform y decirle que la posición sea vector primero. 810 01:24:16,050 --> 01:24:21,689 Y lo que estamos diciendo aquí es que coja los valores de este vector que tenemos aquí 811 01:24:21,689 --> 01:24:25,930 Yo cuando voy a este elemento, lo que he hecho antes 812 01:24:25,930 --> 01:24:29,909 Si le doy play, aunque esté en menos 11 y 0 en posición 813 01:24:29,909 --> 01:24:35,310 Al arrancar el juego, me lo está poniendo en 0, 0, 0 814 01:24:35,310 --> 01:24:39,250 A ver, esperad un segundo, transform position vector primero 815 01:24:39,250 --> 01:24:43,510 ¿Por qué no me lo está cogiendo? 816 01:24:43,510 --> 01:25:12,779 No se está inicializando bien. Voy a quitar esto un segundo. Cuidado cuando a veces pongáis serialize fill o que sea público y declaráis aquí las variables en vez de en el inspector porque se pueden sobreescribir y aparecer problemas como que no funcionan ciertas cosas. 817 01:25:12,779 --> 01:25:26,699 Ser conscientes de ello. Entonces, cuando ya iremos viendo que al final lo que vamos a ir haciendo en los juegos en gran medida es ir introduciéndonos en estos componentes e ir cambiando sus valores. 818 01:25:26,699 --> 01:25:38,359 Y ya hablé en los vídeos, si no me corregí, ya está planteado que dentro de un componente luego pueda haber subcomponentes o propiedades, mejor dicho. 819 01:25:38,359 --> 01:25:56,619 En este caso, la forma de atacar o de actuar sobre los elementos del transform es poniendo esta palabra reservada que es transform, que es de los pocos componentes que tiene su propia palabra y no hay que capturarlos. 820 01:25:56,619 --> 01:26:15,300 Cuando vayáis trabajando vais a ver que vais a tener que, cuando queréis, por ejemplo, aludir a un componente tipo BoxCollider, por ejemplo, vais a tener que hacer primero una captura del componente para decirle voy a actuar sobre este componente y sobre Istrigger, por ejemplo. 821 01:26:15,300 --> 01:26:35,600 Pero cuando estamos afectando sobre el transform, con poner la palabra transform, punto, y la propiedad sobre la que queremos actuar, por ejemplo, la escala local, local scale, que es la escala, podemos decir que sea también vector primero. 822 01:26:35,600 --> 01:26:48,960 Y vais a ver que ahora mismo estamos actuando al iniciar el juego sobre, y vais a ver que además son iguales la escala, sobre la escala y sobre la posición de forma similar. 823 01:26:49,840 --> 01:27:00,600 Entonces, esto es lo que nos va a permitir luego es también que podamos ir haciendo operaciones con vectores, que son, volvemos a ver, valores combinatorios, 824 01:27:00,600 --> 01:27:15,939 Es decir, valores múltiples que se pueden combinar o se pueden sumar o se pueden restar, ¿vale? Que devuelvan vectores más complejos o combinaciones de vectores. Por ejemplo, si yo ahora hubo un vector 3 que sea vector resultado, y esto es lo último que vamos a ver hoy si no tenéis dudas. 825 01:27:15,939 --> 01:27:30,659 Si yo hago aquí un vector resultado, igual que podíamos sumar números en un tercer, es decir, en número 1, número 2, en un número resultado, esto ya está en otras tutorías, 826 01:27:30,659 --> 01:27:49,279 Si yo aquí pongo que vector resultado, que ahora mismo está vacío, valga lo que es vector primero más vector segundo, lo que va a hacer es sumar los valores de ambos vectores. 827 01:27:49,279 --> 01:27:54,039 ahora mismo como vector segundo es 0 0 0 porque no hemos puesto ningún valor y por tanto no lo 828 01:27:54,039 --> 01:28:00,520 hemos inicializado y ojo se puede inicializar también aquí por ejemplo decir vale vector 829 01:28:00,520 --> 01:28:09,039 segundo al arrancar el juego pasa a valer vector 3 y vais a ver ahora una cosita de nuevo que es 830 01:28:09,039 --> 01:28:17,520 que vale vector segundo vale un vector 3 de 0 5 y 7 por ejemplo y bueno me falta poner un punto 831 01:28:17,520 --> 01:28:29,420 Mejor aquí. Vale, da problemas. Vais a ver que cuando estamos operando con vectores hay que poner, a diferencia de con los números sin, por ejemplo, que pones aquí 5 y se acabó porque es solo un valor, 832 01:28:29,859 --> 01:28:38,960 como aquí estamos operando con varios valores, pues hay que poner que es un vector 3 que recoge estos tres valores. Y recordad que cuando metemos valores brutos, como hacemos aquí, 833 01:28:38,960 --> 01:28:50,199 o como os he dicho antes, al ser una estructura tenemos que inicializar o instanciar un nuevo vector 3. Y ahora este vector segundo pasa a valer 0, 5 y 7. 834 01:28:50,979 --> 01:29:00,100 Entonces, ahora mismo las operaciones entre vectores, que es lo que vamos a conseguir con vector resultado, en este caso estamos sumando, veis que con el nombre de las variables, 835 01:29:00,100 --> 01:29:10,500 Aquí no hay ningún número. Los vectores primero y segundo. ¿Qué resultado va a dar esto? A ver si alguien me lo dice mientras lo voy escribiendo para que se vea en consola. 836 01:29:12,829 --> 01:29:35,079 Si habéis visto ya un poco el tema, esto ya lo indica. Y esto es vector resultado. ¿Qué va a devolver la consola? Vale. 837 01:29:35,079 --> 01:29:47,220 Vale, las operaciones entre vectores de suma y resta lo que hacen es sumarse entre sí las posiciones, es decir, la primera posición se suma con la primera, la primera de aquí se suma con esta, ¿vale? 838 01:29:47,659 --> 01:30:04,600 Resultando en este caso, por ejemplo, en 5, 6, 12. Vamos a verlo, si nos fijáis, 5, 6, 12. Y veréis además que dentro de un vector 3, por defecto, los valores son floats, ¿vale? 839 01:30:04,600 --> 01:30:29,420 Entonces, no tengáis miedo por poner aquí 5.5 y ojo, recordad, como es float, separado con punto y con coma, digo, por punto y poniendo la F de float, ¿vale? Para que no de error. Ahora pasaría a valer 5.5 y aquí voy yo que sé, puedo poner 1.5, ¿vale? Pasaría 5.5 más 1.5, 7, 6, 12, ¿no? Serían los valores. 840 01:30:29,420 --> 01:30:41,840 Bueno, pues guardo, voy allá. Esto es importante porque va a ser lo que nos va a ir determinando las sumas y operaciones de las distintas interacciones que hagamos, 7, 6, 12, ¿vale? 841 01:30:41,840 --> 01:31:06,840 Lo mismo con las restas, las restas se restan entre valores, pues aquí sería 5 con 5, y aquí pongo un menos, 5 con 5 menos 1 con 5, pues sería 4, 1 menos 5 sería menos 4, y 5 menos 7 menos 2, es decir, 4 menos 4 y menos 2, guardamos, y esto da 4 menos 4 menos 2, ¿vale? 842 01:31:06,840 --> 01:31:16,619 estas operaciones van a ser muy importantes a medida que vayáis haciendo porque al final todos nuestros valores del transform por ejemplo de posición, rotación y escala 843 01:31:16,619 --> 01:31:24,939 pues se van actualizando y desactualizando en función a vectores que van afectando uno a otro pues sumando para ampliar la dirección o la velocidad o la posición 844 01:31:24,939 --> 01:31:31,380 o restando para decrementarla. Entonces esto es importante entender cómo funcionan los vectores 3. 845 01:31:31,380 --> 01:31:43,979 Una última cosa, también se habla en el tema, ¿qué pasa si yo lo multiplico? Los vectores entre sí no se pueden multiplicar, sí se puede multiplicar un vector, por ejemplo, por un número 846 01:31:43,979 --> 01:31:56,800 Y lo que vais a ver es que lo que va a hacer es multiplicar por ese número cada uno de los valores, ¿vale? Pues por ejemplo aquí, vector primero, que es este de aquí, por 2 sería 5,5 por 2, 11, 2 y 10, ¿no? 847 01:31:56,800 --> 01:32:17,460 Bueno, yo guardo y van a ser 11, 2, 10, hemos dicho. Guardo, ejecuto, 11, 2, 10. Ahí está. Pero no se puede multiplicar un vector por otro. Para eso hay algunas funciones más avanzadas que vienen al tema, que sirven para hacer este tipo de operaciones. 848 01:32:17,460 --> 01:32:37,859 Entonces, que sepáis que si en algún momento queréis multiplicar cada valor por su correspondiente, no se puede de esta forma. Voy a parar aquí porque creo que es suficiente. Y además, si no hay duda de los temas 0 y 1, esto del 2 ya viene un poco explicado ahí, así que también es mejor no avanzar de más. 849 01:32:37,859 --> 01:32:56,239 Pero bueno, ¿qué tal lo que hemos estado viendo hoy? ¿Qué tal lo veis? Esto, cuando ya os pongáis además con la tarea 2, ya vais a ir viendo aplicación práctica, esto de tanto sumar y restar y tal, ¿vale? Ya van llegando frutos, digamos, más visibles. 850 01:32:56,239 --> 01:33:02,939 Lo he dicho, ¿qué tal? ¿Alguna duda? ¿Algo que queráis que repasemos o comentemos? 851 01:33:04,939 --> 01:33:05,859 Bastante bien, vale 852 01:33:05,859 --> 01:33:09,500 ¿Alguna duda o algo que pensabais que era de otra forma leyendo el tema? 853 01:33:09,680 --> 01:33:15,920 ¿O no? ¿Directamente estáis viendo cosas nuevas o se ajusta a lo que estabais leyendo en el tema? 854 01:33:16,220 --> 01:33:16,600 ¿Todo bien? 855 01:33:21,970 --> 01:33:23,130 Vale, vale 856 01:33:23,130 --> 01:33:25,810 Pues si no hay nada más, eso pues 857 01:33:25,810 --> 01:33:29,829 Claro, yo a veces, me ha puesto un compañero, me siento un poco abrumado 858 01:33:29,829 --> 01:33:43,050 A veces no sé si voy lento o voy rápido, os pido, por supuesto, como os dije, que este módulo lo llevéis al día, porque si no es verdad que, por mucho que yo explique aquí, son conceptos que cada vez se van sumando y se van complementando. 859 01:33:43,770 --> 01:33:55,869 Pero a veces no sé si voy rápido o lento, bueno, yo creo que vamos a buen ritmo, vale, es más por la sintaxis y la lógica, sí, es hacerse, y a medida que vais practicando, pues más fácil os será. 860 01:33:55,869 --> 01:34:14,850 Y ahora pongo muchos ejemplos, que son pocas líneas para ver la ejecución directa de los ejemplos, pero bueno, luego habrá que ir relacionando muchas líneas entre sí, porque cuando se introduzcan los métodos de acción, etc., como hemos hecho con el Insta en sí, pero métodos también que creemos nosotros, etc., pues sí. 861 01:34:14,850 --> 01:34:17,689 me puede un compañero 862 01:34:17,689 --> 01:34:19,229 en mi caso particular estoy más avanzado 863 01:34:19,229 --> 01:34:20,850 más por mi cuenta, también por tema del proyecto 864 01:34:20,850 --> 01:34:23,489 bueno, vale, pues luego también seguramente 865 01:34:23,489 --> 01:34:24,970 hay algún compañero que 866 01:34:24,970 --> 01:34:27,029 que directamente 867 01:34:27,029 --> 01:34:28,909 que sepa de esto, vaya que 868 01:34:28,909 --> 01:34:31,229 pero bueno, yo intento ir avanzando 869 01:34:31,229 --> 01:34:33,289 un poco, acorde a todo, e ir viendo 870 01:34:33,289 --> 01:34:35,149 cosas que aunque vayáis más avanzados 871 01:34:35,149 --> 01:34:37,210 está bien repasar o ver limitaciones 872 01:34:37,210 --> 01:34:38,689 que hay, que también es un poco el objetivo 873 01:34:38,689 --> 01:34:41,069 que intentéis ir entendiendo para 874 01:34:41,069 --> 01:34:42,609 frustraros lo menos posible con 875 01:34:42,609 --> 01:34:44,989 errores, por ejemplo eso que he puesto 876 01:34:44,989 --> 01:34:47,170 del null para si algo existe o no 877 01:34:47,170 --> 01:34:49,329 que de error o no, como condición 878 01:34:49,329 --> 01:34:50,930 es algo importante 879 01:34:50,930 --> 01:34:53,170 eso es lo que se llama también capturar 880 01:34:53,170 --> 01:34:55,149 excepciones, si queréis buscar más 881 01:34:55,149 --> 01:34:57,149 sobre ello, que hay otras formas de hacerlo con otras 882 01:34:57,149 --> 01:34:59,250 palabras dedicadas, pero en esencia es lo mismo 883 01:34:59,250 --> 01:35:00,970 de comprobar si algo existe 884 01:35:00,970 --> 01:35:02,930 para que si no existe no de error 885 01:35:02,930 --> 01:35:05,289 y se ejecute el juego igualmente 886 01:35:05,289 --> 01:35:07,050 y no se detenga porque 887 01:35:07,050 --> 01:35:08,930 algo no existe y que 888 01:35:08,930 --> 01:35:10,670 para nosotros es algo lógico, pues vale 889 01:35:10,670 --> 01:35:22,130 Si no existe ese GameObject en este caso para instanciar, pues omítelo y sigue, pero el ordenador Unity, la programación es más pejiguera que todo esto. 890 01:35:23,409 --> 01:35:32,149 Vale, pues nada, si no hay así dudas, ir avanzando. Bueno, en breves, de hecho, entregáis también la primera tarea. 891 01:35:32,430 --> 01:35:38,869 Con la tarea cero también iros poniendo y iremos viendo y dudas que tengáis, pues eso, también me interesa dudas que planteéis. 892 01:35:38,869 --> 01:35:46,890 Pues nada, si no hay nada más, pues muchas gracias por asistir y poquito a poquito pues lo iremos entendiendo mejor, claro.