1 00:00:05,870 --> 00:00:12,769 Vamos a ver uno de los elementos más útiles y que más utilizaremos a lo largo del curso 2 00:00:12,769 --> 00:00:17,710 y que, de hecho, si aprendemos su verdadera potencialidad, pues le sacaremos mucho partido. 3 00:00:18,109 --> 00:00:22,809 Bien, para ello voy a coger una escena vacía y voy a crear algunos elementos al azar, 4 00:00:22,949 --> 00:00:26,989 como por ejemplo un cubo, una esfera, la voy a poner un poquito más arriba, 5 00:00:27,589 --> 00:00:32,149 incluso la voy a escalar para que sea un poquito más pequeña, un cilindro también. 6 00:00:32,149 --> 00:00:37,170 Voy a escalar. Entonces, como podemos ver aquí, en mi ventana de jerarquía, pues tengo tres elementos. 7 00:00:37,509 --> 00:00:43,390 Y vamos a exponer que un elemento prefabricado va a contener muchos elementos dentro, siguiendo su propia jerarquía. 8 00:00:43,530 --> 00:00:49,509 Para entenderlo, pues he creado esas tres, en las que, por ejemplo, la esfera depende del cubo y a su vez el cilindro depende de la esfera. 9 00:00:49,750 --> 00:00:55,829 Así que, bueno, usamos lo que ya conocemos como la jerarquía, de forma que si yo desplazo el cubo, pues lógicamente todo lo demás se desplaza. 10 00:00:56,490 --> 00:00:59,469 Bueno, esto es solo un ejemplo para ver que realmente cuando creamos un prefabricado 11 00:00:59,469 --> 00:01:01,630 lo podemos crear tan complejo como queramos. 12 00:01:02,170 --> 00:01:06,269 Pues ahora mismo, si este elemento con sus hijos que están debajo 13 00:01:06,269 --> 00:01:09,709 lo arrastro a mi ventana de proyecto, que la tengo aquí debajo yo, 14 00:01:09,829 --> 00:01:10,930 en mi disposición de las ventanas, 15 00:01:12,390 --> 00:01:14,730 veremos automáticamente que aparece un elemento con el mismo nombre 16 00:01:14,730 --> 00:01:16,250 y con un iconito que es azul. 17 00:01:16,349 --> 00:01:18,689 ¿Qué significa? Que a partir de este momento es un prefab. 18 00:01:18,689 --> 00:01:22,390 De hecho, el elemento que teníamos en el escenario también ha cambiado su icono 19 00:01:22,390 --> 00:01:23,930 indicando que es un prefab. 20 00:01:23,930 --> 00:01:26,890 e incluso la ventana del inspector, veremos que ha cambiado 21 00:01:26,890 --> 00:01:28,849 y ahora aparece este menú 22 00:01:28,849 --> 00:01:30,890 y aparte de algunas cositas más que en elementos 23 00:01:30,890 --> 00:01:32,329 o en GameObjects normales no aparecen 24 00:01:32,329 --> 00:01:35,269 pues bueno, también indicando que es un prefabricado 25 00:01:35,269 --> 00:01:36,750 normalmente cuando hacemos esto 26 00:01:36,750 --> 00:01:38,730 el GameObject que teníamos en la escena 27 00:01:38,730 --> 00:01:40,030 lo podemos borrar directamente 28 00:01:40,030 --> 00:01:42,730 porque ya lo tenemos aquí 29 00:01:42,730 --> 00:01:44,930 y vemos ahí la apariencia que tiene 30 00:01:44,930 --> 00:01:46,310 y de hecho yo lo puedo llevar 31 00:01:46,310 --> 00:01:48,870 y esta es la potencia o la verdaderamente útil 32 00:01:48,870 --> 00:01:50,430 de un prefabricado, es que si yo lo traigo a la escena 33 00:01:50,430 --> 00:01:52,329 pues aparecerá 34 00:01:52,329 --> 00:02:18,210 Y si lo traigo a la escena, pues también. Y si lo traigo a la escena, pues también. Y lo puedo traer a la escena tantas veces como yo necesite. Ahí tenemos lo que se llaman instancias del prefabricado. ¿Y dónde está lo realmente útil? Pues que yo, si me voy a mi prefabricado original, que lo tengo aquí en mi proyecto, y lo modifico, voy a darle aquí a Open Prefab, vemos que automáticamente la ventana de escena, ya no estoy en la escena, sino que estoy editando ese prefabricado. 35 00:02:18,210 --> 00:02:23,610 Y aquí tengo acceso a los elementos primitivos de los que se compone el prefabricado. 36 00:02:23,669 --> 00:02:25,650 Ahí lo tenemos, igual que los había creado anteriormente en la escena. 37 00:02:26,530 --> 00:02:32,669 Eso significa que si en un momento dado veo que, por ejemplo, este cilindro lo necesito un poquito más arriba, 38 00:02:33,069 --> 00:02:42,550 o esta esfera la necesito un poco más ancha, y este cubo lo necesito también a lo mejor más ancho, 39 00:02:42,930 --> 00:02:46,030 lógicamente al modificar uno se modifican todos porque son hijos. 40 00:02:46,030 --> 00:02:48,449 Es decir, vamos a suponer que esto era exactamente lo que yo quería. 41 00:02:48,669 --> 00:02:49,729 Me voy a volver otra vez a la escena. 42 00:02:50,650 --> 00:02:52,569 Si nos fijamos, todos se han modificado. 43 00:02:52,629 --> 00:02:58,449 Vayamos más allá y entendamos que el prefab no solo puede albergar game objects o objetos en 3D, 44 00:02:58,530 --> 00:02:59,909 es que también puede albergar scripts. 45 00:03:00,770 --> 00:03:05,849 Ejemplo, vamos a hacer un prefabricado que se desplace de forma continua en uno de los ejes 46 00:03:05,849 --> 00:03:10,610 y veremos cómo automáticamente cualquier instancia que cree de ese prefab también se desplazará. 47 00:03:10,610 --> 00:03:15,889 Y para ello voy a crear un script, por ejemplo, prefab move. 48 00:03:16,689 --> 00:03:21,610 Si yo le doy también un doble clic al prefab que tengo en el proyecto, se me abrirá, como podemos ver ahí, 49 00:03:22,430 --> 00:03:27,810 y aparte de sus elementos, pues tiene por supuesto sus componentes, todos los que yo quiera, entre ellos, por supuesto, los scripts. 50 00:03:28,409 --> 00:03:34,090 Y si yo a partir de ahora escribo cualquier script, se aplicará al prefab original y a todas las instancias que cree. 51 00:03:34,469 --> 00:03:39,150 Es decir, que si yo le hago que se mueva de forma permanente, pues todas las instancias se moverán de forma permanente. 52 00:03:39,150 --> 00:03:49,189 De hecho, si yo ahora en mi prefab le aplico el método transform translate, vamos a utilizar un vector 3. 53 00:03:49,590 --> 00:03:55,409 Si le decimos que utiliza alguno de sus métodos, encontraremos que tiene métodos como left, como down, como up. 54 00:03:55,689 --> 00:03:56,770 Le voy a decir que se mueve hacia la izquierda. 55 00:03:57,569 --> 00:04:04,449 Por supuesto, esto, si queremos que sea del todo preciso, deberíamos multiplicarlo por time delta time 56 00:04:04,449 --> 00:04:10,210 para que el movimiento sea independiente del número de fotogramas por segundo que se está 57 00:04:10,210 --> 00:04:13,729 ejecutando el juego. Me vuelvo otra vez a la escena. Recuerdo que para volver del prefab a la escena 58 00:04:13,729 --> 00:04:17,470 lo tenemos aquí a la izquierda. Voy a la escena y creo una instancia de mi objeto. 59 00:04:18,990 --> 00:04:26,189 Voy a mover un poquito para arriba y le voy a dar a play. Y ahí lo tenemos, desplazándose el objeto. 60 00:04:27,509 --> 00:04:31,029 Es un buen momento, ya que estamos, para ser también del todo precisos, no puedo evitar 61 00:04:31,029 --> 00:04:36,170 crear una variable a la que pueda tener acceso desde Unity 62 00:04:36,170 --> 00:04:39,050 que sea de tipo float, que se llame speed 63 00:04:39,050 --> 00:04:42,410 y cuyo valor inicial sea a lo mejor 10 64 00:04:42,410 --> 00:04:44,670 por supuesto con una F para indicar que es un float 65 00:04:44,670 --> 00:04:48,269 y este vector 3 que movía hacia la izquierda 66 00:04:48,269 --> 00:04:50,949 y que multiplicaba por delta time, pues a su vez también lo voy a multiplicar 67 00:04:50,949 --> 00:04:52,569 por la velocidad 68 00:04:52,569 --> 00:04:56,430 de forma que ahora mismo tengo un desplazamiento del objeto 69 00:04:56,430 --> 00:04:59,670 pues aparte de que se moverá más rápido, también puedo controlar su velocidad 70 00:04:59,670 --> 00:05:00,990 a través del parámetro este 71 00:05:00,990 --> 00:05:02,949 incluso que se me haga hacia atrás 72 00:05:02,949 --> 00:05:05,529 ya tengo un prefab 73 00:05:05,529 --> 00:05:07,629 pero tenemos que recordar siempre que 74 00:05:07,629 --> 00:05:08,089 esto 75 00:05:08,089 --> 00:05:10,050 que tenemos aquí 76 00:05:10,050 --> 00:05:13,769 es una instancia del prefab 77 00:05:13,769 --> 00:05:15,430 que tenemos en nuestro proyecto 78 00:05:15,430 --> 00:05:17,310 ¿y qué hemos aprendido? que podemos instanciarlo 79 00:05:17,310 --> 00:05:18,689 tantas veces como queramos 80 00:05:18,689 --> 00:05:21,509 y que todas las instancias 81 00:05:21,509 --> 00:05:23,569 tienen ese script asociado, es decir, que si le doy 82 00:05:23,569 --> 00:05:24,389 al play, todos 83 00:05:24,389 --> 00:05:27,689 los prefabs se moverán 84 00:05:27,689 --> 00:05:28,129 ahí están 85 00:05:28,129 --> 00:05:31,769 esto es interesante porque si nos fijamos 86 00:05:31,769 --> 00:05:36,089 cada una de estas instancias tiene el script asociado 87 00:05:36,089 --> 00:05:39,470 pero yo en cada una de ellas le puedo cambiar el parámetro 88 00:05:39,470 --> 00:05:46,750 de velocidad y eso significa que se moverán 89 00:05:46,750 --> 00:05:51,920 a distinta velocidad cada uno, ahí está, si nos fijamos 90 00:05:51,920 --> 00:05:55,759 en las instancias que hemos creado de este prefab, veremos aquí arriba a la derecha una opción 91 00:05:55,759 --> 00:05:59,360 que cuando aplicamos algún cambio, en este caso hemos aplicado un cambio 92 00:05:59,360 --> 00:06:01,740 al parámetro de velocidad, pero bueno, podríamos aplicar 93 00:06:01,740 --> 00:06:03,899 cambios a cualquiera de sus componentes 94 00:06:03,899 --> 00:06:05,319 pues bien, si venimos aquí 95 00:06:05,319 --> 00:06:06,759 donde pone Verides 96 00:06:06,759 --> 00:06:08,660 pues aplicará ese cambio 97 00:06:08,660 --> 00:06:12,019 a el prefab original 98 00:06:12,019 --> 00:06:14,000 como podemos ver, lo vamos a comprar otra vez 99 00:06:14,000 --> 00:06:15,860 voy a seleccionar cualquiera de las 6 instancias 100 00:06:15,860 --> 00:06:17,019 le voy a cambiar la velocidad 101 00:06:17,019 --> 00:06:18,819 a 6 102 00:06:18,819 --> 00:06:21,920 él automáticamente me detecta que ha habido un cambio 103 00:06:21,920 --> 00:06:22,980 en este caso en el script 104 00:06:22,980 --> 00:06:25,620 le digo que aplique esos cambios 105 00:06:25,620 --> 00:06:26,920 al prefab 106 00:06:26,920 --> 00:06:29,160 y si me voy efectivamente al prefab original 107 00:06:29,160 --> 00:06:31,579 veremos que efectivamente ahora tiene una velocidad de 6.