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