1 00:00:01,710 --> 00:00:21,210 Vale, mira, por ir más al grano, hay dos menús, bueno, hay que hacer tres, incluimos el HUD, pero sobre todo vamos a ir uno a uno, primero habría que hacer este que se indica que es, en este caso, el menú inicial, que es una imagen con tres botones. 2 00:00:22,010 --> 00:00:29,769 Entiendo, por si no indagar más, que lo que es conectar, y además esto es algo que ya se adelantaba un poco en la tarea 3, 3 00:00:30,429 --> 00:00:35,689 conectar cada botón con que cargue otra escena, eso lo tenemos más o menos controlado. 4 00:00:36,869 --> 00:00:38,570 Voy a hacer aún así un repaso muy rápido, ¿vale? 5 00:00:39,090 --> 00:00:45,909 Pero, importantísimo, cuando vayamos teniendo niveles, que no sea solo un juego en el que hay un solo nivel, 6 00:00:45,909 --> 00:00:49,289 sino que vamos a tener que ir conectando y cargando distintos niveles, 7 00:00:49,289 --> 00:01:14,209 Bueno, incluso aunque sea uno, esto también hay que hacerlo, pero sobre todo si hay que conectar niveles, hay que siempre recurrir a este, que ya veremos sobre todo en el último tema, porque es desde donde se compila el juego, tenemos que recurrir a este File, Build Settings, el Build es el compilado, la construcción del juego, y aquí habrá que ir metiendo los niveles en un orden específico. 8 00:01:14,209 --> 00:01:34,170 Además, no tiene por qué ser un orden específico, pero sí que es lógico porque lo que sí nos va a proporcionar este conjunto de niveles que vayamos arrastrando aquí serán estos números de índice, que son muy útiles para decir, oye, ojo, cuando des a este botón quiero que cargue la arcena de índice 1, ¿vale? 9 00:01:34,170 --> 00:01:50,349 Entonces, bueno, eso es esencial y que en el juego ya haya una, bueno, pues gestión de estos niveles a nivel de orden y de tener conciencia de cómo se van, bueno, pues poniendo en serie estos índices. 10 00:01:50,349 --> 00:02:06,349 Aquí ya veremos, bueno, como veis, hay distintas plataformas para exportar. Lo veremos en el último tema, pero esta ventana, muy importante, sobre todo en la fase final del juego. Pero vemos que ya incluso para ir relacionando niveles es algo que hay que ir haciendo. 11 00:02:06,349 --> 00:02:18,550 Bueno, básicamente otra cosa, otro truco importante es que, como habréis visto en el tema, siempre que vayamos incorporando elementos de user interface, se va a generar este canvas. 12 00:02:18,550 --> 00:02:30,990 Y este canvas, al final, lo que suele ir haciendo es agrupar y se ve en la pantalla de escena cuando seleccionáis el canvas, pues genera este rectangulillo blanco, 13 00:02:30,990 --> 00:02:33,330 que según como esté configurada 14 00:02:33,330 --> 00:02:35,090 con las opciones del canvas scaler 15 00:02:35,090 --> 00:02:36,490 del canvas en general 16 00:02:36,490 --> 00:02:39,370 el render mode, vienen descritos 17 00:02:39,370 --> 00:02:40,110 en el tema también 18 00:02:40,110 --> 00:02:42,710 si acaso volvemos a esto 19 00:02:42,710 --> 00:02:44,750 pero dentro de este canvas 20 00:02:44,750 --> 00:02:47,349 es donde vamos a ir incorporando los distintos elementos 21 00:02:47,349 --> 00:02:48,590 de nuestras interfaces 22 00:02:48,590 --> 00:02:51,490 para que se vea 23 00:02:51,490 --> 00:02:52,270 el 24 00:02:52,270 --> 00:02:55,330 elemento de user interface 25 00:02:55,330 --> 00:02:57,289 en un nivel siempre tiene que haber un canvas 26 00:02:57,289 --> 00:02:58,770 mínimo, puede haber más de uno 27 00:02:58,770 --> 00:03:00,430 que vaya agrupando distintos 28 00:03:00,430 --> 00:03:04,889 distintas interfaces, sí que es lógico 29 00:03:04,889 --> 00:03:07,830 lo mejor realmente usar solo uno 30 00:03:07,830 --> 00:03:10,889 que agrupe todo, porque así todos los elementos 31 00:03:10,889 --> 00:03:13,969 se escalarán siguiendo una misma lógica, un mismo criterio 32 00:03:13,969 --> 00:03:17,349 que si hacemos varios ya puede haber ciertos conflictos 33 00:03:17,349 --> 00:03:19,090 y también tiene que haber otro elemento que es este 34 00:03:19,090 --> 00:03:22,969 que también lo genera automáticamente cuando incorporamos un elemento de UI 35 00:03:22,969 --> 00:03:25,189 en el nivel, en la escena 36 00:03:25,189 --> 00:03:29,009 este Event System que básicamente sirve para indicar 37 00:03:29,009 --> 00:03:30,909 así rápido, indicar 38 00:03:30,909 --> 00:03:32,229 si estamos jugando con 39 00:03:32,229 --> 00:03:34,370 un teclado 40 00:03:34,370 --> 00:03:36,650 cuál es el elemento que sale 41 00:03:36,650 --> 00:03:38,870 seleccionado ya por defecto 42 00:03:38,870 --> 00:03:41,069 y también para indicar las teclas 43 00:03:41,069 --> 00:03:41,969 de navegación, ¿vale? 44 00:03:41,969 --> 00:03:43,750 con un ratón es muy fácil 45 00:03:43,750 --> 00:03:45,849 decir aquí, aquí, ¿vale? pero si jugamos con un 46 00:03:45,849 --> 00:03:47,849 gamepad o con un 47 00:03:47,849 --> 00:03:49,909 bueno, pues con otro 48 00:03:49,909 --> 00:03:51,810 tipo de dispositivo que no es tan 49 00:03:51,810 --> 00:03:52,909 versátil, ¿no? tan 50 00:03:52,909 --> 00:03:55,949 apuntable, no sé si existe esa 51 00:03:55,949 --> 00:03:57,449 palabra, pero espero que me entendáis 52 00:03:57,449 --> 00:04:23,529 Pues hay que decir qué teclas, ¿vale? Y veis que ahora yo estoy dando a la flecha arriba y abajo de mi teclado y veis que voy pasando entre un nivel y otro. Y esto se debe a que está configurado en este input module, ¿vale? Si estáis usando el nuevo input system, hay que cargar otro. Se carga por defecto o te da una sugerencia de carga de otra forma de indicar qué inputs o qué axis, ¿vale? O qué botones o qué elemento es el que proporciona cada acción. 53 00:04:23,529 --> 00:04:25,670 pero bueno, el Event System tiene que estar ahí 54 00:04:25,670 --> 00:04:27,629 incluso aunque luego lo dejáramos vacío 55 00:04:27,629 --> 00:04:29,910 en gran parte, es un elemento 56 00:04:29,910 --> 00:04:30,970 pues que tiene que estar 57 00:04:30,970 --> 00:04:32,629 ¿vale? Luego 58 00:04:32,629 --> 00:04:35,790 ya dentro del Canvas, como también 59 00:04:35,790 --> 00:04:38,029 se explica en el tema y supongo que es una de las 60 00:04:38,029 --> 00:04:39,610 cosas que estaréis tocando 61 00:04:39,610 --> 00:04:41,629 en esta tarea, dado que se piden, bueno, pues se pueden ir 62 00:04:41,629 --> 00:04:43,730 metiendo desde imágenes hasta 63 00:04:43,730 --> 00:04:45,310 botones, ¿vale? 64 00:04:45,509 --> 00:04:47,990 y campos de texto 65 00:04:47,990 --> 00:04:49,990 sliders, etcétera 66 00:04:49,990 --> 00:04:51,410 ¿vale? Bueno, distintos elementos 67 00:04:51,410 --> 00:04:59,509 están referidos a esta gestión de los elementos de User Interface. 68 00:05:00,810 --> 00:05:04,949 El Canvas, yo también pienso, y suele ser un buen enfoque, 69 00:05:05,129 --> 00:05:10,970 que cuando tengo muchos elementos dentro y tengo que ir gestionando código 70 00:05:10,970 --> 00:05:17,470 para hacer referencia a algo de estos botones o estos inputs o imágenes, 71 00:05:17,470 --> 00:05:29,350 es el mejor sitio donde poner el script que yo cree, el que sea, para gestionar los distintos elementos. 72 00:05:29,509 --> 00:05:37,850 ¿Por qué? Porque habréis visto, por ejemplo, los botones que tienen una forma simplificada o rápida de llamar a métodos 73 00:05:37,850 --> 00:05:46,389 y que por tanto se ejecute por código, se ejecuten acciones, que es que dependiendo de qué tipo de elemento de user interface, 74 00:05:46,389 --> 00:05:51,629 abajo pueden tener ya lo que se conocen como eventos vale que digamos que ya hay 75 00:05:51,629 --> 00:05:57,370 una configuración hecha en unity en ese elemento vale que dice oye pues en este 76 00:05:57,370 --> 00:06:01,009 elemento botón como es lógico un botón por definición el botón porque sirve 77 00:06:01,009 --> 00:06:06,550 para pulsar un botón y que ocurra algo ya hay un evento se digamos que 78 00:06:06,550 --> 00:06:10,889 está siempre escuchando que ocurre algo en relación en este caso a que se haga 79 00:06:10,889 --> 00:06:15,370 clic es decir que cuando se haga clic en este elemento por ejemplo en este botón 80 00:06:15,370 --> 00:06:21,009 de play es el que está aquí ahora mismo seleccionado vale lo he colocado y al 81 00:06:21,009 --> 00:06:25,370 final lo que se puede hacer aquí es cargar un script que tengamos y llamar 82 00:06:25,370 --> 00:06:32,250 al método que tengamos previsto no entonces al final la forma de no 83 00:06:32,250 --> 00:06:36,110 perderse cuando cargamos este script que dentro tiene un método vale voy a abrir 84 00:06:36,110 --> 00:06:40,750 ese script para que veáis también que escribir para que no sea tan abstracto 85 00:06:40,750 --> 00:06:46,490 es, yo tengo en el menú de introducción este que hay, 86 00:06:46,689 --> 00:06:50,769 realmente lo único que hay que hacer es poner botones 87 00:06:50,769 --> 00:06:53,970 y que esos botones, al pulsarlos, nos lleven a distintas escenas. 88 00:06:54,529 --> 00:06:57,870 No hay comportamientos más complejos en este, en el otro menú sí los hay. 89 00:06:57,990 --> 00:07:01,189 Y por eso probablemente es porque estáis más atascados en ese nivel. 90 00:07:01,189 --> 00:07:05,329 Pero bueno, simplemente tener en cuenta, pues yo entonces he dicho, 91 00:07:05,449 --> 00:07:09,850 vale, este canvas voy a ponerle un script ya puesto aquí, 92 00:07:09,850 --> 00:07:26,250 que se llama Loaded Scenes, que sirve para cargar escenas, y lo tengo aquí preparado con su namespace, su librería para la gestión de niveles, ¿vale? Esto también lo explica el tema, que esté preparado con métodos públicos, ¿vale? 93 00:07:26,250 --> 00:07:42,889 Dos métodos públicos que veis que no se llaman en ningún tiempo de ejecución, sino que, es decir, yo podría hasta borrar esto, y he hecho métodos públicos solo con el propósito de luego arrastrarlo a estas acciones que ya están configuradas en un elemento de UI, en este caso botones para clicar. 94 00:07:42,889 --> 00:08:12,089 Entonces yo en el canvas, que es un game object que puedo arrastrar aquí, cuando lo arrastre lo que va a hacer es detectar ese script que tenemos aquí. Yo arrastro este canvas y luego del listado de opciones que tenemos aquí nos van a salir que al hacer clic no solo podemos acceder a ese script que tiene este objeto que se llama load the scenes y que aquí por ejemplo tendrá este método salir, 95 00:08:12,089 --> 00:08:35,490 que es uno que he creado aquí, pues con ese nombre, ¿vale? Y otro será loadScene, que es el que he creado yo aquí, ¿vale? Recuerdo que tienen que ser públicos. Pues yo tengo aquí métodos ya que vienen por defecto, pero también métodos que he creado yo y que aquí, si está bien configurado, la gracia que tiene también es que podemos poner un parámetro al configurarlo, que es este parámetro que aparece aquí. 96 00:08:35,490 --> 00:09:04,990 Entonces gracias a esto lo que podemos hacer es decirle, vale, yo voy a decir que cuando hagamos clic cargue el script de load the scenes porque está configurado, está ya digamos establecido como componente en este canvas, pero aparte yo, claro, cuando pulso el botón no es solo carga escena, quiero que sea versátil y no hacer un método como pasaba lógicamente también. 97 00:09:05,490 --> 00:09:08,350 no hay ninguna crítica, como os pasaba a muchos en la tarea 3, 98 00:09:08,730 --> 00:09:10,769 que hacíais una script para cargar cada nivel. 99 00:09:11,789 --> 00:09:15,350 Pues script para nivel 2, que lo que hacía era cargar el 3, 100 00:09:15,710 --> 00:09:17,529 y script para el 3, para cargar el 4. 101 00:09:18,549 --> 00:09:22,370 En el tema se habla de que las escenas se pueden cargar poniendo un número, 102 00:09:22,809 --> 00:09:26,309 que es el número del índice que acabamos de hablar en el build settings, 103 00:09:26,870 --> 00:09:30,529 o también, bueno, más complejo de adivinar, que es poner el nombre, 104 00:09:30,529 --> 00:09:32,850 por ejemplo, de esa escena. 105 00:09:32,850 --> 00:09:52,710 Pero los números, lo bueno que tiene es que se puede sumar, restar y se pueden hacer operaciones para navegar entre unos y otros. Por tanto, aquí, si yo, digamos, que preparo este parámetro en el propio método, luego ya voy a poder cargar la escena de este número que pongamos en el inspector, ¿vale? 106 00:09:52,710 --> 00:10:13,009 Aquí no recuerdo, la escena que quiero cargar es el nivel 1, ¿vale? Aquí tendré que poner, a ver, que es que como lo he tocado no me acuerdo, nivel 1 es el índex 1, perfecto, pues 1, ¿vale? Entonces yo he configurado que cuando haga clic en ese botón, aquí lo tengo, paso al nivel 1 que es el de jugar y ya puedo jugar. 107 00:10:13,009 --> 00:10:42,190 ¿Vale? Entonces es importante tener en cuenta que los comportamientos de los métodos interactivos, y voy rápidamente, no lo quiero guardar, ¿vale? Lo que cambia por si hay que tocar algo, pero en un input, ¿vale? Por ejemplo, que es esta entrada de texto, si vamos navegando por sus elementos y vamos a input username, va a haber otros, este es otro de los elementos que se pueden agregar, ¿vale? 108 00:10:42,190 --> 00:10:46,169 Este, por ejemplo, o el Legacy, el Input Fill, ¿vale? 109 00:10:46,649 --> 00:10:48,990 Es ese campo de texto que se puede introducir. 110 00:10:49,129 --> 00:10:51,490 Aquí no es al hacer clic cuando sucede la acción. 111 00:10:51,590 --> 00:10:54,289 Aquí es cuando cada vez que vayamos cambiando un valor, 112 00:10:54,470 --> 00:10:56,809 es decir, vayamos tocando una tecla, 113 00:10:57,389 --> 00:11:00,690 pues yo aquí he preparado otro canvas con otro script diferente 114 00:11:00,690 --> 00:11:05,049 adaptado a qué estamos buscando en este menú, ¿vale? 115 00:11:05,129 --> 00:11:08,009 Pues que se va a ocupar de un texto, de un slider, 116 00:11:08,590 --> 00:11:11,870 y también de los textos que va a ir mostrando aquí de dificultad. 117 00:11:12,190 --> 00:11:27,309 Bueno, ahora vamos a ese, pero simplemente que veáis que en el canvas de este nivel lo que he hecho es un menú, un script, perdonad, pues ya preparando todas las necesidades que vamos a tener con estos inputs y los eventos que tienen aquí, ¿vale? 118 00:11:27,309 --> 00:11:39,529 Los textos, estos input fields, no solo pueden lanzar eventos cuando estamos cambiando los valores. 119 00:11:39,929 --> 00:11:42,950 Puede ser que sea cuando terminemos de editar y salgamos. 120 00:11:43,110 --> 00:11:48,389 En ese caso, habría que añadir aquí el canvas, en este caso, que es el objeto que tiene el método, 121 00:11:48,490 --> 00:11:51,509 y aquí poner el método que nos interesaba. 122 00:11:51,509 --> 00:11:56,509 DayDestines, este canvas, sería el de ConfigMenu. 123 00:11:57,309 --> 00:12:12,789 Yo busco aquí que he preparado funciones en ConfigMenu y aquí tendré que ver, por ejemplo, UpdateInput y UpdateSlider, que son los métodos públicos que he generado yo en este. 124 00:12:12,789 --> 00:12:28,370 Yo os lo voy a enseñar para que lo veáis también. A ver si quiere, que es configMenu, que es otro script que yo he creado aquí, pues que tiene otros métodos públicos, que nuevamente lo que haces es, al lanzarse ese evento, pues hará lo que haga aquí. 125 00:12:28,370 --> 00:12:35,370 El de updateSlider será este y el de updateInput será este. Nuevamente, que sean métodos públicos. 126 00:12:39,590 --> 00:12:47,090 Entonces, voy a eliminar esto. Simplemente eso que tengáis en cuenta, que el canvas es muy buen elemento para ir. 127 00:12:47,509 --> 00:12:54,190 Aquí había un botón que queremos que cargue escenas. Puedo hasta aprovechar el mismo porque luego al dar a este botón, 128 00:12:54,190 --> 00:13:09,509 Pues lo que pondré es que vaya al arcenacero, porque estoy reutilizando scripts, no hay que hacer uno por cada uno, porque gracias a ese parámetro en el método puedo indicar a qué índice de los build settings quiero dirigirme, quiero que se cargue cuando dé ese botón, pero eso. 129 00:13:09,789 --> 00:13:19,850 Luego he añadido otro script en el canvas que tiene aquí distintas funcionalidades, distintas variables con las que iremos jugando. 130 00:13:19,850 --> 00:13:23,850 Simplemente algo que es importante 131 00:13:23,850 --> 00:13:26,769 Que también cuando os hayáis puesto 132 00:13:26,769 --> 00:13:27,929 No quiero guardar 133 00:13:27,929 --> 00:13:29,870 Cuando os hayáis puesto a trastear 134 00:13:29,870 --> 00:13:32,389 Con crear el canvas, poner la imagen de fondo, etc 135 00:13:32,389 --> 00:13:37,149 Es que a veces no es del todo intuitivo 136 00:13:37,149 --> 00:13:38,750 Cómo surge esto 137 00:13:38,750 --> 00:13:40,529 En el canvas, en cualquiera 138 00:13:40,529 --> 00:13:41,230 Al final está 139 00:13:41,230 --> 00:13:42,990 Cómo se ve este canvas 140 00:13:42,990 --> 00:13:45,950 Pues si es una sobreposición a lo que haya en la escena 141 00:13:45,950 --> 00:13:48,529 Que sea un poco independiente de la cámara 142 00:13:48,529 --> 00:13:52,970 y que básicamente se ponga por encima, que se ubique en el espacio como un elemento 3D 143 00:13:52,970 --> 00:13:56,350 o que tenga en cuenta una cámara y ya el plano focal también, ¿vale? 144 00:13:56,350 --> 00:14:03,629 Pero más que eso, este canvas scaler en relación con que en la pantalla game, ¿vale? 145 00:14:03,629 --> 00:14:12,230 Y esta es la forma de testear si están escalándose bien o no los elementos que tengamos en juego 146 00:14:12,230 --> 00:14:18,649 de User Interface, es que nosotros, por defecto, en la pantalla de juego, 147 00:14:18,889 --> 00:14:23,649 en donde estamos simulando el juego, vais a ver que aquí hay distintos aspect ratios. 148 00:14:23,870 --> 00:14:27,830 Pero nosotros aquí podemos definir cuál es el tamaño de ese juego, 149 00:14:28,289 --> 00:14:31,750 el tamaño final en el que estamos pensando que se está haciendo nuestro juego. 150 00:14:32,370 --> 00:14:36,649 Vosotros tened en cuenta, y por eso sucede que yo cuando voy arrastrando, 151 00:14:36,649 --> 00:14:38,830 haciendo más grande y más pequeña esta pantalla 152 00:14:38,830 --> 00:14:41,149 pues salen estos rebordes 153 00:14:41,149 --> 00:14:43,029 que son el fondo 154 00:14:43,029 --> 00:14:44,090 este 155 00:14:44,090 --> 00:14:45,809 Skybox 156 00:14:45,809 --> 00:14:48,649 este HDR que envuelve 157 00:14:48,649 --> 00:14:51,230 pero nosotros 158 00:14:51,230 --> 00:14:52,649 cuando juguemos no vamos a querer 159 00:14:52,649 --> 00:14:55,129 que se vean esos fondos, queremos que se adapte 160 00:14:55,129 --> 00:14:56,250 a las medidas 161 00:14:56,250 --> 00:14:59,210 si nosotros sabemos que nuestro juego 162 00:14:59,210 --> 00:15:01,129 se va a reproducir en dispositivos 163 00:15:01,129 --> 00:15:02,850 que son de 1920 164 00:15:02,850 --> 00:15:05,289 por 1080 píxeles o full HD 165 00:15:05,289 --> 00:15:07,149 nosotros podemos definirlo ahí 166 00:15:07,149 --> 00:15:09,210 pero tener en cuenta una cosa 167 00:15:09,210 --> 00:15:10,850 y esto es algo que a veces 168 00:15:10,850 --> 00:15:13,730 no tenemos en cuenta pero cuando hablamos 169 00:15:13,730 --> 00:15:15,669 de un píxel, realmente un píxel es 170 00:15:15,669 --> 00:15:18,289 un cuadrado con información de brillo 171 00:15:18,289 --> 00:15:19,990 un píxel de una pantalla 172 00:15:19,990 --> 00:15:21,830 pero no tiene una medida establecida 173 00:15:21,830 --> 00:15:24,190 habrá móviles 174 00:15:24,190 --> 00:15:25,929 de hecho normalmente los móviles 175 00:15:25,929 --> 00:15:27,889 con los que contamos son una pantalla 176 00:15:27,889 --> 00:15:30,370 pequeñita de 1920 177 00:15:30,370 --> 00:15:31,889 por 1080 si lo ponemos en 178 00:15:31,889 --> 00:15:33,870 horizontal y es 179 00:15:33,870 --> 00:15:38,350 la misma resolución, las mismas dimensiones en píxeles que a lo mejor el monitor de ordenador, 180 00:15:38,490 --> 00:15:42,889 que es cinco veces más grande, que también es 1920x1080 píxeles. 181 00:15:43,470 --> 00:15:48,710 Por eso es importante tener en cuenta que se pueden hacer contenidos de user interface 182 00:15:48,710 --> 00:15:57,190 con un tamaño de píxel lo que se llama constante, que es decir, en relación a las dimensiones 183 00:15:57,190 --> 00:16:11,610 que tenga la pantalla que sea, que cada unidad de medida que tenga nuestro proyecto, que sean 100 píxeles. 184 00:16:12,330 --> 00:16:18,250 Entonces están, y luego aquí hay una que incluso lo que hacemos es que decimos, no, la pantalla es que va a tener 185 00:16:18,250 --> 00:16:24,789 estas medidas físicas, reales, y con una densidad de píxel X, que es esto del DPI. 186 00:16:24,789 --> 00:16:44,610 ¿Qué sucede con esto? Que hay siempre que tener en cuenta que a menos que sepamos las medidas concretas de la pantalla y siempre vaya a ser la misma, o tenga muy claro que siempre va a ser en un dispositivo de 1920x1080 en este caso, habría que jugar, o lo suyo sería que se escalara con el tamaño de la pantalla. 187 00:16:44,610 --> 00:17:02,789 Es decir, que nosotros pongamos una referencia concreta y por eso se pone esta resolución de referencia en plan, mira, el trabajo que estoy haciendo ahora es en base a estas medidas. Pero bueno, que si luego se empieza a hacer más grande o más pequeño, y esto lo hago en la pantalla de game, no en la de escena. 188 00:17:02,789 --> 00:17:09,869 La escena es el editor de Unity, vamos, es como donde operamos, donde se ve el resultado es en el simulador de juego. 189 00:17:10,890 --> 00:17:17,309 Y aquí es donde podemos decir, vale, que no sean unas medidas concretas, que no sean 1920 píxeles por 1080 píxeles, 190 00:17:17,789 --> 00:17:24,750 que el dispositivo le está diciendo que tiene estas dimensiones, sino que tenga un aspect ratio, vale, un alto y un ancho siempre de 1920 por 1080. 191 00:17:24,750 --> 00:17:39,750 Sí que es verdad que a no ser que sean pantallas muy extrañas, está un poco universalizado este 1690, o bueno, en informática sobre todo un 1690, perdón, está especializado, está estandarizado. 192 00:17:39,750 --> 00:17:45,569 pero esto a lo que quiero llegar es que se habla luego en los elementos en los propios elementos 193 00:17:45,569 --> 00:17:53,490 de que existe esto de los puntos de los puntos de anclaje vale y esto tiene sentido cuando ponemos 194 00:17:53,490 --> 00:17:59,269 unas dimensiones que están establecidas si lo que hacemos es que se escale con el tamaño de 195 00:17:59,269 --> 00:18:06,329 la pantalla veis que lo que va a hacer es oye tómate esta proporción de aspecto este aspecto 196 00:18:06,329 --> 00:18:14,730 de 16 novenos y si la pantalla fuera más grande o más pequeña mientras tenga esa proporción pues 197 00:18:14,730 --> 00:18:19,509 no va a haber problema porque se escalará todo uniformemente que ocurre que si tenemos una 198 00:18:19,509 --> 00:18:25,269 pantalla muy pequeña también puede suceder que de pronto pues los botones se hacen muy pequeños y 199 00:18:25,269 --> 00:18:30,450 si queremos que aunque la pantalla la resolución fuera pequeña los botones como los vamos a hacer 200 00:18:30,450 --> 00:18:36,750 pulsar si hicieron más grandes ahí es cuando nos puede venir bien jugar con que lo que tome es vale 201 00:18:36,750 --> 00:18:42,210 en relación a los píxeles que tenga esa pantalla pues oye yo quiero que este elemento vale y aquí 202 00:18:42,210 --> 00:18:48,750 es donde seguirán ajustando la proporción de cuántos píxeles tiene cada bueno esto me está 203 00:18:48,750 --> 00:18:54,690 saliendo bueno voy a poner un poquito más grande vale es donde yo indico como quiero que esto se 204 00:18:54,690 --> 00:19:00,730 escale o no, ¿vale? Que es donde habrá que ir diciéndole que esto tenga una proporción 205 00:19:00,730 --> 00:19:09,529 X y este botón, por ejemplo, de jugar, que lo vemos aquí con estas anclas, se vaya escalando 206 00:19:09,529 --> 00:19:14,230 a medida que esa pantalla detecte que es más grande o no, ¿vale? Esto ya, a ver, lo voy 207 00:19:14,230 --> 00:19:19,789 a hacer con el botón de jugar, pues si vamos definiendo aquí estos puntos de anclaje, 208 00:19:20,289 --> 00:19:23,829 ¿vale? Cuando vayamos haciendo más grande y más pequeña la pantalla, veis que sí 209 00:19:23,829 --> 00:19:28,869 que se queda en un sitio y con unas proporciones a lo que quiero llegar vale que esto sí que es 210 00:19:28,869 --> 00:19:33,450 un poco prueba y error porque en el momento es un poco confuso entenderlo claramente en plan 211 00:19:33,450 --> 00:19:39,150 cuando sucede algo cuando sucede no es que a no ser que tengamos muy claro que va a tener unas 212 00:19:39,150 --> 00:19:43,569 medidas muy concretas normalmente lo que nos interesa es que toda la pantalla se haga más 213 00:19:43,569 --> 00:19:50,710 o menos grande vale porque además por lo general eso tenemos ya proporciones muy estandarizadas 214 00:19:50,710 --> 00:19:53,710 pero otro elemento importante 215 00:19:53,710 --> 00:19:55,529 que a veces sucede también cuando corrijo 216 00:19:55,529 --> 00:19:57,509 vuestras tareas, también normal, es que cuando 217 00:19:57,509 --> 00:19:59,589 ponemos FreeASP es básicamente que nos llene 218 00:19:59,589 --> 00:20:01,650 con contenido pues todo el 219 00:20:01,650 --> 00:20:03,390 cuadro que tengamos, todo el visor que tengamos 220 00:20:03,390 --> 00:20:05,150 de la pantalla game, nada se adapta 221 00:20:05,150 --> 00:20:07,650 se adapta al ancho y al 222 00:20:07,650 --> 00:20:09,329 y al alto 223 00:20:09,329 --> 00:20:11,349 pues para que se ajuste 224 00:20:11,349 --> 00:20:13,509 en relación a lo que sería ese 16 novenos 225 00:20:13,509 --> 00:20:15,450 en este caso que está ahí establecido 226 00:20:15,450 --> 00:20:18,009 ¿vale? y de hecho si os fijáis 227 00:20:18,009 --> 00:20:19,569 por eso sale esta caja 228 00:20:19,569 --> 00:20:31,950 que sobresale, porque al final se está todo el rato ajustando para que coja o el ancho o, atención, el alto, y veis que ahora coge la otra dimensión de esta caja de referencia, ¿vale? 229 00:20:31,970 --> 00:20:42,630 Para que se adapte en todo momento. Pero lo suyo, ¿vale? Y aquí siempre está todo a escala 1, lo suyo en ocasiones, cuando queremos ver que algo tiene unas medidas concretas 230 00:20:42,630 --> 00:20:58,049 Y cómo se va a ver realmente es que si nosotros tenemos una pantalla en la que estamos haciendo las pruebas, que es 1920x1080, lo pongamos ya en esas dimensiones y veréis que ahí en ese caso sí que la escala va cambiando, se va haciendo más grande o más pequeña. 231 00:20:58,049 --> 00:21:14,269 Porque aquí, con respecto a mi monitor, sí que se está viendo pequeño. Mi monitor podría enseñarlo, en ese aspecto que tenemos, y dado que mi monitor le está diciendo al sistema que es 1920 píxeles por 1080, en realidad aquí sabe que se está haciendo más pequeño. 232 00:21:14,269 --> 00:21:23,029 Pero en realidad esto, como se vería si lo viéramos a tamaño completo, es esto. Esta es la medida real que va a tener en un dispositivo con el que estoy viendo. 233 00:21:23,029 --> 00:21:46,250 Entonces, que a veces pueden surgir como pixelados raros o no, esto para comprobar que se ve sin pixelado, porque a lo mejor estoy haciendo, ahora no porque estoy haciendo que sean las dimensiones, pero veis que se están pixelando aquí, imagino que lo veis en el streaming, se están pixelando aquí elementos porque estoy haciendo una escala sobre el visor, pero realmente las dimensiones es esta. 234 00:21:46,250 --> 00:22:02,190 Y esta es la referencia que tendríais que tener de si se está viendo algo pixelado o no, ¿vale? Que a veces sucede que escaláis los textos y se ven pixelados o no, o a veces es porque estáis haciendo esto y lo estáis viendo así, ¿vale? Que sepáis que la referencia de cómo se ve es siempre 1. 235 00:22:02,190 --> 00:22:25,210 Es verdad que para verlo bien, lo suyo sería que cuando reproduzcamos, al darle a play, pongamos este modo de play maximize y va a coger el tamaño o casi, aunque aquí ponga escala 1, realmente no está a escala 1 porque esto está ocupando espacio, pero veis aquí que tiene las dimensiones más o menos que debería tener. 236 00:22:25,210 --> 00:22:40,470 Se está ajustando a todo el ancho de la pantalla. Entonces, bueno, es como mejor se vería para verlo lo más fiable posible. Dicho esto, bueno, lo mismo de siempre. En realidad, si ponéis un 16 novenos, pues más o menos vais viendo las medidas. 237 00:22:40,470 --> 00:23:01,490 Pero no se está diciendo cuándo está viendo ese pixelado o no por esta ampliación, porque siempre te va a poner uno. Aunque yo lo haga muy pequeño, veis que como es relativo el espacio y no está cogiendo el dispositivo en el que lo vemos, que en este caso es mi pantalla o puede ser el móvil, pues se ve así. Siempre a un uno que no es el real, no es el tamaño real. 238 00:23:01,490 --> 00:23:15,309 Pero bueno, está haciendo una adaptación con este Scale with Screen Size que sí que en realidad es relativo. Pero bueno, que sepáis que eso, que si estáis trabajando para pantallas concretas o dimensiones de píxel concretas, esto es muy importante. 239 00:23:15,309 --> 00:23:17,930 vale, me pone una pregunta 240 00:23:17,930 --> 00:23:19,710 algunas fuentes que he cargado en Unity 241 00:23:19,710 --> 00:23:22,089 no me funcionan, aparecen pero no se aplican 242 00:23:22,089 --> 00:23:23,930 es muy raro, vale, necesito 243 00:23:23,930 --> 00:23:25,750 que me contestes si estás 244 00:23:25,750 --> 00:23:27,710 usando en tu proyecto el 245 00:23:27,710 --> 00:23:29,569 TextMeshPro o el TextLegacy 246 00:23:29,569 --> 00:23:31,690 es decir, si has instalado el 247 00:23:31,690 --> 00:23:33,369 TextMeshPro, vale, el TextMeshPro 248 00:23:33,369 --> 00:23:35,549 si no me equivoco 249 00:23:35,549 --> 00:23:37,930 lo voy a buscar un segundo, os dejé un tutorial 250 00:23:37,930 --> 00:23:39,690 mira 251 00:23:39,690 --> 00:23:41,609 aquí, si vas al 252 00:23:41,609 --> 00:23:43,369 apartado 3.1.1 253 00:23:43,369 --> 00:23:46,910 hay aquí un método 254 00:23:46,910 --> 00:23:48,190 imagino que es esto 255 00:23:48,190 --> 00:23:50,069 de cómo convertir una fuente de texto 256 00:23:50,069 --> 00:23:52,450 una tipografía para que funcione en TestMeshPro 257 00:23:52,450 --> 00:23:53,869 si no me equivoco 258 00:23:53,869 --> 00:23:56,789 tendría que verlo 259 00:23:56,789 --> 00:23:58,069 pero si no me equivoco 260 00:23:58,069 --> 00:23:59,329 cuando instalas el TestMeshPro 261 00:23:59,329 --> 00:24:00,109 yo ya lo he instalado 262 00:24:00,109 --> 00:24:01,869 como pone en el tema 263 00:24:01,869 --> 00:24:05,509 hay un menú aquí 264 00:24:05,509 --> 00:24:07,210 que se llama FontAssetCreator 265 00:24:07,210 --> 00:24:09,109 tendría que importar esto 266 00:24:09,109 --> 00:24:09,809 que no lo hice 267 00:24:09,809 --> 00:24:11,430 lo importo 268 00:24:11,430 --> 00:24:15,309 Dame un segundo de cargue y tal, ¿vale? 269 00:24:15,869 --> 00:24:20,470 Bueno, y cuando, bueno, perdona, que se me ha desconfigurado un poco la pantalla. 270 00:24:21,250 --> 00:24:25,650 Eso, cuando instaláis todo lo necesario para ir funcionando con TestMesh Pro, 271 00:24:26,329 --> 00:24:32,470 aparece esta opción del asset creator y aquí puedes buscar esa tipografía, ¿vale? 272 00:24:32,470 --> 00:24:37,589 Que tengas, la metes y, bueno, hay distintas opciones que en principio no habría que tocar mucho 273 00:24:37,589 --> 00:24:39,390 porque yo creo que por defecto la va a hacer bien 274 00:24:39,390 --> 00:24:41,589 y es generate font 275 00:24:41,589 --> 00:24:43,250 atlas, cuando le das aquí 276 00:24:43,250 --> 00:24:45,190 hace un proceso que básicamente 277 00:24:45,190 --> 00:24:47,549 lo que hace es guardar esa tipografía 278 00:24:47,549 --> 00:24:49,690 no sé muy bien donde me la guarda 279 00:24:49,690 --> 00:24:50,390 ahora mismo 280 00:24:50,390 --> 00:24:53,609 pero básicamente en algún punto 281 00:24:53,609 --> 00:24:55,569 del nivel, o igual 282 00:24:55,569 --> 00:24:57,269 hay que guardarlo y ahora no me acuerdo 283 00:24:57,269 --> 00:24:59,369 aquí en fonts, vale 284 00:24:59,369 --> 00:25:01,769 me ha creado esta tipografía 285 00:25:01,769 --> 00:25:03,930 ¿vale? y esta tipografía 286 00:25:03,930 --> 00:25:05,230 ahora sí que la puedo meter 287 00:25:05,230 --> 00:25:07,329 pues en donde haya 288 00:25:07,329 --> 00:25:08,630 un campo de texto 289 00:25:08,630 --> 00:25:11,130 pues se puede meter este legacy 290 00:25:11,130 --> 00:25:13,490 ¿vale? y en principio 291 00:25:13,490 --> 00:25:15,269 bueno es que yo no estoy 292 00:25:15,269 --> 00:25:17,349 usando el testmesh pro ¿vale? ese es el problema 293 00:25:17,349 --> 00:25:19,490 que cuando 294 00:25:19,490 --> 00:25:20,369 no es testmesh pro 295 00:25:20,369 --> 00:25:23,430 con arrastrar la tipografía a los assets 296 00:25:23,430 --> 00:25:25,410 ¿vale? ya se carga, ya se puede usar 297 00:25:25,410 --> 00:25:27,150 pero claro testmesh pro como tiene 298 00:25:27,150 --> 00:25:29,049 más opciones de sombrearla, de ponerle 299 00:25:29,049 --> 00:25:31,170 rebordillos, hacer ese tipo 300 00:25:31,170 --> 00:25:33,009 de cosas, hay que hacer esta operación de 301 00:25:33,009 --> 00:25:35,109 convertirla ¿vale? con el 302 00:25:35,109 --> 00:25:40,390 Fondo Asset Creator y ya una vez está creado, ya sí la puedes usar en un TestMesh Pro. 303 00:25:40,390 --> 00:25:44,049 De hecho, pongo uno aquí, aunque sea de prueba. 304 00:25:44,569 --> 00:25:48,210 Voy a poner aquí y voy a decirle que sea Liberation Sans. 305 00:25:49,130 --> 00:25:52,930 Esta tipografía aquí, le digo tipografía aquí. 306 00:25:54,750 --> 00:25:56,369 Y ya me la está cogiendo, por lo que veo. 307 00:25:57,009 --> 00:26:04,210 A ver, la que acabo de crear es esta, si no me equivoco. 308 00:26:04,210 --> 00:26:17,210 Y lo que voy a hacer es poner hola y lo voy a poner más grande y que esté donde tiene que estar, que es... 309 00:26:17,210 --> 00:26:32,829 Esto, la cosa es que está muy... Vale, importante, porque no se está viendo, porque lo he creado fuera del Canva, importante también, que si no, no se va a ver en la vida. 310 00:26:34,210 --> 00:26:41,869 y te te espera pero nada pero no se está viendo también por qué 311 00:26:50,079 --> 00:26:54,420 vale porque se está desbordando probablemente 312 00:27:01,170 --> 00:27:06,829 está ahí porque no se ve lo primero voy a borrar esto voy a 313 00:27:06,829 --> 00:27:12,529 hacer el canvas cuál no os recomiendo usar está detrás 314 00:27:12,529 --> 00:27:20,769 del fondo ahora lo vemos pero no pero no está detrás del fondo bueno ahora lo probamos si lo 315 00:27:20,769 --> 00:27:28,430 dice será ahora si está no sea crearlo no le crea bien ahí está vale ahora sí que es importante 316 00:27:28,430 --> 00:27:33,109 cuando creéis un elemento de yu hay sino si ya está el canvas pues darle al canvas que va a 317 00:27:33,109 --> 00:27:39,589 quitar problemas si yo antes cuando lo arrastraba en principio estaba ya abajo del todo bueno esto 318 00:27:39,589 --> 00:27:41,809 lo que dice el compañero, el orden 319 00:27:41,809 --> 00:27:44,049 de renderizado, cuando hay elementos 320 00:27:44,049 --> 00:27:45,650 que ocupan todo, como este fondo 321 00:27:45,650 --> 00:27:47,809 va de abajo a arriba, es decir 322 00:27:47,809 --> 00:27:49,230 lo de abajo se ve por encima 323 00:27:49,230 --> 00:27:50,809 por ejemplo 324 00:27:50,809 --> 00:27:53,710 si yo quito aquí zoom 325 00:27:53,710 --> 00:27:54,630 y pongo 326 00:27:54,630 --> 00:27:57,789 voy a hacer más grande 327 00:27:57,789 --> 00:27:59,450 la caja, si lo pongo 328 00:27:59,450 --> 00:28:01,890 encima, imagino que lo veis 329 00:28:01,890 --> 00:28:03,849 del botón, al estar 330 00:28:03,849 --> 00:28:05,490 por debajo de la jerarquía se ve por delante 331 00:28:05,490 --> 00:28:08,009 si lo pongo por detrás, se ve por detrás 332 00:28:08,009 --> 00:28:10,150 ¿vale? es lo que decía, pero yo creo que estaba bien 333 00:28:10,150 --> 00:28:12,109 pero vaya, ¿tipografía 334 00:28:12,109 --> 00:28:13,710 que usar? pues 335 00:28:13,710 --> 00:28:15,990 la que queráis 336 00:28:15,990 --> 00:28:17,990 la verdad es que no tengo 337 00:28:17,990 --> 00:28:18,869 ninguna pensada 338 00:28:18,869 --> 00:28:21,089 si queréis 339 00:28:21,089 --> 00:28:23,890 esta de Legacy Runtime, si no me equivoco 340 00:28:23,890 --> 00:28:25,730 viene con el propio sistema 341 00:28:25,730 --> 00:28:27,029 entonces 342 00:28:27,029 --> 00:28:29,029 pues esa misma 343 00:28:29,029 --> 00:28:31,630 no recuerdo 344 00:28:31,630 --> 00:28:33,809 si esta la descargué o 345 00:28:33,809 --> 00:28:35,650 la bajé de por ahí, pero yo creo que esta 346 00:28:35,650 --> 00:28:44,829 está ya directamente con Unity. Pues esa, por ejemplo, podría estar bien. Pero la que veáis, 347 00:28:45,230 --> 00:28:51,529 pues básicamente que se vea bien. Que sea... Hombre, normalmente las gordotas, las que son 348 00:28:51,529 --> 00:28:57,930 así más gruesas, que tienen así... Y lo que se llama un compress, que es que son más verticales 349 00:28:57,930 --> 00:29:02,390 a veces que horizontales, que es lo que pasa aquí, que son bastante verticales, pues funcionan bien. 350 00:29:02,390 --> 00:29:04,869 no lo sé, si queréis 351 00:29:04,869 --> 00:29:06,609 tipografías hay una web 352 00:29:06,609 --> 00:29:08,509 que supongo que conocéis de RPMI 353 00:29:08,509 --> 00:29:09,690 que se llama 354 00:29:09,690 --> 00:29:12,750 bueno 355 00:29:12,750 --> 00:29:14,970 Dafont por supuesto que tiene muchísimas 356 00:29:14,970 --> 00:29:16,829 no siempre tienen que ser de muchísima calidad 357 00:29:16,829 --> 00:29:18,509 pero hay muchísimas 358 00:29:18,509 --> 00:29:20,609 y muchas gratis, os lo ponen aquí 359 00:29:20,609 --> 00:29:22,529 y muchas categorías, luego hay otra 360 00:29:22,529 --> 00:29:24,309 que son como más de diseñadores 361 00:29:24,309 --> 00:29:26,430 establecidos que es esta de Lost Type 362 00:29:26,430 --> 00:29:28,069 que también tiene muchas 363 00:29:28,069 --> 00:29:30,170 tipografías y 364 00:29:30,170 --> 00:29:32,190 en algunos casos son gratuitas 365 00:29:32,190 --> 00:29:54,250 Aquí, a ver, ¿cómo era para ver si vamos a fuentes? Pues, por ejemplo, esta, no todas son gratuitas, pero, por ejemplo, esta de Tofino, que además veis que tiene muchos gruesos. Pues, aquí, si pone que es un paga lo que quieras, pues, aunque no sea lo más adecuado probablemente, si ponéis cero la podéis descartar. 366 00:29:54,250 --> 00:30:16,470 El compañero dice, los assets de Unity, hay algunas bonitas también en Asset Store. Pues también puede haber, aunque yo, ¿verdad? Que no suelo buscarlas aquí. También hay a veces fuentes que se pueden usar. Vale, entonces, bueno, pues la que veáis más adecuada. 367 00:30:16,470 --> 00:30:23,170 Esta de Runtime, a ver, yo creo que es que viene con el sistema al menos en Windows 368 00:30:23,170 --> 00:30:31,140 Sí, es que de hecho es la que viene por defecto con Unity, si no me equivoco 369 00:30:31,140 --> 00:30:34,940 Entonces, bueno, fíjate que es la que estoy usando yo en el ejemplo 370 00:30:34,940 --> 00:30:38,059 No me preocupa de poner otra más compleja 371 00:30:38,059 --> 00:30:44,539 A ver, un segundín, que voy a ver si hay algo más que explicar aquí de lo que yo hice por código 372 00:30:44,539 --> 00:31:02,900 Bueno, luego hablaremos de esto, que es que si carga la primera escena, yo he hecho que las vidas se recarguen con tres. Y uso este GameManager, ahora vemos, pero que básicamente es el script, lo tengo aquí, otro script que se llama GameManager, que la gracia que tiene es que todo lo que tiene dentro son variables estáticas. 373 00:31:02,900 --> 00:31:26,660 Y con variables estáticas, en cómo estamos funcionando en esta ocasión, es, y aquí soluciona parte de la duda que me están diciendo de cómo cargar un test input que se pone en un menú para que salga en el hat del otro, que es que habrá que guardarlo en una variable estática pública, siempre, de tipo string, que es username. 374 00:31:26,660 --> 00:31:41,960 Y en esta variable estática, que va almacenando independientemente de la escena, digamos que está por un nivel superior al resto de scripts, a nivel de que siempre está accesible, aquí es donde guardaremos este nombre. 375 00:31:41,960 --> 00:31:44,500 De hecho ahora hablo del Game Manager 376 00:31:44,500 --> 00:31:46,460 Si me decís que no tenéis 377 00:31:46,460 --> 00:31:48,720 Dudas de este primero 378 00:31:48,720 --> 00:31:50,900 Antes incluso que pasara el de configuración 379 00:31:50,900 --> 00:31:51,859 Hacemos una 380 00:31:51,859 --> 00:31:53,880 Una visita a esto 381 00:31:53,880 --> 00:31:56,940 Esto, de este nivel alguna duda 382 00:31:56,940 --> 00:31:59,019 Paso a la siguiente 383 00:31:59,019 --> 00:32:04,890 Vale, dudas 384 00:32:04,890 --> 00:32:05,529 Me dicen 385 00:32:05,529 --> 00:32:09,150 Podéis hablar por micrófono si es más rápido 386 00:32:09,150 --> 00:32:10,690 Pero bueno, o si me lo escribís 387 00:32:10,690 --> 00:32:13,069 O si no voy avanzando y luego vuelvo allá 388 00:32:13,069 --> 00:32:15,329 Digo porque es que si no a lo mejor tardáis 389 00:32:15,329 --> 00:32:16,609 Sí, hola 390 00:32:16,609 --> 00:32:19,049 A ver, es una tontería 391 00:32:19,049 --> 00:32:21,789 por ejemplo, con el ratón pasas por jugar 392 00:32:21,789 --> 00:32:23,009 configuración, salir 393 00:32:23,009 --> 00:32:25,809 ¿lo podemos también hacer con 394 00:32:25,809 --> 00:32:26,809 teclado, ratón y mando? 395 00:32:28,650 --> 00:32:30,289 ¿Te refieres a la navegación? 396 00:32:31,029 --> 00:32:31,230 Sí 397 00:32:31,230 --> 00:32:32,529 Sí, eso es lo que 398 00:32:32,529 --> 00:32:34,430 por lo que existe este Event System 399 00:32:34,430 --> 00:32:35,890 y está este 400 00:32:35,890 --> 00:32:39,089 el primero que está seleccionado 401 00:32:39,089 --> 00:32:40,690 que yo he puesto el botón 402 00:32:40,690 --> 00:32:43,170 play, ¿vale? para que aparezca y por eso 403 00:32:43,170 --> 00:32:45,130 de hecho cuando yo doy a reproducir 404 00:32:45,130 --> 00:32:46,609 vas a ver, yo no toco nada 405 00:32:46,609 --> 00:32:48,970 bueno, está esto de maximizado, ves que jugar 406 00:32:48,970 --> 00:32:51,089 está seleccionado, y yo ahora 407 00:32:51,089 --> 00:32:53,349 voy a mover las flechas del ratón 408 00:32:53,349 --> 00:32:55,170 de, uy, del ratón, las flechas 409 00:32:55,170 --> 00:32:57,150 del teclado, no estoy tocando el ratón, puedo ir 410 00:32:57,150 --> 00:32:59,089 hacia arriba, hacia abajo, y luego 411 00:32:59,089 --> 00:33:00,849 le doy a intro, y juego 412 00:33:00,849 --> 00:33:03,029 no he tocado el ratón para nada, eso 413 00:33:03,029 --> 00:33:05,069 se, y voy a quitar esto de 414 00:33:05,069 --> 00:33:07,130 maximizar para que se vea todo 415 00:33:07,130 --> 00:33:11,150 claro, tú con el event system dices 416 00:33:11,150 --> 00:33:13,309 primero, cuál de los elementos 417 00:33:13,309 --> 00:33:14,809 es el que aparece seleccionado 418 00:33:14,809 --> 00:33:30,190 He arrastrado este button play, lo he arrastrado y lo he dejado ahí. Y aquí están los ejes, que son los axis, se llaman igual que los axis, que ya conocemos, pero vamos a conocerlos otra vez, de los project settings y el input manager. 419 00:33:30,190 --> 00:33:44,730 Pues con las teclas que tengamos aquí de horizontal hará movimiento horizontal, vertical, submit, que es el de acceder y el de cancelar, que es para si hay alguna acción que se deshabilita una vez ya está hecha. 420 00:33:45,190 --> 00:33:56,490 Se hace con las teclas que pongamos aquí. Por ejemplo, el vertical, que es el de las flechas arriba y abajo, también debería, y lo voy a hacer ahora mismo, con la S y la W navegar. 421 00:33:56,490 --> 00:34:12,949 ¿Ves? Con S y W navego. Esto se da, creo que lo pone también en el tema, cuando tenéis botones, ¿vale? Y tienen que ser elementos que se puedan seleccionar. Y básicamente serán los elementos que dentro de sus opciones tengan esto de Interactable. 422 00:34:12,949 --> 00:34:33,190 Unos solo botones, si no me equivoco, luego lo vemos, en los input fields también habrá algo relacionado con el interactable, los sliders también, ¿vale? Pero esto se define en esta navegación, está la automática, que lo que hace es ver dónde hay distintos elementos interactuables en la escena, ¿vale? 423 00:34:33,190 --> 00:34:50,590 Y hace una navegación, digamos, automática que cuando damos a este botón de visualizar, ¿vale? Y nuevamente hay que ir a la escena, no al juego, ¿vale? Veis que salen esas flechitas que pone arriba y abajo porque ha detectado que para pasar de este a este, pues lo lógico es una dirección vertical. 424 00:34:50,590 --> 00:34:53,590 si yo por ejemplo moviera esta flecha 425 00:34:53,590 --> 00:34:54,969 veis que ya empieza a complicarse 426 00:34:54,969 --> 00:34:57,389 si estando en jugar doy a la 427 00:34:57,389 --> 00:34:59,190 y ves que sale de la derecha 428 00:34:59,190 --> 00:35:00,570 voy aquí a config 429 00:35:00,570 --> 00:35:03,550 y ahora el primero que va a salir 430 00:35:03,550 --> 00:35:04,510 seleccionado es jugar 431 00:35:04,510 --> 00:35:07,429 es decir, si doy ahora abajo 432 00:35:07,429 --> 00:35:10,090 espero que veáis la flecha 433 00:35:10,090 --> 00:35:11,630 porque igual lo veis muy pequeñillo 434 00:35:11,630 --> 00:35:12,989 me acerco aquí 435 00:35:12,989 --> 00:35:14,130 cuando yo de 436 00:35:14,130 --> 00:35:17,849 cuando yo de abajo va a ir a salir 437 00:35:17,849 --> 00:35:18,869 ahora, ¿vale? 438 00:35:19,030 --> 00:35:20,429 y cuando de arriba va a config 439 00:35:20,429 --> 00:35:37,869 Y cuando doy arriba o a la izquierda va a jugar. Esto se debe a que se está gestionando con esta navegación y con visualizar vemos, si activo o desactivo, esto es solo una ayuda visual de cuál es, por qué lado es la tecla de navegación para ir a otro de los elementos. 440 00:35:37,869 --> 00:35:50,530 Eso lo hacen automático, como dice, de manera automática. Si lo pones en explicit, hay una forma de... a ver, espera, dejo el visualizar, quito todo y digo explícito. 441 00:35:51,449 --> 00:36:03,130 Entonces aquí lo que habrá que ir poniendo, aunque esta opción no la recomiendo, es que podemos ir arrastrando aquí, al darle abajo en este botón de play, quiero que vaya al botón de config. 442 00:36:03,130 --> 00:36:17,730 Y cuando dé a la izquierda en este botón de play, porque cada uno tiene su propia navegación que habría que ir configurando, vas diciendo de manera explícita hacia dónde hay que dar, cuál es la dirección. 443 00:36:17,730 --> 00:36:21,769 pero bueno, lo suyo es poner que sea automático 444 00:36:21,769 --> 00:36:24,809 y si ponéis horizontal y vertical 445 00:36:24,809 --> 00:36:26,590 con esto podéis restringir que a lo mejor 446 00:36:26,590 --> 00:36:31,429 todas las interacciones tengan que ser de manera horizontal 447 00:36:31,429 --> 00:36:33,590 y no se admitan las verticales 448 00:36:33,590 --> 00:36:36,309 pero bueno, esto habría que irlo haciendo en todos los botones 449 00:36:36,309 --> 00:36:38,730 cada botón tendría sus combinaciones 450 00:36:38,730 --> 00:36:40,929 lo más fácil, el automático y detecta 451 00:36:40,929 --> 00:36:42,449 incluso quitar el explícito 452 00:36:42,449 --> 00:36:45,550 y aquí detecta según visualmente 453 00:36:45,550 --> 00:36:47,349 cómo se distribuyen los elementos de la escena 454 00:36:47,349 --> 00:36:57,130 pues veis que va poniendo unos axis, unos botones que son de izquierda a derecha, arriba, abajo, los que van haciendo la navegación, ¿vale? 455 00:36:57,789 --> 00:36:59,190 Entiendo que te he contestado la duda. 456 00:37:00,670 --> 00:37:01,809 Sí, gracias. 457 00:37:03,349 --> 00:37:07,269 Vale, pues vamos, voy a explicar qué es el Game Manager. 458 00:37:07,789 --> 00:37:14,750 Hay una cosa que pone en el tema, que es verdad que en esta versión de Unity vi que no sucede y lo han ido quitando, debe ser, en las últimas, 459 00:37:14,750 --> 00:37:17,130 que es que cuando creas un script llamado 460 00:37:17,130 --> 00:37:18,949 GameManager, antes aparecía una tuerquita 461 00:37:18,949 --> 00:37:21,150 y ya no, bueno, era solo una 462 00:37:21,150 --> 00:37:23,269 ayuda visual para tener claro 463 00:37:23,269 --> 00:37:24,449 cuál era el GameManager 464 00:37:24,449 --> 00:37:27,230 y esa de la tuerquita, bueno, venía bien 465 00:37:27,230 --> 00:37:28,829 porque era más visual 466 00:37:28,829 --> 00:37:31,230 significa que cuando a un script 467 00:37:31,230 --> 00:37:33,070 lo llamamos GameManager, pues algo 468 00:37:33,070 --> 00:37:35,389 tiene de especial para que le pongan otro 469 00:37:35,389 --> 00:37:36,889 icono 470 00:37:36,889 --> 00:37:38,849 propio 471 00:37:38,849 --> 00:37:40,550 y esto es porque 472 00:37:40,550 --> 00:37:42,769 básicamente por convención también 473 00:37:42,769 --> 00:37:47,070 suele haber un script en el juego que se llama GameManager 474 00:37:47,070 --> 00:37:49,750 en el que se van estableciendo 475 00:37:49,750 --> 00:37:52,750 puede haber más de uno realmente con otros nombres 476 00:37:52,750 --> 00:37:56,590 pero bueno, que GameManager es un script 477 00:37:56,590 --> 00:37:59,030 en el que digamos todas las mecánicas 478 00:37:59,030 --> 00:38:00,869 bueno, la palabra no es mecánicas 479 00:38:00,869 --> 00:38:04,909 todas las variables 480 00:38:04,909 --> 00:38:08,449 o los elementos de programación que vayan a ser recurrentes 481 00:38:08,449 --> 00:38:10,690 en todo el juego, como sucede aquí, pues que sea 482 00:38:10,690 --> 00:38:12,670 entre diferentes niveles y no sea solo 483 00:38:12,670 --> 00:38:14,809 de un nivel, pues es este gestor de juego 484 00:38:14,809 --> 00:38:16,550 y es donde vamos almacenando 485 00:38:16,550 --> 00:38:18,909 información para desde este script 486 00:38:18,909 --> 00:38:20,809 irla gestionando entre distintos niveles 487 00:38:20,809 --> 00:38:22,650 como he dicho antes, para que esté 488 00:38:22,650 --> 00:38:24,650 en un nivel superior al resto 489 00:38:24,650 --> 00:38:25,929 de scripts que operan 490 00:38:25,929 --> 00:38:28,389 en el componente que 491 00:38:28,389 --> 00:38:30,750 los asignes 492 00:38:30,750 --> 00:38:32,590 y que esté siempre 493 00:38:32,590 --> 00:38:34,150 accesible o pueda hacer operaciones 494 00:38:34,150 --> 00:38:36,010 de más alcance 495 00:38:36,010 --> 00:38:38,230 en este caso 496 00:38:38,230 --> 00:38:40,230 y es un ejemplo 497 00:38:40,230 --> 00:38:43,869 importante a tener en cuenta 498 00:38:43,869 --> 00:38:45,849 de para qué serviría 499 00:38:45,849 --> 00:38:47,869 esta lógica, que es este 500 00:38:47,869 --> 00:38:49,869 el de crear funciones estáticas 501 00:38:49,869 --> 00:38:52,190 perdón, variables estáticas 502 00:38:52,190 --> 00:38:54,070 cuando creamos una variable 503 00:38:54,070 --> 00:38:55,889 estática, y lo mismo 504 00:38:55,889 --> 00:38:57,789 por defecto 505 00:38:57,789 --> 00:38:59,929 una estática para poder acceder 506 00:38:59,929 --> 00:39:02,030 desde otros scripts y poder modificarlo 507 00:39:02,030 --> 00:39:03,710 y acceder a estas variables 508 00:39:03,710 --> 00:39:05,590 pues habría que hacerla pública 509 00:39:05,590 --> 00:39:07,809 luego al declarar la variable 510 00:39:07,809 --> 00:39:09,969 pues ponemos el tipo de variable 511 00:39:09,969 --> 00:39:11,929 que es, un int, un string, un flow 512 00:39:11,929 --> 00:39:13,630 lo que sea, podría ser lo que sea 513 00:39:13,630 --> 00:39:15,530 y luego el nombre que tiene esta 514 00:39:15,530 --> 00:39:18,070 variable, hasta aquí como siempre 515 00:39:18,070 --> 00:39:19,610 lo único que ha cambiado es que 516 00:39:19,610 --> 00:39:21,309 siendo pública, aparte 517 00:39:21,309 --> 00:39:23,750 digamos que permanece, por eso de estática 518 00:39:23,750 --> 00:39:25,650 permanece incluso cuando se 519 00:39:25,650 --> 00:39:28,110 para un nivel 520 00:39:28,110 --> 00:39:29,989 ¿vale? y se recarga 521 00:39:29,989 --> 00:39:31,809 en otro nivel otros scripts 522 00:39:31,809 --> 00:39:33,909 esto, como 523 00:39:33,909 --> 00:39:36,150 tenemos una clase 524 00:39:36,150 --> 00:39:37,789 llamada GameManager, que es pública 525 00:39:37,789 --> 00:39:39,590 y una variable que es pública 526 00:39:39,590 --> 00:39:42,690 esto como ya vimos en su momento 527 00:39:42,690 --> 00:39:44,869 en otros scripts, siempre ya 528 00:39:44,869 --> 00:39:47,250 desde cualquier otro punto de los scripts 529 00:39:47,250 --> 00:39:48,530 abro este por ejemplo 530 00:39:48,530 --> 00:39:49,449 a ver si quiere que 531 00:39:49,449 --> 00:39:52,449 a ver, espera, voy a ir agrupando 532 00:39:52,449 --> 00:39:54,570 porque si no tengo aquí un montón de ventanas 533 00:39:54,570 --> 00:39:55,849 y no es lo que quiero 534 00:39:55,849 --> 00:39:58,510 en este por ejemplo, bueno, veis 535 00:39:58,510 --> 00:40:00,769 que aquí lo que estoy haciendo 536 00:40:00,769 --> 00:40:02,530 tengo un 537 00:40:02,530 --> 00:40:04,710 un static que se llama lives 538 00:40:04,710 --> 00:40:06,349 y yo aquí 539 00:40:06,349 --> 00:40:08,210 sin haber creado ningún tipo de variable 540 00:40:08,210 --> 00:40:10,389 antes, puedo hacer directamente 541 00:40:10,389 --> 00:40:12,429 a la variable lives, simplemente poniendo 542 00:40:12,429 --> 00:40:14,010 ¿vale? fijaos que tengo otra 543 00:40:14,010 --> 00:40:15,650 así rápidamente que se llama username 544 00:40:15,650 --> 00:40:18,269 que ahí es donde vamos a almacenar el nombre del jugador 545 00:40:18,269 --> 00:40:20,210 por cierto, ¿vale? pues si yo aquí 546 00:40:20,210 --> 00:40:21,650 quisiera que 547 00:40:21,650 --> 00:40:23,989 ¿vale? el nombre del jugador 548 00:40:23,989 --> 00:40:25,769 cuando cargara la escena 1 549 00:40:25,769 --> 00:40:27,989 ¿vale? fuera Pepito 550 00:40:27,989 --> 00:40:29,710 ¿vale? independientemente de 551 00:40:29,710 --> 00:40:31,469 de lo que haya 552 00:40:31,469 --> 00:40:34,210 puesto en un input field o como lo hayamos 553 00:40:34,210 --> 00:40:35,429 asignado, yo puedo aquí decir 554 00:40:35,429 --> 00:40:37,269 ¿vale? pues que el username sea 555 00:40:37,269 --> 00:40:39,750 Pepito, ¿vale? Como es un string 556 00:40:39,750 --> 00:40:42,070 Pues habrá que ponerlo como un string 557 00:40:42,070 --> 00:40:43,909 ¿Vale? Es verdad que hay que acordarse 558 00:40:43,909 --> 00:40:45,610 De qué tipo de variable es 559 00:40:45,610 --> 00:40:47,849 O bueno, ponerte encima y veis que dice 560 00:40:47,849 --> 00:40:50,190 StaticString, ¿vale? Pero veis que no da error 561 00:40:50,190 --> 00:40:51,289 Yo puedo acceder a 562 00:40:51,289 --> 00:40:53,170 Variable estática, a la clase 563 00:40:53,170 --> 00:40:54,949 Y a una variable estática 564 00:40:54,949 --> 00:40:57,289 Sin tener que capturarla de ningún lado 565 00:40:57,289 --> 00:40:59,570 ¿Vale? Tengo aquí la dificultad, las vidas 566 00:40:59,570 --> 00:41:01,530 ¿Cuál más había puesto? 567 00:41:01,590 --> 00:41:03,570 Ah, bueno, y el username que ya lo he puesto 568 00:41:03,570 --> 00:41:05,130 Pero aquí está, username 569 00:41:05,130 --> 00:41:30,989 Ahí está, ¿vale? GameManagerUserName. Y eso es lo bueno que podemos hacer desde cualquier momento. Voy a guardar esto y ahora cuando cargue el nivel, al darle a jugar, vais a ver que pone ya Pepito, porque yo tenía ya establecido que pusiera lo que esté guardado en esa variable GameManager.UserName, que es un string que lo muestra aquí. 570 00:41:30,989 --> 00:41:32,510 entonces 571 00:41:32,510 --> 00:41:36,349 básicamente hay que tener la lógica 572 00:41:36,349 --> 00:41:37,389 en este momento, ¿vale? 573 00:41:37,789 --> 00:41:40,250 de que va a haber un script en el que vamos a 574 00:41:40,250 --> 00:41:41,269 poder ir guardando 575 00:41:41,269 --> 00:41:44,190 desde distintos scripts o momentos del juego 576 00:41:44,190 --> 00:41:46,489 variables para que estén ahí almacenadas 577 00:41:46,489 --> 00:41:48,449 y poder recuperarlas 578 00:41:48,449 --> 00:41:50,170 ¿vale? entiendo que esto además 579 00:41:50,170 --> 00:41:52,469 es una liberación, también hay que ser cauteloso 580 00:41:52,469 --> 00:41:54,289 con qué se usa y qué nombre se ponen 581 00:41:54,289 --> 00:41:56,230 para que no haya conflictos con 582 00:41:56,230 --> 00:41:58,030 variables que hay en los propios scripts 583 00:41:58,030 --> 00:42:00,190 pero en los otros scripts ya 584 00:42:00,190 --> 00:42:14,530 Porque por ejemplo lives es a lo mejor una variable muy fácil de crear en otro script y la sobre escribes y ya empiezan los problemas. Pero bueno, veis que es una forma rápida y sencilla de acceder a variables. 585 00:42:14,530 --> 00:42:38,650 Entonces, voy a ir al menú de configuración. No guardo porque no quiero los cambios. Aquí en este canvas, voy a ver si me habéis escrito algo. En este canvas he generado, aparte de la imagen de fondo de 1920x1080, que cuadra con el fondo, encima de eso he puesto otros tres elementos. 586 00:42:38,650 --> 00:42:57,630 Uno de ellos es el slider, otro de ellos es el input y otro es un botón, que este no tiene más complejidad que los anteriores, un botón que lo que hace es, con ese load scene, cargar la escena cero, que es la de el menú inicial. Así que el botón, pasamos de él porque ya está más o menos establecido. 587 00:42:57,630 --> 00:43:02,210 Vamos con el input primero, que me parece un poquito más fácil 588 00:43:02,210 --> 00:43:04,869 El input, al final cuando creamos un input 589 00:43:04,869 --> 00:43:06,710 Y atención, esto es lo que pone 590 00:43:06,710 --> 00:43:10,710 Se pueden crear inputs con el texto antiguo, el legacy 591 00:43:10,710 --> 00:43:13,769 Que se llamará luego por código de una forma 592 00:43:13,769 --> 00:43:15,469 Que es el que de hecho he usado yo 593 00:43:15,469 --> 00:43:19,010 Si voy a un script que luego vamos a ver 594 00:43:19,010 --> 00:43:22,630 Pues tengo una variable de tipo texto 595 00:43:22,630 --> 00:43:25,789 Que no es lo mismo que lo que pone 596 00:43:25,789 --> 00:43:27,630 que si aquí cargamos el TextMeshPro 597 00:43:27,630 --> 00:43:29,949 esta librería, va a haber otra 598 00:43:29,949 --> 00:43:31,769 que en realidad el funcionamiento 599 00:43:31,769 --> 00:43:33,170 es igual, solo que tiene más opciones 600 00:43:33,170 --> 00:43:35,769 podemos hacer el TextMeshPro 601 00:43:35,769 --> 00:43:38,269 Ugi 602 00:43:38,269 --> 00:43:39,809 y voy a poner 603 00:43:39,809 --> 00:43:40,690 texto 604 00:43:40,690 --> 00:43:43,349 TMPro, vale 605 00:43:43,349 --> 00:43:45,530 la única diferencia que hay entre estos dos 606 00:43:45,530 --> 00:43:47,510 es que cada uno 607 00:43:47,510 --> 00:43:49,710 hace referencia a un tipo de componente 608 00:43:49,710 --> 00:43:51,670 cuando yo tengo un text 609 00:43:51,670 --> 00:43:54,030 Legacy, aquí pone text 610 00:43:54,030 --> 00:43:54,909 ya está 611 00:43:54,909 --> 00:44:17,969 Si yo tengo un TestMeshPro, voy a crear uno aquí rápido, un elemento que tenga TestMeshPro, el componente, simplemente el texto. Se va a llamar TestMeshPro. Cada uno tiene el TestMeshPro y por eso existe, tiene más opciones que el text, pero a nivel de código la variable que hay que usar para un TestMeshPro es esta. 612 00:44:17,969 --> 00:44:33,769 Si usamos el TestLegacy es esta. Aparte de eso, luego casi todas las propiedades son iguales, aparte de que TestMeshPro tiene más, pero las básicas son iguales. Esto lo pone en el tema, pero por si hubiera alguna duda, dicho queda. 613 00:44:33,769 --> 00:44:59,429 Entonces, cuando hacemos un input, dentro tiene el espacio, digamos, que destinado... Vale, bueno, perdonad, esto es otro texto que he incluido dentro de este para que cuando arrastremos el input se mueva con él, ¿vale? 614 00:44:59,429 --> 00:45:14,929 Pero básicamente, veis que va aquí esto de nombre usuario, es otro texto, que veáis que se pueden incluir más elementos dentro del otro, que es un texto simplemente para poner un encabezado de que es el nombre del usuario, que no es el input en sí. 615 00:45:14,929 --> 00:45:27,309 Y luego está el input, porque me estaba haciendo un lío con la jerarquía, el input que dentro, en su interior, tiene esa caja del color que indiquemos aquí, que es una imagen, la podemos poner roja, blanca, etc. 616 00:45:28,190 --> 00:45:35,710 Y es también donde se gestionan los cambios de valor que hagamos luego en los dos textos que tenemos dentro. 617 00:45:35,710 --> 00:45:45,670 Es decir, tiene una imagen que también tiene estados de variación de su color, como pone aquí, para las transiciones, para marcar que estamos dentro, etc. 618 00:45:45,670 --> 00:45:57,510 Y que salimos, etc. Véis que se oscurece, etc. Que eso está definido en estos colores que tiene aquí o se puede poner incluso alguna animación. 619 00:45:57,510 --> 00:46:14,949 Lo que pone también en el tema, pero básicamente están ahí las interacciones. Con esto se define la caja y luego dentro hay dos tipos de texto. El placeholder, que es en grisáceo donde pone el mensaje de, oye, ¿qué instrucción quiero poner aquí? Pues en vez de escribir tu nick, pon tu nombre. 620 00:46:14,949 --> 00:46:34,210 Y este texto en realidad, aunque se puede capturar por código, lo que está esperando es como una ayuda visual para que, temporal además, que de hecho eso es lo que quiere decir placeholder, está indicando que ahí lo que habría que poner es el nombre. 621 00:46:34,210 --> 00:46:50,050 Donde de verdad se escribe el nombre es en este texto. Cuando lo escribimos al pulsar, vais a ver que yo cuando escribo aquí, empieza a escribir y básicamente se está volcando lo que yo escriba en este campo que hay aquí, en este parámetro. 622 00:46:50,050 --> 00:47:13,309 Lo estamos haciendo en vivo y se está volcando ahí, ¿vale? Esto, lo que hay que pensar es que en algún momento nosotros podemos llegar a leer este campo de texto y su contenido para guardarlo como, en este caso, en la variable pública que se llama username, ¿vale? 623 00:47:13,309 --> 00:47:16,030 que luego ya cuando tengamos el hat 624 00:47:16,030 --> 00:47:17,989 pues también lo que va a hacer es 625 00:47:17,989 --> 00:47:19,949 poner el username text 626 00:47:19,949 --> 00:47:21,949 pues el texto que hayamos guardado ahí 627 00:47:21,949 --> 00:47:23,570 ¿sí? 628 00:47:23,889 --> 00:47:26,030 entonces, a ver, me pongo aquí 629 00:47:26,030 --> 00:47:27,949 vuestra pantallita por si me ponéis algo, vale 630 00:47:27,949 --> 00:47:30,010 sigo, y esto no sé 631 00:47:30,010 --> 00:47:30,949 por qué 632 00:47:30,949 --> 00:47:34,070 sí, me pregunta alguien 633 00:47:34,070 --> 00:47:34,789 adelante 634 00:47:34,789 --> 00:47:36,409 hola 635 00:47:36,409 --> 00:47:40,250 justamente la parte 636 00:47:40,250 --> 00:47:41,730 del if y el else 637 00:47:41,730 --> 00:47:42,949 del username 638 00:47:42,949 --> 00:47:45,269 podríamos poner que si 639 00:47:45,269 --> 00:47:47,130 no pones ningún nombre 640 00:47:47,130 --> 00:47:49,670 te ponga como un name 641 00:47:49,670 --> 00:47:50,469 o no name 642 00:47:50,469 --> 00:47:52,949 de forma genérica 643 00:47:52,949 --> 00:47:53,710 me va a hablar de esto, ¿no? 644 00:47:54,190 --> 00:47:57,050 aquí ya está eso, dice 645 00:47:57,050 --> 00:47:59,010 si la variable estática 646 00:47:59,010 --> 00:48:01,670 está vacía, es decir, nunca se ha introducido nada 647 00:48:01,670 --> 00:48:03,510 porque por defecto 648 00:48:03,510 --> 00:48:05,250 cuando arrancamos el juego está así 649 00:48:05,250 --> 00:48:07,650 y por tanto está vacía, hasta que guardemos 650 00:48:07,650 --> 00:48:09,610 algo, si está vacía pone 651 00:48:09,610 --> 00:48:11,489 player desconocido 652 00:48:11,489 --> 00:48:13,849 este es el texto que pone si no ponemos nada 653 00:48:13,849 --> 00:48:14,650 ah, vale 654 00:48:14,650 --> 00:48:17,849 no está vacía, es decir, se ha introducido ya algo 655 00:48:17,849 --> 00:48:19,409 el username va a ser 656 00:48:19,409 --> 00:48:21,550 player, como siempre va a poner 657 00:48:21,550 --> 00:48:23,510 esa coletilla de player, más 658 00:48:23,510 --> 00:48:25,250 y después, dejamos un espacio 659 00:48:25,250 --> 00:48:27,690 el nombre que se ha guardado en esa 660 00:48:27,690 --> 00:48:29,190 variable estática 661 00:48:29,190 --> 00:48:31,570 del nombre, que esa variable 662 00:48:31,570 --> 00:48:33,469 estática solo se rellenará cuando escribamos 663 00:48:33,469 --> 00:48:35,469 algo aquí, y se va a rellenar 664 00:48:35,469 --> 00:48:37,010 además, porque 665 00:48:37,010 --> 00:48:39,409 lo hemos puesto aquí, ¿vale? 666 00:48:39,630 --> 00:48:40,969 es decir, cuando 667 00:48:40,969 --> 00:48:43,449 a ver, esto ya empieza a ser un poco jaleo 668 00:48:43,449 --> 00:48:45,289 de ir viendo en qué parte pongo 669 00:48:45,289 --> 00:48:47,210 cosas, no sé 670 00:48:47,210 --> 00:48:49,429 y es de lo que se trata, simplemente 671 00:48:49,429 --> 00:48:51,409 que sepáis que aparte de lo que es el funcionamiento 672 00:48:51,409 --> 00:48:53,389 del juego si estáis empleando, veis que 673 00:48:53,389 --> 00:48:55,309 yo aquí en scripts, tengo los 674 00:48:55,309 --> 00:48:57,309 scripts del juego de la tarea 3 675 00:48:57,309 --> 00:48:59,349 que podéis usar la tarea 3 676 00:48:59,349 --> 00:49:01,429 o lo que queráis, que tenga una cierta lógica 677 00:49:01,429 --> 00:49:03,210 de que al dar a play 678 00:49:03,210 --> 00:49:05,230 haya vidas y cuando muera vuelvas 679 00:49:05,230 --> 00:49:06,710 a la pantalla de inicio 680 00:49:06,710 --> 00:49:09,050 que me da igual que sea una bola 681 00:49:09,050 --> 00:49:13,570 o sea otra mecánica, por si no hicisteis la tarea 3. 682 00:49:14,349 --> 00:49:17,050 Pero realmente de User Interface solo hay cuatro scripts. 683 00:49:18,170 --> 00:49:21,030 Y uno de ellos es el de cargar escena, que ya hemos visto, 684 00:49:21,469 --> 00:49:24,590 que es simplemente preparar para los botones ese script. 685 00:49:25,630 --> 00:49:27,789 El de Game Manager, como hemos visto, 686 00:49:27,789 --> 00:49:34,730 es solo tener preparadas en un punto superior variables 687 00:49:34,730 --> 00:49:36,670 que nosotros podamos rellenar con cosas. 688 00:49:36,670 --> 00:49:53,510 Y luego tenemos este, que es el que tiene chicha y ahora lo vamos viendo, el que vamos a asociar este config menu al canvas para ir gestionando todo lo que tenemos aquí, todos estos inputs. 689 00:49:53,510 --> 00:49:55,550 Aquí he preparado, como sería el Icefield 690 00:49:55,550 --> 00:49:57,610 Varios elementos 691 00:49:57,610 --> 00:49:59,690 ¿Vale? Y luego hay otro que es el 692 00:49:59,690 --> 00:50:01,550 Hat Manager, que es el del hat 693 00:50:01,550 --> 00:50:03,570 Cuando jugamos, que tiene los corazoncillos 694 00:50:03,570 --> 00:50:05,809 ¿Vale? Vuelvo a... para que lo veáis 695 00:50:05,809 --> 00:50:07,230 Este hat, y bueno 696 00:50:07,230 --> 00:50:09,409 Antes lo que me habéis preguntado 697 00:50:09,409 --> 00:50:11,989 Si no has puesto ningún nombre, pone por defecto 698 00:50:11,989 --> 00:50:12,889 Player desconocido 699 00:50:12,889 --> 00:50:15,650 Cuando pongamos algún nombre, este desconocido 700 00:50:15,650 --> 00:50:17,590 Se ve reemplazado por lo que 701 00:50:17,590 --> 00:50:18,690 Está guardado en el Game Manager 702 00:50:18,690 --> 00:50:21,989 ¿Vale? Y este hat tiene ese comportamiento 703 00:50:21,989 --> 00:50:24,230 aparte de otra imagen 704 00:50:24,230 --> 00:50:26,130 ¿vale? aquí si vamos al canvas 705 00:50:26,130 --> 00:50:28,130 este canvas pues tiene 706 00:50:28,130 --> 00:50:30,130 esta imagen ¿vale? 707 00:50:30,250 --> 00:50:32,329 pues que irá cargando según las vidas que nos queden 708 00:50:32,329 --> 00:50:34,329 irá cargando una imagen 709 00:50:34,329 --> 00:50:36,150 u otra ¿vale? en este caso 710 00:50:36,150 --> 00:50:38,550 lo que se proporciona son varias imágenes 711 00:50:38,550 --> 00:50:40,469 y cuando morimos vais a ver 712 00:50:40,469 --> 00:50:41,829 que de pronto se cargará 713 00:50:41,829 --> 00:50:44,610 vuelvo a abrir aquí, lo que se va a cargar es 714 00:50:44,610 --> 00:50:46,789 la imagen que se llama 715 00:50:46,789 --> 00:50:47,909 eh 716 00:50:47,909 --> 00:50:50,929 Live 2 717 00:50:50,929 --> 00:50:53,030 que está ya hecha para que muestre esto 718 00:50:53,030 --> 00:50:55,190 en el tutorial de Álvaro 719 00:50:55,190 --> 00:50:57,289 de hecho lo que hace es como ir recortando la imagen 720 00:50:57,289 --> 00:50:59,050 cambia las dimensiones de una única imagen 721 00:50:59,050 --> 00:51:00,650 para que se vayan viendo un corazón u otro 722 00:51:00,650 --> 00:51:03,309 se pueden cargar imágenes distintas, recortar 723 00:51:03,309 --> 00:51:04,409 bueno, pues ya eso es 724 00:51:04,409 --> 00:51:07,130 pensar cómo se hace y cómo se muestra 725 00:51:07,130 --> 00:51:09,550 pero son cuatro scripts 726 00:51:09,550 --> 00:51:11,150 por eso digo que quiero que quede claro 727 00:51:11,150 --> 00:51:12,969 al menos como lo he resuelto yo 728 00:51:12,969 --> 00:51:15,710 siempre puede haber otras formas y con más 729 00:51:15,710 --> 00:51:17,309 elementos 730 00:51:17,309 --> 00:51:27,710 Pero son estos cuatro scripts y me voy a centrar en esos para que veáis un comportamiento de cómo se puede conseguir esto. 731 00:51:28,469 --> 00:51:43,710 Vale, sigo con el input. Estamos aquí. Tiene un placeholder que de este por defecto solo vamos a indicar ese mensaje de ayuda de pon algo aquí y el de texto que es el que sí queremos recoger el texto. 732 00:51:43,710 --> 00:51:59,230 ¿Vale? Recordad, ¿vale? Y me voy a este config menu. Joder, espera, porque esto siempre se me abre. Espera un segundo, que yo creo que lo puedo asociar aquí. Un segundo. Nada. Bueno, lo tengo aquí. ¿Vale? 733 00:51:59,230 --> 00:52:18,269 Lo que se han preparado, esos serialized fields que os he enseñado antes, y mira, lo pongo aquí abierto para que lo veamos en paralelo, aquí en el canvas, ¿vale? Estos campos que tenemos aquí se corresponden con los que se han creado en este config menu, ¿no? Es el mismo menú, ¿vale? 734 00:52:18,269 --> 00:52:39,250 Entonces, hay que pensar. Yo, dentro de lo que se pide la tarea y lo que nos interesa, lo que voy a querer es coger un texto o gestionar un texto, ¿vale? Una variable de tipo texto. Recordad que esto, las tipos de variables que se llaman con un nombre de clase, como slider, texto, etc., básicamente es el nombre que tiene el componente. 735 00:52:39,250 --> 00:52:56,789 Se llama texto y por eso el de TestMeshPro se llama de otra forma, porque es que tiene un componente aquí que se llama texto. Entonces siempre que carguemos o hagamos un GetComponent de un componente, se va a llamar como se llama aquí. Casi siempre, no siempre, pero casi siempre. 736 00:52:56,789 --> 00:53:07,750 Luego va a haber otro de tipo slider porque voy a querer jugar con este, esta variable que se llama slider 737 00:53:07,750 --> 00:53:11,190 Que al final es la que tiene los valores de cuánto vale el slider, si os fijáis 738 00:53:11,190 --> 00:53:19,050 Yo cuando muevo esto con value puedo ir gestionando desde el propio juego 739 00:53:19,050 --> 00:53:25,389 Voy al moverlo, al ser un slider interactivo, voy, fijaos aquí, cambiando el valor de esto 740 00:53:25,389 --> 00:53:50,289 ¿Veis que cambia? Igual que yo puedo arrastrar por código, digamos, cambiar este valor por código y veis que también se ve reflejado en el juego, ¿no? Vale, entonces aquí estamos preparando esas variables, una para jugar con el slider y coger el valor, otro de texto de dificultad que básicamente es que he añadido aquí un campo que pone el nombre del nivel, ¿vale? 741 00:53:50,289 --> 00:54:13,409 Que irá asociado a cada uno de los niveles del slider, ¿sí? Y luego, lo que no es el texto en sí, sino que podamos interactuar con un input field, ¿vale? Porque en cierto momento, nosotros lo que vamos a ir es tocando este input field y lo que recogemos es el texto, pero son dos entidades distintas, ¿vale? 742 00:54:13,409 --> 00:54:27,789 Bueno, luego veis que los textos de dificultad, como voy a poner varios textos según el nivel, ¿vale? Esto de fácil, chupado, etcétera, pues lo que va a ir cogiendo es cuatro textos que tengo preparado aquí en un array de strings. 743 00:54:27,789 --> 00:54:55,909 Vale, muchas cosas, pero más o menos me vais siguiendo, ¿verdad? Ahora vamos viendo la lógica de cada cosa. Vale, vamos otra vez con el texto, ¿eh? Y me voy a ir a este menú y lo mismo, en el config menu habrá que ir también arrastrando cuál de estos elementos de la jerarquía es al que hace referencia esta variable, que por eso lo hacemos serialize field. 744 00:54:55,909 --> 00:55:10,349 Para luego poder decir dificultad texto, realmente lo que hago es cambiar el componente o coger valores también del componente texto. Este slider, si lo arrastro aquí, pues tendré que arrastrar el slider que me interese, que es este que tengo aquí, lo arrastro y ahí está. 745 00:55:10,349 --> 00:55:31,849 Entonces ya puedo acceder a esto que tengo aquí, ¿vale? Después del punto pues saldrán estas propiedades en general, ¿vale? Entonces ya una vez establecidos las variables en sí, bueno, lo primero es en este array, por esto estas llavecitas de strings, ¿vale? 746 00:55:31,849 --> 00:55:42,829 Y según se carga este nivel, no voy a querer que aparezcan otros, cuando aparezca este nivel va a haber un texto de dificultad, ¿vale? 747 00:55:42,989 --> 00:55:50,510 Que vamos a crear un array de cuatro posiciones con los cuatro niveles por orden de dificultad, ¿vale? 748 00:55:50,670 --> 00:55:58,570 Y aparte, cuando carga el juego, voy a aplicar esto que yo he llamado, que es un método que he creado yo, ¿vale? 749 00:55:58,570 --> 00:55:59,929 Que se llama UpdateSlider. 750 00:56:00,349 --> 00:56:13,829 Básicamente, así dicho, lo que hemos creado o lo que hay que crear es un método que sirva para ir guardando en esa variable estática la dificultad que vayamos cambiando, ¿vale? 751 00:56:13,869 --> 00:56:15,949 En este caso la dificultad con el slider. 752 00:56:16,750 --> 00:56:25,389 Y por otro lado, un método que lo que hace es guardar en la variable estática el texto que hayamos metido en el input field, ¿vale? 753 00:56:25,389 --> 00:56:41,590 Son dos. Uno sirve para los cambios que hagamos con el slider y otro el que hagamos con el input field. Vamos con el del input field, vuelvo, porque al final este es el más sencillo. Fijaos que solo tiene una línea. ¿Qué es lo que estoy haciendo yo aquí? 754 00:56:41,590 --> 00:56:44,090 preparar en público este método 755 00:56:44,090 --> 00:56:45,730 llamado 756 00:56:45,730 --> 00:56:47,469 updateInput 757 00:56:47,469 --> 00:56:50,150 para que los cambios que vayamos haciendo 758 00:56:50,150 --> 00:56:52,030 se guarden en el 759 00:56:52,030 --> 00:56:54,010 gameManagerUserName, que era esta variable 760 00:56:54,010 --> 00:56:55,869 estática. Y lo que va a coger es 761 00:56:55,869 --> 00:56:58,130 el inputUserName.text 762 00:56:58,130 --> 00:56:59,670 Esto 763 00:56:59,670 --> 00:57:01,590 así dicho rápido. 764 00:57:01,590 --> 00:57:03,730 Lo que estamos haciendo 765 00:57:03,730 --> 00:57:05,269 es decirle que 766 00:57:05,269 --> 00:57:07,570 voy al 767 00:57:07,570 --> 00:57:09,309 inputUserName que 768 00:57:09,309 --> 00:57:10,989 cada vez que se cambie, 769 00:57:10,989 --> 00:57:21,010 Estoy en el input username. Son tantas cosas que por eso voy recopilando. Perdón que a veces puede ser un poco plomo, pero prefiero que vaya más a paso. 770 00:57:21,010 --> 00:57:44,710 Si yo le digo que cada vez que se cambie un valor, coja del canvas, arrastro el canvas aquí y lo coge, que dentro de las opciones del canvas, que coja el método llamado configMenu y yo he hecho ahí un método que se llama dateInput, 771 00:57:44,710 --> 00:58:13,650 Que lo que hace es, cada vez que cambie el contenido, directamente me lo guarda en la variable estática, ¿vale? Pues ya lo tengo preparado. Al final, lo que estoy haciendo aquí es que cuando yo escriba un texto, cada vez que cambie este valor, ¿no? Según lo que hemos puesto aquí, cada vez que cambie este valor, se va a ejecutar ese, se va a recargar, digamos, ese método, se va a llamar y vas a decir, vale, por lo que yo haya escrito, que se guarde en el GameManagerUserName. 772 00:58:13,650 --> 00:58:23,809 Vuelvo a enseñar que eso es básicamente una variable de tipo string que tenemos aquí, que luego podremos llamar desde cualquier sitio. 773 00:58:25,190 --> 00:58:37,269 Entonces, ¿qué faltaría en la ecuación? Que en todo momento sepamos o indiquemos claramente cuál es ese texto que tiene que guardar. 774 00:58:37,269 --> 00:58:53,289 Y el que tiene que guardar es el texto que está dentro de input username. ¿Por qué? Es decir, tenemos por un lado el texto de la dificultad que se va cambiando y aquí tenemos el texto del input field. 775 00:58:53,289 --> 00:59:18,809 que es, creo que antes os he dicho que un texto era otro, pero básicamente este texto va a estar referido al texto de la dificultad, que es este que tenemos aquí, que se une aquí, ¿vale? Ese es el texto a secas y luego por otro lado tenemos el input field, ¿vale? Que es este texto que tenemos aquí en el input field, que no es el mismo, perdón, que antes os he hablado y me he liado, pero el input field tiene un campo de texto suyo, ¿vale? 776 00:59:18,809 --> 00:59:33,210 Entonces, hemos dicho que coja de este input field que hemos arrastrado, lo dejo de tener aquí, de este input field que hemos arrastrado aquí, ¿vale? Y que dentro tiene el valor que vayamos escribiendo en este texto, ¿vale? Y lo guarda en el GameManager. 777 00:59:33,210 --> 00:59:57,090 Eso es lo que hace, es que en todo momento al cambiar el valor del input field, pues se va guardando en esa variable estática y luego como en el hat lo que hemos puesto, a ver si me sale, en el hat lo que hemos puesto es que si no se ha cambiado nunca, si nunca se ha introducido nada en el, bueno, todo esto se pone en el start. 778 00:59:57,090 --> 00:59:59,329 al arrancar el nivel con el 779 00:59:59,329 --> 01:00:01,010 hand manager, dice, ala 780 01:00:01,010 --> 01:00:03,230 hemos creado tres variables que lo que hacen es 781 01:00:03,230 --> 01:00:04,690 que pongo de username 782 01:00:04,690 --> 01:00:06,110 que pongo de update 783 01:00:06,110 --> 01:00:09,210 de vidas y también no de dificultad 784 01:00:09,210 --> 01:00:11,190 que eso os lo cuento después si da tiempo 785 01:00:11,190 --> 01:00:13,230 pero es para influir por ejemplo 786 01:00:13,230 --> 01:00:14,530 en el rigid body de la bola 787 01:00:14,530 --> 01:00:16,170 entonces 788 01:00:16,170 --> 01:00:19,050 aquí nuevamente en el 789 01:00:19,050 --> 01:00:20,989 hand manager, que de esto no hemos hablado 790 01:00:20,989 --> 01:00:22,789 yo en el hand manager también he creado 791 01:00:22,789 --> 01:00:25,130 un script que voy a ir 792 01:00:25,130 --> 01:00:26,929 añadiendo todas las 793 01:00:26,929 --> 01:00:29,550 los serialize field, todas las variables 794 01:00:29,550 --> 01:00:31,590 que me vaya a interesar luego ir cambiando 795 01:00:31,590 --> 01:00:33,230 de ese hand manager o incluso 796 01:00:33,230 --> 01:00:35,530 remitiendo a un rigidbody de la bola 797 01:00:35,530 --> 01:00:37,650 estoy accediendo al rigidbody de la bola 798 01:00:37,650 --> 01:00:39,650 para luego cambiar sus propiedades 799 01:00:39,650 --> 01:00:41,309 de mass y de drag para que 800 01:00:41,309 --> 01:00:43,409 según la dificultad que pusimos 801 01:00:43,409 --> 01:00:45,429 en el slider 802 01:00:45,429 --> 01:00:47,530 según si es 803 01:00:47,530 --> 01:00:49,750 el nivel 0, el 1, el 2 804 01:00:49,750 --> 01:00:51,650 o el 3 de la barra 805 01:00:51,650 --> 01:00:53,010 y se ha guardado 806 01:00:53,010 --> 01:00:54,929 va a poner un peso 807 01:00:54,929 --> 01:00:57,349 y un drag diferente, por tanto la bola 808 01:00:57,349 --> 01:00:59,309 pues tendrá, será más fácil de mover 809 01:00:59,309 --> 01:01:00,889 o caerá más rápido o bueno 810 01:01:00,889 --> 01:01:03,210 los comportamientos en este caso de la física 811 01:01:03,210 --> 01:01:04,170 vale 812 01:01:04,170 --> 01:01:08,289 vale, entonces 813 01:01:08,289 --> 01:01:11,130 básicamente estamos 814 01:01:11,130 --> 01:01:13,309 usando nuevamente este game manager username 815 01:01:13,309 --> 01:01:15,090 como gestor luego para cambiar 816 01:01:15,090 --> 01:01:17,289 un texto, vale, que es este 817 01:01:17,289 --> 01:01:19,210 que tenemos aquí, que es el texto 818 01:01:19,210 --> 01:01:20,889 que en el nivel 819 01:01:20,889 --> 01:01:22,090 de 820 01:01:22,090 --> 01:01:24,369 juego 821 01:01:24,369 --> 01:01:27,329 no guardo por si acaso, ¿vale? que tengo aquí preparado 822 01:01:27,329 --> 01:01:29,469 aquí tengo un canvas con su propio 823 01:01:29,469 --> 01:01:33,690 con un texto aquí preparado 824 01:01:33,690 --> 01:01:36,269 que lo que va a escribir es lo que yo le diga por código 825 01:01:36,269 --> 01:01:39,710 por eso en su canvas, ¿vale? yo he dicho 826 01:01:39,710 --> 01:01:42,550 que lo que tiene que cambiar es ese 827 01:01:42,550 --> 01:01:45,250 username, ¿vale? eso que hay ahí, lo arrastra 828 01:01:45,250 --> 01:01:48,690 y ya pues sabe que ahí es el texto que tiene que cambiar en base 829 01:01:48,690 --> 01:01:50,329 a esto que 830 01:01:50,329 --> 01:01:53,489 esto que yo le estoy diciendo aquí 831 01:01:53,489 --> 01:02:13,510 ¿Vale? Esto es ir siendo muy esquemático y decir, aquí voy a coger algo, tenerlo muy claro, escribirlo, ¿dónde se guarda esto que estoy cogiendo en tal sitio? Y luego, ¿dónde se carga? E ir, preparar la variable que sea necesaria y cargarlo. 832 01:02:13,510 --> 01:02:17,329 Sí, sí, es denso, es denso y además cuesta 833 01:02:17,329 --> 01:02:19,210 Es ir desgranando poco a poco 834 01:02:19,210 --> 01:02:22,570 Creo que alguna vez os hablé de lo que es el pseudocódigo 835 01:02:22,570 --> 01:02:23,650 Bueno, no es pseudocódigo 836 01:02:23,650 --> 01:02:24,769 No sé cómo se llama 837 01:02:24,769 --> 01:02:28,989 Pero en programación, en la ingeniería de informática 838 01:02:28,989 --> 01:02:30,969 Que os lo cuento, pero yo no es que lo haya hecho 839 01:02:30,969 --> 01:02:32,809 Yo no soy programador, ni mucho menos 840 01:02:32,809 --> 01:02:35,550 Pero por amigos que tengo y gente que conozco 841 01:02:35,550 --> 01:02:38,690 Ellos, para entender lo que tienen que hacer 842 01:02:38,690 --> 01:02:39,829 Antes de meterse en el código 843 01:02:39,829 --> 01:02:41,230 En una hoja van escribiendo 844 01:02:41,230 --> 01:02:44,809 En el nivel 1 voy a tener un slider 845 01:02:44,809 --> 01:02:46,650 que al moverse 846 01:02:46,650 --> 01:02:49,050 va a guardar en otro script 847 01:02:49,050 --> 01:02:50,070 que se llama tal 848 01:02:50,070 --> 01:02:51,809 esto 849 01:02:51,809 --> 01:02:55,250 el valor 850 01:02:55,250 --> 01:02:57,349 del slider, una vez ha guardado 851 01:02:57,349 --> 01:02:58,409 en el HUD 852 01:02:58,409 --> 01:03:00,949 se va a ver reflejado, ponerlo con lenguaje 853 01:03:00,949 --> 01:03:02,909 natural, un poco esquemático pero 854 01:03:02,909 --> 01:03:04,949 con lenguaje natural, para tener siempre 855 01:03:04,949 --> 01:03:06,670 en cuenta de dónde a dónde vamos 856 01:03:06,670 --> 01:03:08,210 porque si no esto se va enmarañando 857 01:03:08,210 --> 01:03:10,710 y es complicado, pero básicamente es eso 858 01:03:10,710 --> 01:03:12,809 es ir sabiendo de dónde cogemos 859 01:03:12,809 --> 01:03:14,570 contenido 860 01:03:14,570 --> 01:03:17,210 donde guardamos esa variable y luego 861 01:03:17,210 --> 01:03:19,550 de donde se recoge, dicho así es fácil 862 01:03:19,550 --> 01:03:21,530 pero si lo ponemos 863 01:03:21,530 --> 01:03:23,489 por escrito, pues es más fácil no perderse 864 01:03:23,489 --> 01:03:25,449 y a lo malo es eso, que hay muchos 865 01:03:25,449 --> 01:03:27,610 capitulitos y muchos apartaditos 866 01:03:27,610 --> 01:03:29,050 que tampoco hay que hacer de una 867 01:03:29,050 --> 01:03:31,409 primero hacemos este update username 868 01:03:31,409 --> 01:03:33,110 y cuando ya funciona 869 01:03:33,110 --> 01:03:34,130 vamos a lo del slider 870 01:03:34,130 --> 01:03:37,010 poco a poco, pero sí que intentando 871 01:03:37,010 --> 01:03:39,369 resumirlo 872 01:03:39,369 --> 01:03:41,190 o ponerlo todo dentro de scripts 873 01:03:41,190 --> 01:03:42,869 que congreguen, pues eso 874 01:03:42,869 --> 01:04:05,329 En este caso, el gestor del HUD tiene tres funciones, básicamente, que es la del nombre, la de las vidas que tiene y la imagen que carga para demostrar esas vidas y el peso que tiene la bola. Pero lo pone todo dentro de un único script, porque si también se digrega mucho, también se vuelve una cantidad de script que hay que ir conectando e ir moviendo que se vuelve un poco tedioso el tema. 875 01:04:05,329 --> 01:04:25,929 Vamos con el slider, si os parece. La vida, aquí es una imagen que se va cargando, por defecto es la de 3, pero básicamente esto se debe a que cuando empieza el nivel, hacemos esto de cargar vidas. 876 01:04:25,929 --> 01:04:27,989 y esto de cargar vidas es 877 01:04:27,989 --> 01:04:29,989 si el game manager 878 01:04:29,989 --> 01:04:32,250 las vidas en algún 879 01:04:32,250 --> 01:04:34,429 momento han llegado a cero, es decir, ya hemos jugado 880 01:04:34,429 --> 01:04:35,550 y fueron 881 01:04:35,550 --> 01:04:38,250 y llegaron a ser 882 01:04:38,250 --> 01:04:40,170 cero 883 01:04:40,170 --> 01:04:42,269 directamente ya guarda B3 884 01:04:42,269 --> 01:04:44,150 para tenerlo ya preparado de que 885 01:04:44,150 --> 01:04:45,570 cuando reinicie el juego sean 3 886 01:04:45,570 --> 01:04:47,949 pero básicamente en todo momento 887 01:04:47,949 --> 01:04:49,409 lo que tiene que ir cogiendo son 888 01:04:49,409 --> 01:04:52,289 la cantidad de vidas que tengamos 889 01:04:52,289 --> 01:04:53,349 guardada en el game manager 890 01:04:53,349 --> 01:04:55,869 y de hecho, si no me equivoco 891 01:04:55,869 --> 01:04:57,469 a ver, un segundo 892 01:04:57,469 --> 01:04:59,989 nada, no 893 01:04:59,989 --> 01:05:01,809 os iba a enseñar una cosa que no es 894 01:05:01,809 --> 01:05:03,949 que no es real, pero eso 895 01:05:03,949 --> 01:05:05,949 que lo que es 896 01:05:05,949 --> 01:05:07,969 el, joder, es que se me está cambiando 897 01:05:07,969 --> 01:05:09,269 todo el rato el este 898 01:05:09,269 --> 01:05:11,230 si al empezar el juego 899 01:05:11,230 --> 01:05:13,570 no hemos hecho nada, pues pónmelo en 3 900 01:05:13,570 --> 01:05:16,030 si no, cada vez que yo vaya metiéndome en ese nivel 901 01:05:16,030 --> 01:05:17,590 no toco esto, ¿vale? 902 01:05:17,869 --> 01:05:18,809 salta este bucle 903 01:05:18,809 --> 01:05:21,550 y solo se recarga 3 cuando son 3, si no 904 01:05:21,550 --> 01:05:23,829 lo que se irá haciendo es que se irán restando 905 01:05:23,829 --> 01:05:25,250 vidas, ¿vale? recordad 906 01:05:25,250 --> 01:05:42,110 que en el juego, en lo que es el juego vuestro de la bola, cuando se cae por el precipicio, tendremos que poner que GameManagerLive sea una vida menos, ¿vale? En ese caso sí que hay que tocar algunos de los códigos que teníamos antes. 907 01:05:42,110 --> 01:05:57,849 Es decir, si nos metemos en donde precipicio, nos meteremos, a ver si quiere enseñármelo, precipicio, aquí está, ¿vale? Y aquí metemos mano a GameManagerLives y restamos uno cuando se cae, ¿vale? 908 01:05:57,849 --> 01:06:22,289 Pues empezamos con tres realmente, dos, uno y cuando es cero, aparte de que esto ya obliga a cargar cuando nos hemos caído la escena cero, que es la que hemos puesto aquí, pues también eso nos va sirviendo, como lo estamos guardando en este Game Manager de orden superior, nos va sirviendo en todo momento para ir cargando la imagen que nos corresponda, ¿vale? 909 01:06:22,289 --> 01:06:46,349 Esta imagen es un array que hemos creado aquí con distintos sprites, ¿vale? Por un lado está el componente imagen, que es el que carga la imagen, ¿vale? Si nos metemos aquí hay un componente imagen que es el que carga la imagen y luego otra cosa diferente es la variable de tipo sprites, que son las imágenes en sí, ¿vale? 910 01:06:46,349 --> 01:07:16,210 Si os fijáis, aquí tengo por un lado la imagen, el componente imagen, que luego será el que cargue, ¿vale? Esto, que cargue sprites y luego son los sprites en sí, que en este caso guardamos en un array, ¿vale? De tipo, aquí está, un array de tipo sprites, son los distintos sprites que, bueno, al ir arrastrando las distintas imágenes son este array de imágenes, ¿vale? 911 01:07:16,349 --> 01:07:42,650 Y básicamente lo que vamos a ir haciendo, además, si os fijáis, es usar el índice en relación al array, es decir, el elemento 3 va a ser el de las tres vidas, el de 0 es cuando se han consumido, el de 1 es el de una vida, el de 2, el de 3, para que coincida y así directamente coincide también con el orden de arrays. 912 01:07:42,650 --> 01:07:51,849 Es decir, si nos quedan dos vidas, directamente carga el segundo elemento, bueno, el tercero, el 0, 1, el 2, elemento del array que coincide con el de las vidas. 913 01:07:51,989 --> 01:07:55,869 Esto si no habría que dar más vueltas, pero si se hace coincidir, pues directamente cuadra. 914 01:07:56,989 --> 01:07:59,090 Vale, vamos con el slider. 915 01:08:01,110 --> 01:08:08,110 El slider es lo mismo que hemos visto hasta ahora, pero tiene un nivel de complejidad quizá mayor. 916 01:08:08,110 --> 01:08:12,489 A ver, perdón, que me trabo aquí buscando las cosas. 917 01:08:12,489 --> 01:08:25,630 tiene otra dificultad, que es que lo que va recogiendo son valores numéricos, y valores numéricos de tipo float, y hay que hacer una conversión, y vamos a verlo, ¿vale? 918 01:08:25,630 --> 01:08:52,430 En este slider, pues aquí ya como había puesto, hay otro texto para que lo he metido dentro de lo hecho hijo, de lo que es todo el slider. Vamos, aquí está el slider en sí y he hecho otro padre, otro entity para que todo se mueva de golpe, pues un titular que es dificultad y este texto que es el que se va cambiando con el array que os he puesto antes, que irá cargando el texto de este array de dificultad que tenemos aquí, ¿vale? 919 01:08:52,430 --> 01:09:08,229 Pero vamos al slider, que es esto de aquí. El slider, además, tiene bastantes elementos. También lo indica el tema, pero sobre todo se puede cambiar la imagen, que es el handle, que es el manejador de lo que movemos. 920 01:09:08,229 --> 01:09:29,069 Bueno, pues es una imagen. Aquí podemos arrastrar otro elemento. Indica además que es de los pocos elementos de User Interface que es mejor escalar que arrastrar porque se puede pixelar. Cuando hagáis las pruebas, si cuando vayáis cambiando el tamaño del slider se os empieza a pixelar, es de los pocos que sí que hay que escalar. 921 01:09:29,069 --> 01:09:48,789 Porque si no empieza a pixelarse, es decir, si yo lo que hago es cambiar el fill area, me voy aquí, arrastrando aquí, bueno, no es fill, sería esto, el conjunto, sí que sobre todo cuando se haga de otras proporciones veis que empiezan a distorsionarse elementos. 922 01:09:49,510 --> 01:09:54,489 Entonces, para el largo a lo mejor no os da problemas, pero el handle sí que os va a dar problemas. 923 01:09:54,489 --> 01:09:59,329 Entonces, es de los pocos que hay que preparar, si vais a meter la imagen de la bola, 924 01:09:59,789 --> 01:10:02,829 pues que tenga una resolución adecuada por si se hace un poco más grande. 925 01:10:03,130 --> 01:10:07,630 Pero vais a ver que es de los pocos que sí que se aconseja hacerlo más grande con la escala, 926 01:10:07,890 --> 01:10:09,289 porque si no, os da problemas. 927 01:10:10,289 --> 01:10:17,590 Vale, lo dicho, tenemos este fill area, tenemos distintos elementos para cambiar un color, 928 01:10:17,590 --> 01:10:19,510 para decir que cuando va pasando la bola 929 01:10:19,510 --> 01:10:21,329 acame de color, pero toda la chicha 930 01:10:21,329 --> 01:10:22,630 básicamente está en el padre 931 01:10:22,630 --> 01:10:24,890 que es el que da aquí 932 01:10:24,890 --> 01:10:26,989 en el componente slider 933 01:10:26,989 --> 01:10:29,470 el que va recogiendo en este value 934 01:10:29,470 --> 01:10:30,329 el valor 935 01:10:30,329 --> 01:10:33,229 dentro de lo que se haya cargado o no 936 01:10:33,229 --> 01:10:35,550 la barra, el valor 937 01:10:35,550 --> 01:10:37,829 de carga, se va a interpretar 938 01:10:37,829 --> 01:10:39,350 como números, aunque aquí ponga 939 01:10:39,350 --> 01:10:41,329 lo de fácil chupado, eso se va a ir 940 01:10:41,329 --> 01:10:43,350 relacionando en base al número que tengamos aquí 941 01:10:43,350 --> 01:10:44,869 va a cargar el slider 942 01:10:44,869 --> 01:10:47,250 el texto del array de dimensión 943 01:10:47,250 --> 01:10:55,409 una de posición 2 o de posición 3 pero básicamente esto es lo que nos va a dar la gestión del slider 944 01:10:55,409 --> 01:11:00,649 importante bueno aparte de que el slider se puede poner de arriba abajo de izquierda a derecha por 945 01:11:00,649 --> 01:11:06,289 si queremos que suba o baje vale de una forma rápida bueno aquí se le ha ido la pinza un 946 01:11:06,289 --> 01:11:13,630 segundito vale y por tanto si queremos cambiar la dirección no habría que rotarlo vale que sería a 947 01:11:13,630 --> 01:11:18,050 a lo mejor el comportamiento así primero que no vendría, 948 01:11:18,149 --> 01:11:20,710 sino que habría que cambiar la orientación aquí, ¿vale? 949 01:11:21,289 --> 01:11:23,869 Y de momento me interesa que vaya de izquierda el 0, 950 01:11:24,050 --> 01:11:27,409 a derecha el máximo, sería esta la configuración. 951 01:11:28,050 --> 01:11:31,810 Muy, muy importante, habrá que configurar el slider 952 01:11:31,810 --> 01:11:34,250 con su mínimo y su máximo, ¿vale? 953 01:11:34,250 --> 01:11:39,109 En este caso, se pone de 0 al 3 porque queremos 4 niveles de dificultad. 954 01:11:39,569 --> 01:11:41,909 Tened en cuenta que el 0 ya es un valor, ¿vale? 955 01:11:41,909 --> 01:12:11,409 El 0 será chupado, el 1 será fácil, el 2 será intermedio o yo que sé, algo así era, y el 4 será muy difícil, ¿vale? Entonces, esto va a llegar hasta donde nosotros pongamos aquí, del mínimo al máximo, ¿vale? Entonces, yo ahora, si os fijáis que he puesto que vaya del 0 como punto de partida, aunque también se podría cambiar, ¿eh? También podría ser que empiece en el 1, pues el 1 sería el valor de inicio y a medida que voy arrastrando, veis que ahora hay muchos más pasos, ¿vale? 956 01:12:11,409 --> 01:12:32,369 Y hay otro valor también importante, que es que aparte del límite, se puede dejar, como viene por defecto, si no me equivoco, para que sea un float, y vais a ver que el valor ahora que va cogiendo es de un float, porque tiene valores decimales, o que sean números enteros, ¿vale? 957 01:12:32,369 --> 01:12:57,869 Aquí he cambiado algo del tamaño, ¿veis? Ya la he liado un poco. Pero veis que cuando ponemos esto de whole numbers, hacemos que los saltos sean entre unidades enteras. ¿Vale? ¿Qué problema vamos a tener con esto? Que aunque aquí pongamos esto de whole numbers, al nivel de código, esto está preparado para que funcione con floats, con decimales. Y lo que va a tener que recibir es un float. ¿Vale? Esto es una dificultad que hay ahí. 958 01:12:57,869 --> 01:13:28,010 A ver, un segundo, a ver si encuentro el por qué pasó esto, el fill, a ver, un segundín, aquí el handle, algo que cambia aquí, que se ha descoyuntado, sería el fill area, bueno, aquí puede ser, a ver, un segundo, algo que cambia ahí, que se le ha ido un poco, bueno, un segundo, 959 01:13:29,630 --> 01:13:56,550 No, aquí no es. Bueno, esto, bueno, si no tocáis nada raro, pues no pasa esto de que se desconfigura el... Tendría que hacer la prueba de escalar, a ver, un segundo, no sé por qué esto ha cambiado, pero bueno, habría que ajustarlo ahí y ahora sí que lo hace. Bueno, algo, cuando he escalado, fijaos, ¿qué ha pasado eso? Bueno, ya estamos otra vez. 960 01:13:56,550 --> 01:14:03,899 Bueno, vuelve a estar mal porque tendría que ajustar esto al valor que tenía 961 01:14:03,899 --> 01:14:07,020 Porque lo he cambiado en reproducción, pero es eso lo importante 962 01:14:07,020 --> 01:14:11,199 Lo dicho, para lo que nos interesa, que son niveles de dificultad 963 01:14:11,199 --> 01:14:14,279 No queremos decimales, preferimos que sean valores enteros 964 01:14:14,279 --> 01:14:19,479 Y aquí, cada vez que se toque, cada vez que se cambie el valor 965 01:14:19,479 --> 01:14:22,199 Hay un evento ya preparado en los sliders 966 01:14:22,199 --> 01:14:25,720 Que como sucedía en el de escritura en los input fields 967 01:14:25,720 --> 01:14:30,300 Podemos poner que llame a uno o varios 968 01:14:30,300 --> 01:14:31,979 Se pueden ir incluyendo más acciones 969 01:14:31,979 --> 01:14:35,739 Y antes os he dicho que cuando cargamos otro elemento 970 01:14:35,739 --> 01:14:37,859 El canvas, voy a hacer una cosa 971 01:14:37,859 --> 01:14:39,899 Vienen aquí más cosas, se podría decir 972 01:14:39,899 --> 01:14:44,380 No un script con métodos públicos que hemos creado nosotros 973 01:14:44,380 --> 01:14:47,479 Sino decir directamente que el GameObject cuando lo toquemos 974 01:14:47,479 --> 01:14:49,659 Se active o se desactive 975 01:14:49,659 --> 01:14:52,840 Es decir, que cuando toque esto se desactive 976 01:14:52,840 --> 01:15:06,840 Entonces vais a ver ahora que, como está desmarcado que se desactive, cuando toque aquí el canvas se ha desactivado, porque cuando he tocado y se ha cambiado un valor, le he dicho que el setActive se vuelva falso, ¿no? 977 01:15:06,840 --> 01:15:24,600 Y en cuanto he tocado, efectivamente, este canvas ha pasado a ser falso. Entonces, hay muchas interacciones que se pueden hacer más allá de decir que lance otro script que tengamos ahí preparado, ¿vale? 978 01:15:24,600 --> 01:15:43,800 Pero bueno, y que sean varios incluso. A ver, espera, que aquí justo he dejado el que no me interesa, que es este, lo resto, ahí está. Aquí yo tengo en el canvas nuevamente y en el método público, en el script config menu, tengo un script llamado updateSlider. 979 01:15:43,800 --> 01:15:56,359 Vamos a ver qué es lo que hemos puesto. Aquí está. Y ahora hacemos que cuando toquemos algo del slider va a estar llamando a este método. ¿Y qué es lo que hacemos aquí? 980 01:15:56,739 --> 01:16:09,359 Creamos dentro del método, está encapsulado dentro del método, una variable de tipo float que se llama dificultad. Y básicamente lo que estamos guardando en dificultad es el número que tengamos aquí en value. 981 01:16:09,359 --> 01:16:22,979 Aquí va a ir guardando, en nombre de dificultad, el valor. Pero es un float, como os he dicho. Esto está preparado para funcionar con decimales. Solo que aquí podemos marcar una opción para que dé saltos en cada unidad. 982 01:16:23,399 --> 01:16:37,060 ¿Qué implica eso? Que para que luego no dé problemas, hay que hacer lo que se llama una conversión explícita. Es decir, indicar que un tipo de variable cambie a otro tipo de variable si son compatibles. 983 01:16:37,060 --> 01:17:03,060 Y hay una cosa que es que un float es muy fácil convertirlo en un int, porque básicamente es decir, oye, quítame los decimales y te quedas con la unidad. Para hacer esa conversión, creamos una variable de tipo int, que se llama dificultad int, y lo que hacemos es simplemente poniendo entre paréntesis delante de la variable de tipo float, esto sirve para pasar de float a int. 984 01:17:03,060 --> 01:17:16,100 Para otras cosas no va a funcionar. Si ponemos delante de una variable de tipo float esta indicación de entre paréntesis int va a hacer una conversión. Entonces lo que coge aquí como float lo convierte a int. 985 01:17:16,100 --> 01:17:45,460 Hay otras formas de conseguir esto, ¿vale? Hay métodos que son como de redondeo, esto de absolute o el round, ¿vale? R aquí, el round, ¿vale? O round to int, que también nos serviría para coger este valor que es un float y convertirlo en un int, pero bueno, digo que incluso algunos métodos ya podríais haber llegado a ellos, pero que sepáis que también de float a int se pueden hacer estas conversiones, haciendo esto del paréntesis. 986 01:17:46,100 --> 01:17:53,699 Lo importante es que aquí estamos cogiendo el valor, en todo momento, cada vez que movemos, cada vez que movemos se lanza esto, recoge este valor, lo guarda en dificultad, 987 01:17:53,699 --> 01:18:07,039 lo convertimos ahí, ¿vale? Pues cuando vayamos moviendo, y luego, este dificultad text, ¿vale? Aquí lo que estamos haciendo en todo momento es que estamos aludiendo a este dificultad text 988 01:18:07,039 --> 01:18:13,619 que habíamos guardado, es decir, que habíamos establecido con las cuatro variables del array 989 01:18:13,619 --> 01:18:19,479 para ir cambiando este texto y se irá lanzando un elemento del array u otro 990 01:18:19,479 --> 01:18:27,140 según la posición del array que lancemos que coincidirá con la del tipo int. 991 01:18:27,619 --> 01:18:31,859 Y por eso lo hacemos de tipo int, porque para que el array que tiene posiciones fijas se vaya lanzando 992 01:18:31,859 --> 01:18:33,479 lo convertimos en tipo int. 993 01:18:33,479 --> 01:18:55,159 Pero bueno, esto no es lo más importante. Lo importante es que en todo momento tenemos aquí dificultad como un float y dificultad int, el valor del slider, también como un entero. ¿Y qué vamos a ir haciendo en todo momento? Guardar en la variable estática llamada dificultad el nivel de dificultad. Y aquí sí que puede ser float o int, lo que nos interese. 994 01:18:55,159 --> 01:19:00,199 entonces digamos que cada vez que tocamos el slider 995 01:19:00,199 --> 01:19:02,180 hasta aquí estamos guardando por un lado 996 01:19:02,180 --> 01:19:05,659 en la variable estática el nivel de dificultad 997 01:19:05,659 --> 01:19:08,640 por un lado y en otro estamos preparando 998 01:19:08,640 --> 01:19:11,119 para que aquí nos muestre el texto de este array 999 01:19:11,119 --> 01:19:12,560 que habíamos generado aquí 1000 01:19:12,560 --> 01:19:16,260 que tiene cuatro posiciones 1001 01:19:16,260 --> 01:19:18,359 cargará este array 1002 01:19:18,359 --> 01:19:22,359 según la posición que tenga 1003 01:19:22,359 --> 01:19:24,020 irá cargando uno de estos strings 1004 01:19:24,020 --> 01:19:26,319 en este campo de texto que tenemos ahí. 1005 01:19:27,899 --> 01:19:31,539 Luego, por otro lado, esto también se explica en el tema, 1006 01:19:32,319 --> 01:19:34,260 se pueden usar, esto es un poco opcional, 1007 01:19:34,380 --> 01:19:36,020 se podría de otra forma, los player prefs. 1008 01:19:36,579 --> 01:19:39,819 Que los player prefs es, digamos, de hacer un guardado 1009 01:19:39,819 --> 01:19:43,300 que va incluso más allá de las variables estáticas. 1010 01:19:43,520 --> 01:19:45,460 Las variables estáticas funcionan 1011 01:19:45,460 --> 01:19:48,180 mientras está la ejecución de ese juego. 1012 01:19:48,180 --> 01:19:52,399 Es decir, en una partida, hasta que no se apague la reproducción, 1013 01:19:52,399 --> 01:19:59,520 hasta que no se pare el juego, básicamente, pues entre niveles y entre elementos se pueden ir almacenando esas informaciones. 1014 01:19:59,979 --> 01:20:06,960 Con los player prefs, básicamente lo que hacemos es guardar en el ordenador, en el sistema operativo, en algún punto de nuestra memoria del ordenador, 1015 01:20:07,579 --> 01:20:13,479 variables o valores que pueden ser rescatados incluso entre partidas. Es la diferencia. 1016 01:20:14,079 --> 01:20:19,380 Luego en el tema también os pongo que los player prefs se guardan en el sistema operativo, 1017 01:20:19,380 --> 01:20:28,899 pero se pueden guardar en archivos tipo Json, estos más avanzados, pero que digamos que se pueden subir a una nube o se pueden subir y entonces se guardan en la nube con un nombre 1018 01:20:28,899 --> 01:20:35,319 y se recogen en la nube con un nombre de una forma más o menos un poco más compleja, más larga, pero similar a esta. 1019 01:20:35,779 --> 01:20:45,159 ¿Qué es? Que nosotros podemos ir dando, igual que si tuviéramos un Excel, vamos a decir, podemos ir creando tablas en las que poner en una casilla un nombre 1020 01:20:45,159 --> 01:20:46,859 y en la siguiente el valor 1021 01:20:46,859 --> 01:20:49,500 o lo que estemos guardando, el valor de lo que guardemos 1022 01:20:49,500 --> 01:20:51,319 aquí por ejemplo, estamos diciendo 1023 01:20:51,319 --> 01:20:53,460 en los player prefs, los player prefs 1024 01:20:53,460 --> 01:20:55,119 siempre aparecen, no hay que hacer nada 1025 01:20:55,119 --> 01:20:56,720 extraño, están ahí, ¿vale? 1026 01:20:56,760 --> 01:20:58,600 y tienen sus propios métodos aquí 1027 01:20:58,600 --> 01:21:01,300 que se habla de ellos, de hecho se habla de todos los que tienen 1028 01:21:01,300 --> 01:21:02,880 se describen en el tema 1029 01:21:02,880 --> 01:21:05,100 ¿vale? pero aquí en este momento 1030 01:21:05,100 --> 01:21:06,699 cada vez que movamos el slider 1031 01:21:06,699 --> 01:21:08,939 se está, recordemos 1032 01:21:08,939 --> 01:21:11,159 en el... 1033 01:21:11,159 --> 01:21:11,819 aquí 1034 01:21:11,819 --> 01:21:27,020 Aquí. Joder. No. Aquí. Y este no. Joder, qué tostón. Vale. Aquí. En el slider, recordad que cada vez que toquemos, activa el método updateSlider. 1035 01:21:27,199 --> 01:21:37,300 Entonces, cada vez que toquemos, podemos estar guardando en ese sistema operativo, en ese archivillo, con el nombre clave, digamos, de dificultad, 1036 01:21:37,300 --> 01:21:38,539 Porque es lo que estamos guardando 1037 01:21:38,539 --> 01:21:40,439 El nombre que le estamos dando a este dato 1038 01:21:40,439 --> 01:21:42,119 Pues lo que estamos guardando es 1039 01:21:42,119 --> 01:21:44,800 El valor del slider 1040 01:21:44,800 --> 01:21:47,000 Realmente aquí también podríamos poner dificultad 1041 01:21:47,000 --> 01:21:48,579 Directamente porque es lo mismo 1042 01:21:48,579 --> 01:21:50,060 Pero bueno, así queda más claro 1043 01:21:50,060 --> 01:21:53,260 Según lo recoge ya, mete este valor 1044 01:21:53,260 --> 01:21:54,359 Y lo va a meter como un float 1045 01:21:54,359 --> 01:21:56,420 Bueno, pues como un float 1046 01:21:56,420 --> 01:21:59,600 Y eso significa que aparte de estar guardándolo 1047 01:21:59,600 --> 01:22:00,520 En el GameManager 1048 01:22:00,520 --> 01:22:02,560 Yo también podré recurrir 1049 01:22:02,560 --> 01:22:05,460 A los PlayerPrefs para recuperar datos 1050 01:22:05,460 --> 01:22:06,800 Por ejemplo aquí 1051 01:22:06,800 --> 01:22:09,079 hay una cosa que es 1052 01:22:09,079 --> 01:22:11,260 que en el, esto ya es más opcional 1053 01:22:11,260 --> 01:22:12,939 pero que en lo de los 1054 01:22:12,939 --> 01:22:15,340 player prefs, os lo digo un poco para que sepáis como funciona 1055 01:22:15,340 --> 01:22:16,899 pero una de las 1056 01:22:16,899 --> 01:22:18,819 opciones es que cuando se arranca 1057 01:22:18,819 --> 01:22:19,439 el 1058 01:22:19,439 --> 01:22:22,960 este script, que realmente se 1059 01:22:22,960 --> 01:22:25,159 arranca cuando entramos 1060 01:22:25,159 --> 01:22:27,079 en el menú de configuración, cuando damos 1061 01:22:27,079 --> 01:22:28,920 al botón de config desde el menú 1062 01:22:28,920 --> 01:22:31,039 inicial, nos metemos aquí y al arrancar 1063 01:22:31,039 --> 01:22:33,199 dice, oye si en algún momento 1064 01:22:33,199 --> 01:22:35,119 se ha creado, esto es una booleana 1065 01:22:35,119 --> 01:22:49,619 Al final es una condición que es una boleana. Es uno de los métodos que tienen los player prefs, que es, si existe este código llamado dificultad, ejecutalo de dentro. Si alguna vez ya se había creado, la primera vez que juguemos no va a suceder. 1066 01:22:49,619 --> 01:23:09,260 La segunda, en cuanto hayamos tocado el slider, ya se ha generado este código, este campo en las player prefs y habrá guardado un valor. Entonces dice, si alguna vez has jugado y existe esta dificultad, pues por defecto lo que es el valor, 1067 01:23:09,260 --> 01:23:10,800 pues voy a decir 1068 01:23:10,800 --> 01:23:12,619 a aludir aquí 1069 01:23:12,619 --> 01:23:14,100 el valor de 1070 01:23:14,100 --> 01:23:17,420 de este slider 1071 01:23:17,420 --> 01:23:18,539 que sea el que habíamos 1072 01:23:18,539 --> 01:23:20,880 coge ese float y pone ese valor 1073 01:23:20,880 --> 01:23:22,380 ¿vale? en base a ese nombre 1074 01:23:22,380 --> 01:23:24,279 por eso, aunque 1075 01:23:24,279 --> 01:23:26,939 fijaos, es verdad que las 1076 01:23:26,939 --> 01:23:28,560 playerprefs se generan 1077 01:23:28,560 --> 01:23:30,359 se generan cuando 1078 01:23:30,359 --> 01:23:32,539 cuando 1079 01:23:32,539 --> 01:23:35,220 digamos 1080 01:23:35,220 --> 01:23:37,199 sobre todo cuando se está jugando 1081 01:23:37,199 --> 01:23:38,800 pero fijaos que yo ahora 1082 01:23:38,800 --> 01:23:41,039 aunque pare la reproducción, cuando le doy 1083 01:23:41,039 --> 01:23:43,260 al play, se está cargando 1084 01:23:43,260 --> 01:23:45,300 el último estado que había dejado 1085 01:23:45,300 --> 01:23:47,020 ¿vale? ya no es entre niveles, es entre 1086 01:23:47,020 --> 01:23:48,760 partidas, entonces yo ahora por ejemplo 1087 01:23:48,760 --> 01:23:50,840 lo pongo en normal 1088 01:23:50,840 --> 01:23:52,859 ¿vale? y paro 1089 01:23:52,859 --> 01:23:55,140 ¿vale? ya las variables estáticas han olvidado 1090 01:23:55,140 --> 01:23:57,039 todo, se han descargado, el juego ha parado 1091 01:23:57,039 --> 01:23:59,140 podemos habernos ido a apagar 1092 01:23:59,140 --> 01:24:00,960 el ordenador, si esto fuera 1093 01:24:00,960 --> 01:24:02,600 el compilado ¿vale? pero bueno, ahora estamos 1094 01:24:02,600 --> 01:24:05,319 digamos recreando lo que pasaría en el compilado 1095 01:24:05,319 --> 01:24:07,119 si yo vuelvo a arrancar el juego 1096 01:24:07,119 --> 01:24:09,079 como estoy en el mismo sistema operativo 1097 01:24:09,079 --> 01:24:11,119 y ese archivo de las player prefs 1098 01:24:11,119 --> 01:24:13,260 se ha almacenado ahí, lo buscará 1099 01:24:13,260 --> 01:24:15,159 y dirá, sí, sí existe esa 1100 01:24:15,159 --> 01:24:17,220 dificultad. Y por eso arranca 1101 01:24:17,220 --> 01:24:18,539 ya con el valor de 1102 01:24:18,539 --> 01:24:21,140 2 en este caso, ¿vale? 1103 01:24:21,140 --> 01:24:22,279 Que es en el que lo habíamos dejado. 1104 01:24:23,239 --> 01:24:24,899 Entonces, bueno, en los player prefs 1105 01:24:24,899 --> 01:24:27,060 el problema que tienen, esto se usaba 1106 01:24:27,060 --> 01:24:29,439 por eso se llama player preferences 1107 01:24:29,439 --> 01:24:31,020 se usaba, por ejemplo, 1108 01:24:31,119 --> 01:24:32,260 en las 1109 01:24:32,260 --> 01:24:35,039 máquinas recreativas 1110 01:24:35,039 --> 01:24:36,859 para guardar los listados 1111 01:24:36,859 --> 01:24:38,420 De los mejores, en plan 1112 01:24:38,420 --> 01:24:40,420 El número uno hizo 50.000 puntos 1113 01:24:40,420 --> 01:24:41,359 El dos, 30.000 1114 01:24:41,359 --> 01:24:43,960 El problema de los ordenadores es que si buscas ese archivo 1115 01:24:43,960 --> 01:24:46,239 Y lo cambias a mano, pues es muy fácil 1116 01:24:46,239 --> 01:24:48,460 Manipularlo, para que de pronto te cargue 1117 01:24:48,460 --> 01:24:49,140 Lo que tú quieras 1118 01:24:49,140 --> 01:24:52,199 Pero bueno, ya os digo que esto es una especie de primer 1119 01:24:52,199 --> 01:24:54,859 Paso, o versión simplificada 1120 01:24:54,859 --> 01:24:55,699 De lo que se puede hacer 1121 01:24:55,699 --> 01:24:58,039 Con archivos que se guardan a la nube 1122 01:24:58,039 --> 01:25:00,399 Y se almacenan en sistemas, que es lo que sucede 1123 01:25:00,399 --> 01:25:02,439 Cuando se juega juegos en la nube 1124 01:25:02,439 --> 01:25:04,640 Que se van guardando datos en la nube 1125 01:25:04,640 --> 01:25:06,600 O en una memory card, o etc 1126 01:25:06,600 --> 01:25:24,579 Pues hay otros sistemas con otros tipos de archivos, pero en esencia es lo mismo, que se pueden ir generando lo que se llaman keys, lo que se llaman códigos, nombres, a los que se pueden asociar valores y que se compruebe si existe ese código y si existe ese código que coja ese valor, ¿vale? 1127 01:25:24,579 --> 01:25:52,020 Pero bueno, en esencia ese es un poco lo que está configurado. Luego, cuando ya tenemos la dificultad, en el HUD Manager, al que digamos en cada nivel estamos accediendo al RigidBody de ese nivel, porque lo arrastramos al SerializeField, la bola, o porque aquí hiciéramos, aquí no lo he hecho así, lo he hecho por SerializeField, pero un GetComponent y ese componente del RigidBody de ese nivel, 1128 01:25:52,020 --> 01:25:54,159 pues luego podemos ir y decir 1129 01:25:54,159 --> 01:25:56,180 oye, guárdame en una 1130 01:25:56,180 --> 01:25:57,260 variable 1131 01:25:57,260 --> 01:25:59,180 local 1132 01:25:59,180 --> 01:26:01,500 lo que valga dificultad 1133 01:26:01,500 --> 01:26:03,939 que es básicamente lo que se ha guardado 1134 01:26:03,939 --> 01:26:06,039 como valor del slider cada vez que lo hemos ido 1135 01:26:06,039 --> 01:26:07,899 cambiando, ¿vale? entonces 1136 01:26:07,899 --> 01:26:10,000 si lo hemos dejado en 2, yo aquí luego 1137 01:26:10,000 --> 01:26:12,380 lo que puedo hacer es decir, ah, vale, como si la dificultad 1138 01:26:12,380 --> 01:26:14,000 es la de normal 1139 01:26:14,000 --> 01:26:16,119 que es la de 2, esto también se podría 1140 01:26:16,119 --> 01:26:17,579 hacer con un switch, ¿vale? 1141 01:26:18,159 --> 01:26:20,140 en vez de hacer tantas condiciones, pero bueno 1142 01:26:20,140 --> 01:26:21,359 en esencia lo mismo 1143 01:26:21,359 --> 01:26:23,979 pues si la dificultad que habíamos guardado 1144 01:26:23,979 --> 01:26:25,800 que se guardó en esa variable 1145 01:26:25,800 --> 01:26:27,359 estática es 2 1146 01:26:27,359 --> 01:26:29,079 pues la masa de la bola 1147 01:26:29,079 --> 01:26:31,239 accedo a 1148 01:26:31,239 --> 01:26:33,720 al RigidBody 1149 01:26:33,720 --> 01:26:35,460 que lo había llamado como bola 1150 01:26:35,460 --> 01:26:37,880 y ya aquí puedo cambiar pues que sea más o menos 1151 01:26:37,880 --> 01:26:39,619 pesada, que tenga otra inercia 1152 01:26:39,619 --> 01:26:41,380 que tenga gravedad, que no 1153 01:26:41,380 --> 01:26:44,060 y aquí pues básicamente voy cambiando las condiciones 1154 01:26:44,060 --> 01:26:45,880 y vais a ver que la bola es más 1155 01:26:45,880 --> 01:26:47,680 pesada, sobre todo para el nivel que va 1156 01:26:47,680 --> 01:26:49,720 rotando la tabla, es más pesada 1157 01:26:49,720 --> 01:26:51,979 y tiene menos drag para que caiga más rápido 1158 01:26:51,979 --> 01:26:53,020 de la tabla y sea más difícil 1159 01:26:53,020 --> 01:26:54,939 pues a medida que tiene más dificultad 1160 01:26:54,939 --> 01:26:57,279 en el 3 es donde más hay menos drag tiene 1161 01:26:57,279 --> 01:26:58,720 ¿vale? 1162 01:26:59,859 --> 01:27:01,199 y con esto más o menos 1163 01:27:01,199 --> 01:27:02,939 os he ido contando un poco todo 1164 01:27:02,939 --> 01:27:03,960 un poco rápido 1165 01:27:03,960 --> 01:27:07,000 luego en el menú inicial 1166 01:27:07,000 --> 01:27:08,279 el botón de salir 1167 01:27:08,279 --> 01:27:11,399 simplemente para que lo sepáis 1168 01:27:11,399 --> 01:27:13,920 en el menú inicial 1169 01:27:13,920 --> 01:27:15,380 no lo guardo 1170 01:27:15,380 --> 01:27:16,420 en el de salir 1171 01:27:16,420 --> 01:27:18,500 lo pone también en el tema 1172 01:27:18,500 --> 01:27:22,920 que cuando queremos cerrar 1173 01:27:22,920 --> 01:27:24,960 cuando hagamos el compilado del juego 1174 01:27:24,960 --> 01:27:26,539 si queremos que al dar a ese botón 1175 01:27:26,539 --> 01:27:28,739 o cuando sea, se cierre el juego 1176 01:27:28,739 --> 01:27:30,600 está este método 1177 01:27:30,600 --> 01:27:33,159 el Application Quit, pero esto no se ve reflejado 1178 01:27:33,159 --> 01:27:35,020 al reproducir 1179 01:27:35,020 --> 01:27:36,199 en el editor 1180 01:27:36,199 --> 01:27:38,180 no se puede cerrar de esta forma 1181 01:27:38,180 --> 01:27:40,420 porque si no, supongo que interpretaría 1182 01:27:40,420 --> 01:27:41,380 que lo que tiene que cerrar es 1183 01:27:41,380 --> 01:27:43,539 la aplicación de Unity 1184 01:27:43,539 --> 01:27:46,380 entonces la dejamos aquí y sabemos que funciona 1185 01:27:46,380 --> 01:28:13,399 Ahí, bueno, se puede poner aquí también un debug log que indique larga, botón de salir y saldría, ¿vale? Pero realmente es esta línea la que sirve para cerrar el juego, ¿vale? Ahí como otras formas de poner que cuando cliques como que simule que para el juego y tal, pero bueno, es más enrevesado, simplemente es que sepáis que aunque pongáis esta instrucción hasta que no compiléis, realmente esto no se va a ejecutar, por mucho que esté dando a este botón y esté bien establecido todo, pero vaya. 1186 01:28:13,399 --> 01:28:18,939 dudas 1187 01:28:18,939 --> 01:28:21,380 leo una que hay, el valor máximo 1188 01:28:21,380 --> 01:28:23,420 que tienes es 3, sería que la barra 1189 01:28:23,420 --> 01:28:25,319 se secciona en 3 partes 1190 01:28:25,319 --> 01:28:27,300 así que el botón de la barra 1191 01:28:27,300 --> 01:28:28,939 tiene 4 posiciones, inicio, claro 1192 01:28:28,939 --> 01:28:31,319 realmente tiene 4 1193 01:28:31,319 --> 01:28:33,119 porque tú empiezas por el 0 1194 01:28:33,119 --> 01:28:35,279 es decir, vamos aquí 1195 01:28:35,279 --> 01:28:37,439 input 1196 01:28:37,439 --> 01:28:39,779 no, input no 1197 01:28:39,779 --> 01:28:41,560 dificultad, vale, yo he cambiado 1198 01:28:41,560 --> 01:28:43,579 el slider, le he cambiado el nombre a dificultad 1199 01:28:43,579 --> 01:28:45,520 pero bueno, aquí slider 1200 01:28:45,520 --> 01:28:47,439 dificultad, que se puede cambiarlo en nombre, sin problema 1201 01:28:47,439 --> 01:28:49,500 cuando tú estableces el mínimo 1202 01:28:49,500 --> 01:28:51,640 el valor 0 y el máximo el valor 3 1203 01:28:51,640 --> 01:28:52,640 0 es un valor 1204 01:28:52,640 --> 01:28:55,380 1 es otro valor, 2 es otro valor 1205 01:28:55,380 --> 01:28:57,520 y 3 es otro valor, por tanto 1206 01:28:57,520 --> 01:28:58,479 hay 4 posiciones 1207 01:28:58,479 --> 01:29:01,920 puede ser de 0, 1, 2, 3 1208 01:29:01,920 --> 01:29:02,779 4 posiciones 1209 01:29:02,779 --> 01:29:05,880 ¿vale? lo mismo, aquí en realidad 1210 01:29:05,880 --> 01:29:08,020 en otros momentos, en una pantalla de carga 1211 01:29:08,020 --> 01:29:09,560 ¿vale? que un slider 1212 01:29:09,560 --> 01:29:11,840 puede servir para mostrar una pantalla de carga 1213 01:29:11,840 --> 01:29:13,060 mientras voy haciendo así, fijaos 1214 01:29:13,060 --> 01:29:15,380 como la bola, si en el async 1215 01:29:15,380 --> 01:29:36,880 Hay un apartado sobre los async. Va mostrándose esta carga, sirve con decimales en este caso, si no queremos que haya valores, para cargar esa barra. Si yo quitara esto del handle, black, y dejo solo el fil área, básicamente esto es una barra de carga. También puede usarse para eso. 1216 01:29:36,880 --> 01:29:39,880 vale, lo vuelvo a activar 1217 01:29:39,880 --> 01:29:42,039 pues sí, planteame 1218 01:29:42,039 --> 01:29:43,939 la duda, si nadie más dice nada 1219 01:29:43,939 --> 01:29:45,479 será que no la sé 1220 01:29:45,479 --> 01:29:47,479 vale, a ver 1221 01:29:47,479 --> 01:29:49,300 una duda así chiquitita 1222 01:29:49,300 --> 01:29:51,140 por ejemplo 1223 01:29:51,140 --> 01:29:52,699 lo que es todo el HUD 1224 01:29:52,699 --> 01:29:55,000 del sprite y de los textos 1225 01:29:55,000 --> 01:29:57,640 si no quisiéramos ponerlo en lo que es en la cámara 1226 01:29:57,640 --> 01:30:01,060 la cosa es para ponerlo 1227 01:30:01,060 --> 01:30:02,800 encima de la bola y que le siga 1228 01:30:02,800 --> 01:30:05,199 como si fuera el típico juego RPG 1229 01:30:05,199 --> 01:30:07,520 tendrías que trasladar lo que es el HUD 1230 01:30:07,520 --> 01:30:09,319 ponerlo como hijo 1231 01:30:09,319 --> 01:30:10,239 de la bola? 1232 01:30:10,979 --> 01:30:12,920 Sí, habría que hacer dos cosas 1233 01:30:12,920 --> 01:30:14,640 voy a ver... 1234 01:30:14,640 --> 01:30:17,359 Y claro, ahora que te lo estoy diciendo, claro, si lo pones 1235 01:30:17,359 --> 01:30:19,260 como hijo de la bola, cuando gira la bola 1236 01:30:19,260 --> 01:30:21,500 ¿se mantendría arriba estático 1237 01:30:21,500 --> 01:30:23,460 o giraría al eje 1238 01:30:23,460 --> 01:30:24,619 de la bola? No sé si me explico 1239 01:30:24,619 --> 01:30:26,159 Sí, voy 1240 01:30:26,159 --> 01:30:28,640 Tú ten en cuenta, y para eso está 1241 01:30:28,640 --> 01:30:30,619 esto de canvas, que tú aquí si dices que esté 1242 01:30:30,619 --> 01:30:32,359 como un overlay, va a estar como un overlay 1243 01:30:32,359 --> 01:30:34,840 ¿vale? Eso es a nivel de visionado de cámara 1244 01:30:34,840 --> 01:31:02,840 Está casi pensado para eso, para hacer interfaces a nivel de menús, pues eso, que se sobrepongan, que estén, digamos, siempre en un mismo espacio. Pero aquí hay otro render mode que es el de workspace, ¿vale? Y entonces tú, si aquí le dices que con respecto a la cámara, que la tengo aquí, le dices respecto a esta cámara, que este canvas, y veis que cuando se pasa a workspace, de pronto este canvas empieza a tener eje Z, empieza a tener otros... 1245 01:31:04,840 --> 01:31:15,319 otros a ver ahí tiene otros valores de pronto le sale la pinceta etcétera tú 1246 01:31:15,319 --> 01:31:19,840 puedes coger ahora y ese canvas y hacerlo hijo de él 1247 01:31:19,840 --> 01:31:27,920 bueno claro es que esto es un prefab habría que desempaquetar probablemente 1248 01:31:27,920 --> 01:31:30,319 no 1249 01:31:30,319 --> 01:31:45,899 Un segundín, ¿eh? Porque es lo que te digo, children of a prefab instance, ah, vale, no, es que yo, vale, el hat lo he metido como un prefab, entonces habría que liberar el prefab y meterlo como hijo de la bola. 1250 01:31:45,899 --> 01:32:01,439 Vale, entonces ahora, si yo moviera esto para que estuviera en posición con la tabla, a ver un segundín, ¿dónde está la bola? 1251 01:32:01,439 --> 01:32:15,489 Ahí está la bola, claro, es que es muy pequeño. Aquí hay que ajustar el canvas para que esté con, vamos a hacerlo más pequeñete, 1252 01:32:15,489 --> 01:32:50,899 A ver, un segundo. Esto hay que hacerlo más pequeñito y hay que colocarlo en posición. Básicamente ahora lo que pasa es que tiene unas dimensiones descomunalmente grandes. Ahora, si te fijas, tenemos ese canvas que se podría ajustar en el espacio. 1253 01:32:50,899 --> 01:33:22,460 Y si yo sigo haciendo lo más pequeño, 500, 500, ¿ves que ya van apareciendo como en el espacio? Vale, a ver, un segundo. Ahora vemos las pegadas de esto, ¿vale? ¿Ves que se está moviendo con la bola? Lo que pasa es que he movido la bola o algo así, debe ser. ¿Dónde está la bola ahora? Bueno, vale, que aquí he cambiado algo. 1254 01:33:22,460 --> 01:33:24,180 Básicamente 1255 01:33:24,180 --> 01:33:26,220 Ahora, un segundo 1256 01:33:26,220 --> 01:33:28,079 Vale 1257 01:33:28,079 --> 01:33:29,460 Vamos aquí 1258 01:33:29,460 --> 01:33:36,180 Y esto lo tengo que seguir haciendo más pequeñito 1259 01:33:36,180 --> 01:33:46,210 A ver, ¿dónde está el campeón? 1260 01:33:49,289 --> 01:33:50,369 Joder, ¿y dónde 1261 01:33:50,369 --> 01:33:55,380 Tengo yo esto? Ah, bueno 1262 01:33:55,380 --> 01:33:56,939 No sé por qué se pone ahí 1263 01:33:56,939 --> 01:33:59,260 Vale, ahí 1264 01:33:59,260 --> 01:34:01,680 Ahí lo pongo un poco más arriba 1265 01:34:01,680 --> 01:34:03,520 Habría que reajustar todo lo que hay dentro 1266 01:34:03,520 --> 01:34:05,579 De ese canvas, lo voy a hacer todavía 1267 01:34:05,579 --> 01:34:06,180 Más pequeño 1268 01:34:06,180 --> 01:34:26,180 Esto es porque también justo esta bola es muy pequeña, pero si lo colocamos ahí, habría que reconfigurar todo, pero fíjate. 1269 01:34:26,180 --> 01:34:36,619 Fíjate, bueno, claro, aquí está sucediendo la cosa de que al estar vinculado con una bola que está rotando, está rotando alrededor, ¿vale? 1270 01:34:36,640 --> 01:34:43,960 Porque está cogiendo la fuerza. Habría que, por código, decir que siguiera el transform de la bola, ¿vale? 1271 01:34:44,439 --> 01:34:53,420 Pero esto es usando el canvas, porque si te das cuenta, a ver, y un segundo, que esto me va a costar un segundo recordarlo, 1272 01:34:53,420 --> 01:35:22,239 Vale, lo lógico, esto es simplemente para que veas que los canvas, si tú los pones en el workspace y en relación a una cámara, tú básicamente este canvas es como cualquier otro elemento, y aquí de hecho lo que habría que hacer es que siguiera la bola, pero que no la siguiera como hijo, porque entonces va a rotar, porque la bola en todo momento, fíjate que yo cuando me voy moviendo, la bola va rotando, 1273 01:35:22,239 --> 01:35:24,760 Porque le estamos dando con él, entonces rota con ello. 1274 01:35:24,859 --> 01:35:26,000 Por eso hace estas cosas raras. 1275 01:35:26,739 --> 01:35:32,479 Habría que asociarlo por código que vaya cogiendo el transform position 1276 01:35:32,479 --> 01:35:37,739 y se mueva con position para que no vaya adquiriendo estas rotaciones. 1277 01:35:38,699 --> 01:35:44,180 ¿No valdría un MP object como padre y ambos dentro? 1278 01:35:44,899 --> 01:35:48,699 Sí, lo único malo es que como en este caso la bola siempre la estás rotando, 1279 01:35:49,420 --> 01:35:52,100 si lo que quieres es que se mueva con una fuerza de la bola, 1280 01:35:52,239 --> 01:35:54,039 el padre no se está moviendo. 1281 01:35:54,619 --> 01:35:55,340 ¿Sabes lo que te quiero decir? 1282 01:35:56,340 --> 01:35:58,579 Pero bueno, hay que buscar la manera de que 1283 01:35:58,579 --> 01:35:59,960 aunque la bola la movamos así, 1284 01:36:01,100 --> 01:36:02,500 que lo que vaya leyendo en todo 1285 01:36:02,500 --> 01:36:04,479 momento sea la posición de la bola 1286 01:36:04,479 --> 01:36:06,479 y no todo, ¿sabes? Que es lo que hace cuando 1287 01:36:06,479 --> 01:36:07,020 lo haces hijo. 1288 01:36:08,479 --> 01:36:10,079 Y eso por lo digo ya lo sabéis hacer. 1289 01:36:10,819 --> 01:36:12,460 Entonces, pues que... Pero te vuelvo 1290 01:36:12,460 --> 01:36:13,739 a decir, bueno, a lo que iba. 1291 01:36:14,159 --> 01:36:16,579 En 3D Objects, en vez de meter desde UI 1292 01:36:16,579 --> 01:36:18,180 los elementos de la UI, 1293 01:36:18,779 --> 01:36:20,060 que lo que hace es crear el canvas, 1294 01:36:20,060 --> 01:36:22,859 también se pueden crear como objetos 3D. 1295 01:36:23,199 --> 01:36:27,060 Entonces tú puedes ir aquí y decir que se cree un texto, 1296 01:36:27,739 --> 01:36:29,220 que si le damos aquí, por ejemplo, 1297 01:36:29,680 --> 01:36:32,680 este texto ves que no se mete por defecto dentro del canvas 1298 01:36:32,680 --> 01:36:36,079 y, sin embargo, ya está en Z. 1299 01:36:36,840 --> 01:36:41,220 Entonces, si lo que quieres cargar es un texto, por ejemplo, 1300 01:36:41,699 --> 01:36:43,699 simplemente se puede meter como un objeto. 1301 01:36:44,439 --> 01:36:46,819 O, lo digo esto porque los textos sí que es verdad 1302 01:36:46,819 --> 01:36:49,260 que son editables, etcétera, 1303 01:36:50,060 --> 01:37:02,060 Pero tú normalmente cuando quieras cargar una imagen, también lo que puedes hacer es crear un plano y como textura ponerle una imagen y ponerlo ahí, que no sería un elemento de User Interface. 1304 01:37:02,800 --> 01:37:08,239 Lo que va variando es el contenido de un texto, los números, la vida, etc. 1305 01:37:08,239 --> 01:37:22,340 Y bueno, ya te digo que puedes hacerlo con una user interface, pero si solo quieres poner el nombre del personaje, lo puedes poner con un elemento 3D, que no es el de UI, sino que es un objeto 3D de este tipo. Creo que de hecho de esto también hablo un poquillo en el tema. 1306 01:37:22,340 --> 01:37:39,699 Y luego también un plano le puedes poner una foto o un corazón, ¿vale? Es decir, si tú aquí en el material que tengas, habría que crear un nuevo material, crear un material, material, material, ¿vale? Y dices imagen, yo qué sé, el corazón. 1307 01:37:39,699 --> 01:37:53,619 Vamos a poner las vidas del corazón de esta forma, desactivo esas y lo que voy a decir es que ese material, el albedo, sea una imagen de un corazón. 1308 01:37:53,619 --> 01:38:03,000 De esto también hablaremos ya en otro momento, pero fíjate que tú ya a este plano le puedes poner un material que sea ese corazón. 1309 01:38:03,399 --> 01:38:11,800 Entonces, no, en X, evidentemente, y será menos 90, entiendo, o no, más bien 90. 1310 01:38:12,979 --> 01:38:17,720 Lo que pasa es que ahora está por el lado que no tiene que ser, pero que con esto también se podrían hacer, 1311 01:38:17,720 --> 01:38:27,960 Habría que meter un alfa para que lo capte bien, etcétera, pero que puedes meter elementos luego que en realidad son elementos 3D y nuevamente lo puedes asociar a la bola. 1312 01:38:28,479 --> 01:38:40,039 Pero bueno, con lo que hemos visto de la UI, básicamente es como te he dicho, poner que su render mode sea workspace, que básicamente es que se convierte en un objeto con su transform normal. 1313 01:38:40,039 --> 01:38:47,399 Aunque metas aquí luego los anchors y tal, en realidad aquí están sus parámetros, ¿vale? 1314 01:38:47,720 --> 01:38:49,779 vale 1315 01:38:49,779 --> 01:38:51,680 vale, vale 1316 01:38:51,680 --> 01:38:54,939 por ahí sería por donde yo tocaría