Saltar navegación

Activa JavaScript para disfrutar de los vídeos de la Mediateca.

Introducción a Unity. Mover objetos (parte 1) - Contenido educativo

Ajuste de pantalla

El ajuste de pantalla se aprecia al ver el vídeo en pantalla completa. Elige la presentación que más te guste:

Subido el 14 de septiembre de 2021 por Alvaro H.

183 visualizaciones

Aplicaremos conceptos como el uso de vectores o el componente Transform para desplazar objetos por nuestro escenario

Descargar la transcripción

Hay muchas formas de mover un objeto. Vamos a ver hoy la más sencilla porque me permite introducir otros conceptos como el de vectores 00:00:17
o el del componente transform. Pero insisto, a lo largo del curso veremos muchísimas formas en las que podemos 00:00:22
desplazar un objeto que al fin y al cabo es una parte fundamental en la creación de videojuegos. 00:00:29
Para ello, me voy a ir a mi Unity. Tengo aquí una escena vacía. Voy a crear un objeto 3D. 00:00:35
Pues vamos a desplazarlo, pero antes de desplazarlo quiero que nos fijemos que aquí en la ventana del inspector 00:00:43
tenemos un componente que es el de Transform. Este componente es peculiar primero porque todos los objetos lo tendrán 00:00:49
y no lo podemos quitar ni siquiera desactivar porque es el que ubica este objeto, este GameObject en el espacio tridimensional 00:00:55
y tiene otra peculiaridad que ahora mismo no entenderemos muy bien pero que más adelante veremos lo útil que es 00:01:01
que es que está integrada por defecto ya en el objeto, es decir, en la clase, cuando creemos un script que crea una clase sobre este GameObject, 00:01:09
veremos que la propiedad o el método transform está integrado, es decir, que no lo tenemos que llamar de ninguna forma. 00:01:17
Lo tenemos ya disponible y lo vamos a comprobar ahora mismo. De hecho, voy a crear un script para este GameObject. 00:01:24
Os recuerdo siempre que tengáis muy ordenado todos vuestros assets. En este caso voy a crear aquí un script. 00:01:29
Pero además lo voy a hacer de una forma diferente a como lo he hecho hasta ahora. 00:01:35
Lo que voy a hacer es, directamente sobre la carpeta sobre la que quiero crear el script, 00:01:38
le damos a crear, create, y veremos que la primera de las opciones que nos aparece, 00:01:43
aparte de la carpeta nueva, es un script en C Sharp. 00:01:48
Es decir, que lo tenemos ahí y le damos un nombre, por supuesto. 00:01:51
Os recuerdo que va a crear una clase con el nombre del archivo. 00:01:54
Es decir, que si hacemos caso de las convencionalidades que tenemos en programación, 00:01:57
pues debería ser con la primera letra en mayúscula. 00:02:02
Le voy a llamar cubo, para identificarlo bien y que sepamos que es el script que está vinculado a este cubo. 00:02:04
De momento no está vinculado, siempre tenemos que recordar que los scripts tienen que estar vinculados a un GameObject o si no, no se ejecutarán. 00:02:11
Así que voy a seleccionar mi cubo y lo voy a arrastrar, el script, a donde pone Add Component, a ese apartadito. 00:02:19
Vale, ahí lo tengo. Ya se me ha añadido como un componente más que de hecho puedo activar o desactivar. 00:02:30
Lo gente lo quiero activo. Vale, voy a ejecutar, voy a editar este script. 00:02:38
Antes de continuar voy a explicar un concepto, que es el de vectores. 00:02:42
No nos preocupemos demasiado porque dedicaremos un capítulo exclusivamente a vectores. 00:02:47
Y hablaremos de cómo son, de qué nos permiten, de qué operaciones podemos hacer con ellos. 00:02:51
En fin, es algo bastante más complejo como para hablar de ello en este vídeo. 00:02:55
Pero no está de más que sepamos ya lo que es. No es más que una ubicación en el espacio. 00:02:59
Es decir, esto que tenemos aquí en nuestro cubo, que dice posición, tengo una posición en x, lo voy a cambiar por 0, 00:03:05
una posición en y y otra posición en z. Eso es una ubicación en el espacio cogiendo los tres parámetros tridimensionales, 00:03:13
los tres ejes y sus valores, por supuesto. Entonces eso es un vector. 00:03:21
Es algo más complejo que eso, pero quedémonos con eso. 00:03:26
Esos tres parámetros son un vector, concretamente un vector de tres dimensiones, es decir, un vector tres. 00:03:28
También existen los vectores de dos dimensiones. 00:03:33
Voy a poner un ejemplo. 00:03:36
Como bien sabemos, y si no lo recordamos, por el mero hecho de utilizar una clase, la que he creado, 00:03:38
que hereda de otra clase que nos incluye Unity, pues automáticamente tengo a mi disposición muchas otras clases 00:03:46
que yo no he creado pero que existen ahí. Aprovecho para recordaros que tenemos el 00:03:54
scripting reference de Unity donde podemos buscar la información sobre cualquier elemento 00:03:59
de nuestros scripts. Si tenemos dudas podemos buscar, por ejemplo, le digo, oye, ¿qué 00:04:04
sabemos de los vectores 3? Entonces Unity nos hará una búsqueda y nos dirá todo lo 00:04:09
que tenemos que saber de los vectores 3, que es lo que vamos a usar ahora, desde qué son 00:04:14
hasta sus métodos, esto recordad que son métodos 00:04:18
y sus atributos, en fin, como podéis ver 00:04:21
tenemos muchas cosas relacionadas con los vectores 3 00:04:24
muchas más de las que vamos a ver ahora 00:04:27
al haber heredado las clases de MonoBehaviour 00:04:29
significa que yo puedo crear una clase 00:04:33
de tipo, voy a ponerla de momento privada 00:04:38
¿qué tipo de clase? 00:04:43
pues esta no es ni cadena de texto 00:04:47
ni booleana es tipo vector3 00:04:49
es decir, ahora mismo he creado una variable de tipo vector3 00:04:53
ahora le voy a dar un nombre a mi variable, por ejemplo 00:04:56
initPost, por ejemplo, le voy a llamar, es decir, la posición inicial en la que estoy 00:05:00
y ahora 00:05:07
recuerdo que esto es una clase, es una clase heredada y como se declaraban las clases 00:05:11
en programación orientada a objetos, es decir, como se instanciaban 00:05:15
con el comando new 00:05:19
y ahí me va a aparecer, como podéis ver 00:05:21
me sugiere, lógicamente, que sea 00:05:23
un vector 3. Y ahora le añadimos 00:05:25
los paréntesis, pero fijaros, esto es muy interesante 00:05:27
porque los vectores 00:05:29
que son tridimensionales, para declararlos 00:05:31
nos piden tres parámetros 00:05:33
de hecho, ahí sale la ayuda de nuestro 00:05:35
entorno de desarrollo, diciéndonos 00:05:37
que está pidiendo 00:05:39
parámetros. Nos pide 00:05:40
tres parámetros. Como es un vector 00:05:43
de tres dimensiones, nos pide 00:05:45
como podéis ver, un número float, es decir, un número con decimales 00:05:47
que represente la posición en X, en el eje X 00:05:51
otro decimal que representa la posición en Y y otro decimal que represente la posición en Z 00:05:54
pues voy a dárselos, le voy a decir que por ejemplo 00:05:59
mi objeto esté en la posición X 00:06:02
0, Y 0 y Z 0 00:06:06
ahora mismo acabo de declarar una variable llamada initPos 00:06:10
que es una variable de tipo vector3 00:06:15
y lo que ha hecho es crear una nueva instancia de esa clase 00:06:18
de la clase vector3 con estos parámetros 00:06:23
x0 y 0, z0 00:06:25
ahora ya puedo hacer con ella lo que quiera 00:06:28
es decir, usarla, por ejemplo 00:06:31
un uso muy habitual 00:06:33
posicionar mi objeto en el escenario 00:06:35
voy a comprobarlo 00:06:37
ya sabemos que el método start lo que hace es ejecutarse cuando lanzo el juego 00:06:38
y yo le puedo decir, y aquí viene lo interesante 00:06:43
ya os he dicho antes que el método, el componente transform 00:06:45
de Unity que tenemos aquí 00:06:50
ya viene incluido directamente en nuestra clase 00:06:53
no otros, si quiero acceder a estos componentes 00:06:57
veréis que no puedo acceder a ellos de forma fácil, tengo que incorporarlos 00:07:01
ya veremos cómo, pero la de transform ya está incluido 00:07:06
¿qué significa? que si yo empiezo a escribir transform 00:07:09
veis que me autocompleta, recordad que esto lo tengo que hacer en un método 00:07:13
no lo puedo hacer en cualquier sitio, en este caso en el método start 00:07:16
transform, y si le pincháis veréis que me reconoce 00:07:20
todos los atributos y los métodos disponibles en esta clase 00:07:24
que ya está declarada, no hace falta que yo la declare 00:07:29
y entonces pues ahí tenemos, por ejemplo, y no hace falta si queremos 00:07:31
una chuleta, fijaros, quiero cambiar su posición 00:07:36
Entonces, si busco entre los atributos de esta clase transform, está el position. 00:07:40
Y si nos fijamos, y además aquí te podemos tirar del ayudante de nuevo, nos dice, este parámetro es un parámetro de tipo vector3, es decir, no es una cadena de texto, no es un integrir, es un vector3, como el que hemos creado. 00:07:53
Entonces yo le digo transform position, es decir, la posición en la que está aquí el GameObject al que está asociado este script. 00:08:07
Y si le digo que es igual a, por ejemplo, al que yo he creado aquí, ¿qué ocurrirá? 00:08:14
Pues que mi GameObject al que está asociado, es decir, mi cubo, en cuanto lance el script se posicionará en las coordenadas 0, 0, 0. 00:08:27
Lo voy a comprobar. ¿Cómo? Moviendo mi cubo en las tres coordenadas veo que ahora estos son los parámetros, pero si todo va bien, en cuanto la hace el script se moverá a la posición 0, 0, 0, como podéis ver. 00:08:37
Vayamos poco a poco. 00:08:54
Ya sabemos que los vectores 3 es un tipo de clase que pide tres parámetros, x, y y z. 00:08:55
Lógicamente los vectores 2 piden solo dos porque son bidimensionales. 00:09:01
Una vez que los tenemos declarados y a nuestra disposición, podemos asignárselos a la posición de un objeto. 00:09:06
En principio del que tenemos asociado, pero ahora veremos que también lo podemos asociar a otros GameObjects que tenemos en la escena. 00:09:13
Antes de hacer eso, vamos a mover este objeto. 00:09:20
¿Cómo se mueve un objeto? 00:09:22
Insisto, hay muchas formas 00:09:24
Una de ellas es por ejemplo aplicando fuerzas 00:09:26
Y cuando tengamos gravedad, por ejemplo, en nuestra escena 00:09:28
Si le tiramos una fuerza a alguien, también con un vector 00:09:31
Porque los vectores también pueden determinar vectores de movimiento o de fuerza 00:09:35
Pues lo desplazaremos 00:09:39
Pero aquí lo vamos a hacer un poco a las bravas 00:09:41
Entre otras cosas también para entender el concepto 00:09:43
Por ejemplo, ¿y si yo le digo que en cada fotograma se desplace en una dirección? 00:09:46
a lo largo de un eje. 00:09:52
Pues bien, para eso tenemos que entender otra cosa y es que los vectores se pueden 00:09:54
sumar. 00:09:58
Es decir, yo puedo coger un vector, el que he creado, por ejemplo, 0, 0, 0 00:09:58
y poner otro vector en otra posición y sumar los dos. ¿Qué obtendré? Pues para 00:10:03
verlo 00:10:08
vamos a ver algo 00:10:09
muy interesante 00:10:11
es que os he comentado que 00:10:13
yo en todo momento puedo 00:10:15
actuar sobre la posición de mi objeto 00:10:17
Pero no solo eso, sino que también puedo obtenerla. 00:10:20
Ejemplo. 00:10:24
Voy a declarar una variable de tipo vector3 que se llama initPos. 00:10:29
Y no le he dado ningún valor, lógicamente. 00:10:37
Pero se lo voy a dar ahora. 00:10:40
Y se lo voy a dar, cuidado, esto lo tengo que hacer dentro del método start o de cualquier otro método. 00:10:41
Le voy a dar cuál, la que tengo yo ahora mismo. 00:10:45
¿Vale? 00:10:48
Entonces le voy a decir que la variable que acabo de crear, su valor es igual a, y le tengo que dar un valor de vector3. 00:10:48
Veréis que si le doy un valor, por ejemplo, de un número entero, me lo dirá, me dice, no, no, esto lo que me está pidiendo es una variable de vector3. 00:10:57
Pero sabemos que mi posición, esto, hace referencia a mi posición inicial, que antes he redeclarado, pero yo en cualquier momento puedo ir a ella y preguntarle, digo, oye, ¿cuál es mi posición? Pues mi posición en la que estoy ahora mismo, asígnaselo a ese vector 3 que he creado. 00:11:05
y lo voy a mandar a la pantalla para ver si efectivamente 00:11:26
todo funciona 00:11:28
ves que ahora no lo estoy moviendo al iniciar el juego 00:11:30
sencillamente le estoy diciendo que me diga cuál es mi posición 00:11:34
voy a lanzar el script 00:11:36
y la gente me dirá que mi posición es 00:11:39
esta, vamos a comprobarlo 00:11:43
correcto, voy un paso más allá 00:11:46
y si le digo 00:11:49
que esta posición me la diga en el método update 00:11:50
recordad que el método update lo que hace es ejecutarse en cada fotograma 00:11:58
24, 48, 30 fotogramas por segundo al que se ejecute el juego 00:12:01
si yo le digo 00:12:05
la variable de posición, la de initPos 00:12:07
es en la posición en la que estoy en este momento 00:12:11
dámela, escríbemela en la consola 00:12:13
¿qué ocurre? que si yo modifico o muevo ese elemento 00:12:17
me lo estará diciendo constantemente cuál es su posición 00:12:21
vamos a comprobarlo 00:12:23
esto va a ser un poco loco porque 00:12:25
lógicamente me lanzará un montón de 00:12:27
imágenes de datos a consola 00:12:29
en principio empezará 00:12:31
por la posición inicial, por esa 00:12:33
pero 00:12:35
en cuanto yo empiece a mover 00:12:37
el objeto 00:12:39
vemos, esto no varía, está en la misma 00:12:40
posición, pero si yo desplazo el objeto 00:12:43
en cualquier eje 00:12:46
si nos fijamos 00:12:47
los datos aquí van cambiando 00:12:49
en función de donde lo 00:12:51
desplace yo. Bien, acabamos de descubrir 00:12:53
por qué es muy importante o es 00:12:56
muy útil poder hacer modificaciones en nuestros 00:12:58
objetos mientras se está ejecutando el juego 00:13:00
porque así vemos cómo afecta 00:13:01
a nuestros scripts directamente 00:13:03
y también por qué es importante que cuando termina 00:13:06
esa ejecución vuelve a la posición 00:13:08
en la que estaba antes para que digamos 00:13:09
todo lo que haya hecho no haya tomado 00:13:11
valor sino que solo ha sido como una prueba 00:13:14
pues hagamos una cosa, antes de hacerla voy a 00:13:15
hacer un 00:13:18
pequeño truco de magia que es sumar un vector 00:13:18
De hecho, voy a hacer una cosa también para que sepamos que un vector, el que he creado antes, es privado. 00:13:26
Yo no tengo acceso a él, pero yo puedo crear uno que sea no público, 00:13:35
pero sí que puedo acceder a él a través de la interfaz de Unity, como ya vimos. 00:13:39
Una variable serializada de tipo vector3, que le voy a llamar destinationPosition, es decir, hacia dónde se dirigirá. 00:13:44
Y ya está. Y no le doy nada más, no le doy ningún valor. ¿Por qué? 00:13:53
Y esto es lo bueno de las variables serializadas, igual que de las variables públicas, ya lo tenemos que saber, es que me permite dar los valores directamente en el inspector. 00:13:56
Vemos que aquí nos aparece esa variable creada y como es de tipo vector3 nos aparece con sus tres parámetros. Maravilloso. 00:14:06
¿Eso qué significa? Que yo le voy a decir, por ejemplo, desplázate 1 en x, 0 en y y 0 en z. 00:14:14
Esto que en realidad se correspondería con posición 1, 0, 0, si yo lo sumo, de hecho voy a poner mi cubo en la posición 0, 0, 0. 00:14:20
Si yo cojo el vector en el que estoy ahora mismo y le sumo este otro vector, ¿qué me dará? Pues vamos a comprobarlo. 00:14:30
Y así comprobamos que efectivamente podemos sumar vectores. 00:14:40
De hecho, voy a crear otro vector, este también lo voy a crear privado, no lo necesito, que es finalPosition, por ejemplo, de tipo vector3, se va a llamar finalPosition. 00:14:45
Entonces, aquí tengo la posición inicial, es el vector3 en el que estoy cuando arranco. 00:15:03
pues la posición final, que es otro vector 3 00:15:10
va a ser la suma de la posición inicial 00:15:15
más el... lo he puesto con minúscula 00:15:20
lo voy a corregir ahora mismo. Es decir, tengo la posición 00:15:26
inicial, que va a ser en la que empieza el objeto. Tengo la 00:15:34
de destino, que esa la voy a añadir a través de la interfaz de Unity 00:15:37
que es la que se va a sumar. Y tengo 00:15:41
la posición final 00:15:46
que va a ser la suma de una y otra 00:15:49
¿y cuál va a ser esta? 00:15:52
pues lo vamos a comprobar ahora mismo 00:15:54
porque lo voy a mandar a pantalla 00:15:55
voy a limpiar la consola 00:15:56
si lo lanzo 00:15:59
recordamos, nuestro cubo está en posición 0, 0, 0 00:16:00
la de destino será 00:16:04
1, 0, 0 00:16:07
1, 0, 0 00:16:08
¿y cuál es la posición final? 00:16:09
pues ahí me lo dice 00:16:13
1, 0, 0 00:16:14
Es la suma entre uno y otro. De hecho, si yo, por ejemplo, le digo que el vector que voy a sumar va a ser de 10, 5, 2 y la posición inicial es de 2, 1, 0, pues si lanzo, ¿cuál es mi vector final? 00:16:15
Ahí lo tenemos. 12, 6, 2. ¿Por qué? Porque es la suma de 2 más 10, de 1 más 5, de 0 a 2. 00:16:36
Idioma/s:
es
Materias:
Informática, Imagen y Sonido
Niveles educativos:
▼ Mostrar / ocultar niveles
  • Formación Profesional
    • Ciclo formativo de grado superior
      • Primer Curso
      • Segundo Curso
Autor/es:
Álvaro Holguera
Subido por:
Alvaro H.
Licencia:
Reconocimiento - No comercial - Compartir igual
Visualizaciones:
183
Fecha:
14 de septiembre de 2021 - 22:54
Visibilidad:
Público
Enlace Relacionado:
https://laultimapregunta.com/me/aula/apuntes?mod=deim#deim
Centro:
Sin centro asignado
Duración:
16′ 45″
Relación de aspecto:
1.78:1
Resolución:
1280x720 píxeles
Tamaño:
326.05 MBytes

Del mismo autor…

Ver más del mismo autor


EducaMadrid, Plataforma Educativa de la Comunidad de Madrid

Plataforma Educativa EducaMadrid