1 00:00:07,219 --> 00:00:15,919 Bien, ya tengo el sprite ubicado en la zona de mi pantalla donde yo quiero, utilizando el RedTransform, los puntos de anclaje y bueno. 2 00:00:16,300 --> 00:00:26,160 Lo que ocurre es que yo quiero cambiar esa imagen en función de cómo se está desarrollando mi juego, es decir, que pase de tres vidas a dos a uno y finalmente me muera. 3 00:00:27,079 --> 00:00:29,260 Eso, lógicamente, lo vamos a hacer por código. 4 00:00:29,260 --> 00:00:48,679 Y para ello voy a crear un script, en este caso lo he llamado Canvas Manager, y lo voy a asociar al canvas, que realmente podría asociarlo incluso a un empty object, no hay ninguna limitación, pero bueno, como a lo mejor a través de este script voy a gestionar no solo la imagen, sino los botones y demás, pues me gusta tenerlo vinculado al canvas. 5 00:00:48,679 --> 00:00:56,000 lo abro bien antes que nada siempre recordad que cuando vamos a hacer algo referente a la 6 00:00:56,000 --> 00:01:01,340 user interface pues necesitamos la librería unity engine y ahora que la tengo pues tengo 7 00:01:01,340 --> 00:01:06,680 acceso a elementos del user interface y veremos que cambiar el sprite vinculado a una imagen es 8 00:01:06,680 --> 00:01:11,480 realmente sencillo para eso solo tengo que crear una variable de tipo serializada para poder 9 00:01:11,480 --> 00:01:18,519 acceder a ella desde Unity, de tipo imagen, image, que va a contener la imagen que está 10 00:01:18,519 --> 00:01:33,640 en nuestro canvas. Le voy a llamar lives image y otra variable de tipo sprite que va a tener 11 00:01:33,640 --> 00:01:38,640 vinculado los sprites que yo voy a asociar a esa imagen. Le voy a llamar, por ejemplo, 12 00:01:38,879 --> 00:01:46,780 lives sprite. Y ahora si me vuelvo a Unity, efectivamente me está pidiendo una variable 13 00:01:46,780 --> 00:01:50,680 de tipo imagen y una variable de tipo sprite, pues muy bien, se la damos 14 00:01:50,680 --> 00:01:54,799 la imagen la tengo aquí en el canvas, se llama image porque no le he cambiado el nombre 15 00:01:54,799 --> 00:01:58,260 recomiendo ponerles nombres que sean identificativos, pero bueno 16 00:01:58,260 --> 00:02:02,780 así que la variable de tipo imagen tiene 17 00:02:02,780 --> 00:02:06,959 mi imagen del canvas y la variable de tipo sprite 18 00:02:06,959 --> 00:02:10,960 va a tener el sprite que yo voy a poner en esa imagen, para comprobarlo voy a poner 19 00:02:10,960 --> 00:02:14,879 ahora mismo, por ejemplo, esta, que es la de 20 00:02:14,879 --> 00:02:23,020 en la que sólo queda una vida. Así que cojo ese sprite y lo paso a esa variable. 21 00:02:23,020 --> 00:02:27,740 Y en el código podemos decirle que la variable que contiene la imagen, en este 22 00:02:27,740 --> 00:02:35,789 caso livesImage, uno de sus atributos es el sprite. Y le podemos decir que el 23 00:02:35,789 --> 00:02:40,229 sprite que contiene esa imagen es igual a la variable que yo he creado para tal 24 00:02:40,229 --> 00:02:45,189 efecto, que se llama livesSprite. Esto que 25 00:02:45,189 --> 00:02:50,729 significa que en cuanto le dé al play al juego cambiará el sprite de mi imagen 26 00:02:50,729 --> 00:02:56,129 ahí está lógicamente esto no tiene ninguna utilidad lo útil es que esa 27 00:02:56,129 --> 00:03:00,650 imagen vaya cambiando en función de las vidas que tengo vamos a probarlo voy a 28 00:03:00,650 --> 00:03:07,319 crear una variable también serializada de tipo número entero porque son las 29 00:03:07,319 --> 00:03:12,080 vidas que tengo y le voy a llamar lives por ejemplo y ahora 30 00:03:12,080 --> 00:03:25,639 Esto que voy a hacer no lo recomiendo, solo lo voy a hacer ahora como ejemplo, pero luego veremos que hay una forma mucho mejor de hacerlo, que es, lo voy a meter en el método update, con lo cual va a estar en cada fotograma actualizando la imagen. 31 00:03:27,300 --> 00:03:36,580 Pero, en vez de ponerle con una, voy a tener tres sprites. Uno por cada sprite que he creado a partir de esa hoja de sprites. 32 00:03:36,580 --> 00:03:53,620 Y ahora tengo que hacer un pequeño paréntesis porque yo ahora mismo podría crear tres variables de sprites, uno vinculado con el de tres vidas, el de dos y el de una, y hacerle un if en mi update y decirle si tengo tres vidas pon el sprite tres, si tengo dos vidas ponme el sprite dos. 33 00:03:53,620 --> 00:04:00,020 Pero a estas alturas ya tenemos que saber que existe una variable maravillosa que nos permite hacer eso, que es un array. 34 00:04:00,379 --> 00:04:11,280 Un array, recordemos, es una lista, una lista de variables, lo que nos permite en una sola variable contener múltiples variables, del tipo que sea, por ejemplo, del tipo sprite. 35 00:04:11,659 --> 00:04:14,740 Yo ahora mismo había creado una variable de tipo sprite. 36 00:04:15,199 --> 00:04:19,920 Pues ahora le voy a decir que esa variable de tipo sprite es un array. 37 00:04:19,920 --> 00:04:25,420 os recuerdo que para decirle que esto es un array sólo tenemos que ponerle unos corchetes lo único 38 00:04:25,420 --> 00:04:31,740 que ahora cuando le decimos que a la imagen le ponga un sprite cual este esto ya no es una 39 00:04:31,740 --> 00:04:37,319 variable normal en la que entre corchetes también le tenemos que decir qué elemento del array es 40 00:04:37,319 --> 00:04:42,680 decir qué clave si ese elemento 0 el 1 el 2 de acuerdo entonces le voy a decir que sea el 41 00:04:42,680 --> 00:04:49,160 elemento 0 por ejemplo es decir el primer elemento del array y si nos fijamos ahora efectivamente el 42 00:04:49,160 --> 00:04:53,360 El lives sprite ya no es una variable, sino que es un array y de hecho me pide cuántos elementos tiene. 43 00:04:53,500 --> 00:04:54,279 Pues le voy a dar tres. 44 00:04:54,920 --> 00:04:58,100 Y si lo despliego, efectivamente me permite poner tres sprites. 45 00:04:58,519 --> 00:05:03,519 Que este es uno, que este es otro, que este es otro. 46 00:05:04,439 --> 00:05:11,500 Con lo cual, ahora mismo, el elemento cero se corresponde con el sprite que aquí se llama lives cero, que concretamente es ese. 47 00:05:11,500 --> 00:05:15,079 Pero, ¿qué pasa si yo le digo, por ejemplo, que ponga el elemento uno del array? 48 00:05:15,740 --> 00:05:18,920 Pues pondrá el elemento uno, que concretamente es este. 49 00:05:19,160 --> 00:05:20,879 Es decir, ese. 50 00:05:21,480 --> 00:05:22,399 Vamos a ver si funciona. 51 00:05:23,839 --> 00:05:24,300 Ahí está. 52 00:05:26,040 --> 00:05:31,300 Parémonos a pensar que ahora mismo va a poner el elemento del array que yo le diga. 53 00:05:31,300 --> 00:05:34,939 Y es un buen momento para ser un poco, vamos a decir, pícaros. 54 00:05:35,399 --> 00:05:38,860 Y sabemos que vamos a tener tres vidas, dos vidas, una vida. 55 00:05:39,579 --> 00:05:45,379 Pues yo puedo, digamos, hackear un poco el array para que el elemento 3 se corresponda con las tres vidas, 56 00:05:45,540 --> 00:05:48,740 el elemento 2 con las dos vidas y el elemento 1 con una vida. 57 00:05:48,740 --> 00:06:19,879 Y eso me permitirá que en función de las vidas que yo tengo, que ponga el elemento correcto, que ponga el sprite adecuado. ¿Cómo lo conseguimos? Bueno, haciendo una pequeña trampa, aunque no me gusta llamarlo así, pero si yo en mi array de vidas le digo que en vez de tres elementos tenga cuatro y el elemento tres se corresponde con la imagen que tiene tres corazones, el elemento dos se corresponde con la imagen que tiene dos corazones y el elemento uno se corresponde con la imagen que tiene un corazón, 58 00:06:19,879 --> 00:06:22,399 el elemento 0 le digo que vacío 59 00:06:22,399 --> 00:06:23,899 incluso le puedo decir 60 00:06:23,899 --> 00:06:26,500 uno de los placeholder que utiliza 61 00:06:26,500 --> 00:06:28,439 Unity 62 00:06:28,439 --> 00:06:30,300 da igual porque no lo voy a usar 63 00:06:30,300 --> 00:06:32,560 porque en cuanto tenga 0 vidas no cambiaré la imagen 64 00:06:32,560 --> 00:06:34,759 sino que directamente me saldré de la pantalla 65 00:06:34,759 --> 00:06:37,100 ¿y esto que nos permite ahora mismo? 66 00:06:37,519 --> 00:06:38,899 pues nos permite que si yo me voy 67 00:06:38,899 --> 00:06:40,339 al script donde cambiaba 68 00:06:40,339 --> 00:06:43,139 la imagen por el elemento del array 69 00:06:43,139 --> 00:06:44,899 pues ese elemento 70 00:06:44,899 --> 00:06:46,959 del array ahora se corresponde directamente 71 00:06:46,959 --> 00:06:48,819 con mi variable vidas 72 00:06:48,819 --> 00:06:52,259 Es decir, que le puedo poner aquí directamente la variable lives. 73 00:06:53,779 --> 00:06:58,980 Y así cuando tenga tres, habrá tres corazones. Cuando tenga dos, habrá dos. Y cuando uno, uno. 74 00:06:59,500 --> 00:07:04,220 Vamos a comprobarlo. Me sale el placeholder. ¿Por qué? Pues porque de momento no tengo ninguna vida. 75 00:07:04,420 --> 00:07:10,379 Me voy a ir al script donde yo le digo las vidas que tengo y le voy a decir aquí que tengo tres. 76 00:07:11,160 --> 00:07:13,579 Y ahí aparece. Pues le voy a decir ahora que tengo dos. 77 00:07:15,060 --> 00:07:17,420 Y paso a dos vidas. Le voy a decir que tengo una. 78 00:07:17,420 --> 00:07:21,860 ahora, esto se produce porque lo he metido en el método update 79 00:07:21,860 --> 00:07:24,959 lógicamente eso no es lo correcto 80 00:07:24,959 --> 00:07:26,959 lo correcto es que a vez que me muera 81 00:07:26,959 --> 00:07:30,759 llame a una función que actualice el sprite 82 00:07:30,759 --> 00:07:32,180 y que haga las cosas necesarias