1 00:00:07,219 --> 00:00:27,899 Vamos a introducirnos ya en el mundo de la programación dentro de Unity y para eso lo haremos viendo cómo se crean los scripts, la estructura básica de un script en Unity y veremos cómo lo que habíamos visto con respecto a otros lenguajes de programación se aplica también aquí con ciertas salvedades ya que estamos en programación orientada a objetos. 2 00:00:28,640 --> 00:00:30,160 Pero vamos, los conceptos suelen ser los mismos. 3 00:00:31,280 --> 00:00:34,079 Tengo aquí un proyecto de Unity totalmente vacío, 4 00:00:34,179 --> 00:00:37,939 donde tenemos la cámara y la luz que él crea por defecto, 5 00:00:38,020 --> 00:00:41,640 así como la escena que él también crea por defecto, 6 00:00:41,700 --> 00:00:44,259 que por supuesto podemos cambiar el nombre en cualquier momento. 7 00:00:44,679 --> 00:00:47,079 La distribución de la ventana es la que a mí me gusta. 8 00:00:47,520 --> 00:00:49,979 ¿Cómo se crea un script en Unity? 9 00:00:50,520 --> 00:00:54,619 Lo primero que tenemos que saber es que los scripts tienen que estar asociados a un GameObject, 10 00:00:54,700 --> 00:00:56,100 es decir, a algo que esté en la escena. 11 00:00:56,100 --> 00:00:57,960 no en el proyecto 12 00:00:57,960 --> 00:00:59,039 eso 13 00:00:59,039 --> 00:01:02,340 recuerdo que lo que está en el proyecto 14 00:01:02,340 --> 00:01:04,000 no significa que esté en nuestra escena 15 00:01:04,000 --> 00:01:06,060 significa que está disponible para nosotros 16 00:01:06,060 --> 00:01:07,180 pero no que esté en la escena 17 00:01:07,180 --> 00:01:09,739 así que para que yo pueda 18 00:01:09,739 --> 00:01:12,519 poner un script tiene que haber algo en la escena 19 00:01:12,519 --> 00:01:14,340 veremos que luego 20 00:01:14,340 --> 00:01:15,920 el script queda asociado a ese GameObject 21 00:01:15,920 --> 00:01:18,219 y que cuando llamemos a sí mismo 22 00:01:18,219 --> 00:01:20,099 lo que estamos llamando es al propio GameObject 23 00:01:20,099 --> 00:01:21,359 que lo contiene 24 00:01:21,359 --> 00:01:22,659 voy a poner un ejemplo 25 00:01:22,659 --> 00:01:25,420 voy a añadir un cubo 26 00:01:26,219 --> 00:01:31,540 Apunte. Si en un momento dado queremos crear scripts pero no queremos crear GameObjects en la escena, 27 00:01:31,700 --> 00:01:37,120 pues para eso existe dentro de GameObjects la opción de crear un objeto vacío. 28 00:01:38,060 --> 00:01:40,780 De hecho tiene su atajo porque es algo que usaremos bastante a menudo. 29 00:01:41,040 --> 00:01:44,959 Cada vez que queremos crear algo en la escena pero que no tiene contenido, 30 00:01:44,959 --> 00:01:52,000 pues creamos un objeto vacío, no solo para crear scripts sino también para ponerle elementos jerárquicamente. 31 00:01:52,159 --> 00:01:53,939 Hay varias formas para añadir scripts. 32 00:01:53,939 --> 00:02:03,219 Pues la primera, quizá la más rápida, si quiero asociar ese script a este GameObject es directamente aquí en el botón de Add Component, pues lo pinchamos. 33 00:02:03,659 --> 00:02:13,939 Si es la primera vez que lo abrimos nos saldrá este desplegable y ahí es donde yo os diría a la opción de New Script y escribir aquí el nombre del complemento 34 00:02:14,539 --> 00:02:20,539 o incluso si empezamos ya a escribir, pues C Sharp, pues ahí incluso reconoce que lo que queremos añadir es un nuevo script. 35 00:02:20,539 --> 00:02:27,879 Lo añadimos y como podemos ver, muy importante, he añadido el archivo a mis assets, lo he 36 00:02:27,879 --> 00:02:31,680 añadido también a mi disco duro y ya está disponible para nosotros y está, como podéis 37 00:02:31,680 --> 00:02:36,419 ver, aquí vinculado en el inspector como un componente más de nuestro GameObject. 38 00:02:36,560 --> 00:02:43,439 Voy a ir a mis assets y le voy a crear una carpeta, le voy a llamar scripts y este que 39 00:02:43,439 --> 00:02:45,300 he creado lo rastro aquí. 40 00:02:47,550 --> 00:02:49,189 Igual ocurrirá también en el disco duro. 41 00:02:49,189 --> 00:03:02,349 ¿Otra forma de crear scripts? Pues nos podemos ir directamente a la carpeta donde yo quiero crearlo y darle con el botón derecho crear y nos aparecerá, como podéis ver, una de las primeras opciones, un script en C Sharp. 42 00:03:04,009 --> 00:03:16,169 La diferencia es que ahora mismo este script no está asociado con ningún GameObject. ¿Quiero asociarlo? Pues yo puedo, por ejemplo, para que veamos qué es la diferencia, yo puedo crear una esfera. 43 00:03:16,169 --> 00:03:20,449 tengo la escena seleccionada, con lo cual la tengo en el inspector 44 00:03:20,449 --> 00:03:25,009 e igual que algo con los demás componentes puedo arrastrar 45 00:03:25,009 --> 00:03:28,110 cuidado, tenemos que pinchar y arrastrar, porque si pinchamos en el script 46 00:03:28,110 --> 00:03:32,909 pues lógicamente dejamos de seleccionar la esfera, pero si pinchamos la esfera y cogemos 47 00:03:32,909 --> 00:03:36,990 el script y lo arrastramos al inspector 48 00:03:36,990 --> 00:03:40,610 pues de nuevo también queda vinculado 49 00:03:40,610 --> 00:03:44,669 ¿Cómo editarlos? De nuevo, podemos editarlo con cualquier programa 50 00:03:44,669 --> 00:03:54,490 No dejan de ser archivos de texto plano disponibles en nuestro disco duro, pero lo normal es asociarlos con un programa que edite los scripts. 51 00:03:54,810 --> 00:04:09,740 De hecho, en Unity, si nos vamos a las preferencias, en External Tools, veremos que podemos seleccionar qué editor externo queremos que utilice para nuestros scripts. 52 00:04:09,840 --> 00:04:15,659 Por ejemplo, yo aquí tengo el Visual Studio, que es el que uso para editar mis scripts en Unity. 53 00:04:15,659 --> 00:04:28,759 Yo, por ejemplo, si me dirijo a mi script que está aquí en el inspector, si me voy a este menú contextual que aparece aquí, le puedo dar y decirle que edite el script. 54 00:04:28,939 --> 00:04:31,800 Y entonces se me abrirá el programa que tengo vinculado con los scripts. 55 00:04:32,240 --> 00:04:39,300 Es lo mismo que si le doy un doble clic al propio script en la ventana de proyecto y se me abre en mi programa. 56 00:04:39,660 --> 00:04:44,360 Analizo brevemente la estructura del script porque veremos que no se ha creado vacío, sino que ya directamente tiene algo. 57 00:04:44,360 --> 00:04:46,300 Lo comento de pasada. 58 00:04:46,300 --> 00:04:51,160 Como podemos ver, lo primero que nos llama la atención es que, como ya digo, no está vacío. 59 00:04:51,740 --> 00:04:57,199 Él automáticamente ha cargado unas librerías, que lógicamente no debemos cambiar, salvo que sepamos lo que estamos haciendo. 60 00:04:57,600 --> 00:05:03,459 Al contrario, llegará un momento en el que tendremos que añadir nuevas librerías para usar ciertas funcionalidades que no vienen por defecto. 61 00:05:04,079 --> 00:05:09,920 Vemos que ha creado una clase, ya en otro momento veremos lo que es la programación orientada a objetos y el concepto de clase, 62 00:05:10,560 --> 00:05:13,860 que tendrá el nombre del archivo que hemos creado. 63 00:05:13,860 --> 00:05:24,680 Esto es una clase heredada, hablaremos de ello cuando también hablemos de programación orientada a objetos, de nuevo no tenemos que tocarlo porque eso es lo que nos permite usar todas las funcionalidades, los métodos y las clases incorporadas en Unity. 64 00:05:25,779 --> 00:05:35,680 Y estos son dos métodos, acordémonos que en programación orientada a objetos a lo que normalmente se le llama funciones, pues aquí lo llaman métodos, son dos métodos que vienen ya por defectos. 65 00:05:35,680 --> 00:05:44,819 ¿Qué significa? Este, como bien indica aquí en los comentarios, se ejecutará cuando lance el juego 66 00:05:44,819 --> 00:05:46,319 Es decir, una vez 67 00:05:46,319 --> 00:05:53,620 Y sin embargo, este se ejecutará, es decir, lo que hay adentro se ejecutará una vez por fotograma 68 00:05:53,620 --> 00:05:58,339 ¿Qué significa? Que si estamos trabajando o el juego está a 48 fotogramas por segundo 69 00:05:58,339 --> 00:06:02,279 Pues esto será como una especie de bucle que se ejecutará 48 veces por segundo 70 00:06:02,279 --> 00:06:07,459 Así que bueno, lo encontraremos la utilidad, pero yo ahora para lo que me interesa lo voy a borrar 71 00:06:07,459 --> 00:06:13,120 porque estos son métodos que no son necesarios si no los vamos a usar, es decir, que los podemos borrar y no pasa nada. 72 00:06:13,759 --> 00:06:18,019 El de Start sí lo necesito porque quiero que se lance algo cuando ya lance el juego. 73 00:06:18,620 --> 00:06:28,300 Para empezar, como buena programación orientada a objetos, en C Sharp lo primero que le tenemos que decir es las variables que voy a usar 74 00:06:28,300 --> 00:06:30,000 y el ámbito de las variables 75 00:06:30,000 --> 00:06:32,339 y qué tipo de variables van a ser 76 00:06:32,339 --> 00:06:35,360 es decir, que si yo creo una variable 77 00:06:35,360 --> 00:06:36,779 por ejemplo, que solo quiero 78 00:06:36,779 --> 00:06:38,639 que esté disponible en mi 79 00:06:38,639 --> 00:06:40,339 clase 80 00:06:40,339 --> 00:06:42,939 lo llamo privado 81 00:06:42,939 --> 00:06:45,339 ahí tengo que decir que si no le decimos nada 82 00:06:45,339 --> 00:06:46,360 él entenderá que es privado 83 00:06:46,360 --> 00:06:49,259 luego, le tengo que decir qué tipo de 84 00:06:49,259 --> 00:06:51,339 variable es, si es una cadena 85 00:06:51,339 --> 00:06:52,720 de texto, por ejemplo, pues le diré 86 00:06:52,720 --> 00:06:53,420 que es 87 00:06:53,420 --> 00:06:56,519 un string 88 00:06:56,519 --> 00:06:59,060 y a continuación el nombre de la variable 89 00:06:59,060 --> 00:07:01,639 por ejemplo le voy a llamar myString 90 00:07:01,639 --> 00:07:04,959 y ya está, con esto he declarado la variable 91 00:07:04,959 --> 00:07:08,199 quiero que ya asignarle un valor 92 00:07:08,199 --> 00:07:09,379 pues como en cualquier otro lenguaje 93 00:07:09,379 --> 00:07:10,560 también si yo ya sé el valor 94 00:07:10,560 --> 00:07:12,480 se lo puedo asignar al mismo tiempo que lo creo 95 00:07:12,480 --> 00:07:16,470 por ejemplo, hola mundo 96 00:07:16,470 --> 00:07:19,449 bien, algo que tenemos que saber 97 00:07:19,449 --> 00:07:22,069 es que aunque yo he creado ahora mismo 98 00:07:22,069 --> 00:07:24,709 una variable que está disponible en mi clase 99 00:07:24,709 --> 00:07:26,649 yo no puedo llamarla cuando quiera 100 00:07:26,649 --> 00:07:35,050 De hecho, si yo intento aquí utilizar esta variable, veremos que me da error. 101 00:07:37,790 --> 00:07:43,610 Directamente el propio programa me dice que esta variable no existe en el contexto actual. 102 00:07:45,069 --> 00:07:47,129 Y la acabamos de declarar justo encima. 103 00:07:47,829 --> 00:07:48,810 ¿Qué nos está diciendo aquí? 104 00:07:49,110 --> 00:07:54,089 Nos está diciendo realmente que tiene que estar dentro de un método, que no lo podemos usar en el RAID. 105 00:07:54,089 --> 00:07:58,850 así que de hecho si nos vamos a cualquier método como este que ya está 106 00:07:58,850 --> 00:08:07,420 creado y aquí si le digo que mi variable tiene otro valor como 107 00:08:07,420 --> 00:08:12,519 podemos ver aquí no nos da error vamos a probar a mandarlo con sólo se manda 108 00:08:12,519 --> 00:08:18,879 consola en unity de nuevo tenemos que estar dentro de un método no lo puedo 109 00:08:18,879 --> 00:08:24,300 hablar no puedo llamar a la función de consola aquí tiene que ser por ejemplo 110 00:08:24,300 --> 00:08:27,540 en la función Start, en el método Start. 111 00:08:28,079 --> 00:08:30,019 Y aquí, por ejemplo, le voy a mandar a la consola. 112 00:08:30,100 --> 00:08:31,860 ¿Cómo se manda a la consola? Pues tenemos varias opciones. 113 00:08:32,039 --> 00:08:40,840 Podemos mandarlo usando el sistema debug log y entre paréntesis lo que queremos mandar. 114 00:08:41,440 --> 00:08:42,340 Me voy a mi Unity. 115 00:08:44,179 --> 00:08:47,879 Tengo muy importante abierta la consola para poder verlo. 116 00:08:49,200 --> 00:08:52,259 Hay varias funciones aquí. Una de ellas muy interesante es la de clear on play, 117 00:08:52,259 --> 00:08:57,440 que significa que cada vez que lance el Play de Unity me limpia la consola 118 00:08:57,440 --> 00:09:00,659 y así no tengo ahí líneas de código que molesten. 119 00:09:01,100 --> 00:09:06,519 Pero si yo lanzo el Play, recuerdo, aquí lo doy y automáticamente en la consola 120 00:09:06,519 --> 00:09:09,100 vemos que efectivamente me saluda. 121 00:09:10,220 --> 00:09:10,919 Vale, paro. 122 00:09:12,419 --> 00:09:17,899 Otra forma de comunicarme con la consola es utilizando la opción Print. 123 00:09:20,059 --> 00:09:21,080 El efecto es el mismo. 124 00:09:21,080 --> 00:09:25,139 vemos que aquí me ha saltado algún aviso pero es temporal 125 00:09:25,139 --> 00:09:31,220 de hecho las alertas que tenga pueden ser o bien alertas tipo warning 126 00:09:31,220 --> 00:09:37,000 es decir que no impiden que se ejecute el script pero que debemos prestarle atención 127 00:09:37,000 --> 00:09:42,159 pero si aparece una alerta de tipo rojo significa que el script no se podrá ejecutar 128 00:09:42,159 --> 00:09:43,120 ahora probaremos alguna 129 00:09:43,120 --> 00:09:48,320 pero si le doy el play como he dicho se limpia la consola y efectivamente me lo lanza igualmente 130 00:09:48,320 --> 00:10:01,899 Pues ya a estas alturas, por ejemplo, podemos, para ver cómo funciona, decirle, oye, pues cuando se lance el script, mándame a consola la variable myString y luego vuélvemelo a mandar, pero con el cambio de valor. 131 00:10:02,940 --> 00:10:16,840 Algo que no he comentado, pero que veremos, que habremos notado, es que yo cada vez que le doy a guardar, por ejemplo, ahora le doy a guardar el script, automáticamente Unity se quedará pensando y actualiza el script. 132 00:10:18,320 --> 00:10:25,139 Es más, ahora si le lanzo al Play, pues vemos que me saluda y luego ha cambiado de valor.