Saltar navegación

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

Primeros pasos en Unity. Colisiones (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 6 de octubre de 2024 por Alvaro H.

94 visualizaciones

Dentro del tema de físicas en Unity, aprendamos cómo gestionar cuándo dos objetos colisionan entre sí)

Descargar la transcripción

Bien, anteriormente ya hemos visto cómo funcionan las físicas o el mundo de la física real dentro de Unity, 00:00:06
pero vamos a ir un pasito más allá y vamos a abordar el tema de las colisiones, 00:00:11
es decir, qué hacer cuando un objeto entra en contacto con otro. 00:00:16
Es algo totalmente habitual, por ejemplo, sin ir más lejos, las balas cuando impactan en los personajes o en los NPCs. 00:00:19
Para eso usaremos los colliders, vamos a adentrarnos en ellos. 00:00:27
Bien, para este ejemplo voy a usar una escena similar a la que estuve usando para el RigidBody, 00:00:31
en el que he creado un plano 3D con un poco de textura de mármol para darle un poco de solidez, 00:00:34
que tiene ya por defecto un mesh collider, eso no lo he añadido yo, sino que automáticamente al ser un objeto 3D 00:00:38
pues entiende que tiene una colisión en su malla. 00:00:43
He creado una esfera bastante grande, ahí está, ahí arriba, que también por defecto viene con su propio colisionador, 00:00:47
ahora veremos, pero desde luego lo que no tiene es un rigid body, de hecho ahora mismo si yo lanzo la escena 00:00:53
también tengo aquí una cámara que la va a seguir, como hemos visto en ejemplos anteriores, 00:00:56
pero vemos que la esfera ahí se queda, ¿por qué? Porque no le afecta la física. 00:01:00
Así que lo primero que voy a hacer es añadirle a esta esfera un componente, en este caso un RigidBody. 00:01:03
Ahí está. Con un peso, el peso le da igual, le podemos poner 2 kilos por base de metal y con una 00:01:08
resistencia al aire que bueno, le puedo dar un 0,5 aunque insisto, para lo que vamos a ver hoy no nos 00:01:15
interesa. Pero sí desde luego lo que me interesa es que esté afectado por la gravedad, para que caiga. 00:01:19
De hecho ahora mismo si lanzamos el juego la cámara le seguirá la esfera, ahí la veremos, ahí la sigue, 00:01:23
cae, cae, cae y choca contra el suelo. ¿Por qué? Porque ambos dos tienen el Mesh Collider. En este 00:01:29
caso un Collider específico para las esferas, que eso es lo que vamos a tratar hoy. Antes de hacerlo 00:01:37
voy a hacer un poco de trampa a la esfera. Le voy a aplicar un material que le dé apariencia de 00:01:42
metal y también le voy a añadir esto. Ya lo veremos más adelante cuando veamos los materiales. Le voy 00:01:50
a añadir un material físico, un Physic Material, que he creado por aquí. Estos tienen que estar 00:01:59
asociados a colliders cuando nosotros añadimos cualquier tipo de collider en un objeto nos da 00:02:03
la opción de añadirle un material porque lógicamente la forma en la que un objeto 00:02:07
colisiona con otro pues depende del material que está hecho no es lo mismo que sea goma que metal 00:02:11
de hecho en este caso le he dado un poquito de bouncing es que es para que rebote porque hemos 00:02:14
visto que antes ha caído la pelota a peso y ahora le ha dado un poco de eso pues rebote para que la 00:02:19
esfera ahora mismo aunque sea de metal pues por lo menos de algo de sensación de ahí está pues 00:02:23
Claro, pues sí que rebota. Y eso se lo da el material del collider. 00:02:30
Pues ya estamos preparados. Antes de meternos en la programación y ver cómo funcionan las colisiones, 00:02:33
vamos a ver un momentito este panel de collider, que puede variar dependiendo del tipo de collider que sea, 00:02:37
pero tiene algunos parámetros que suelen ser bastante habituales. 00:02:41
Para ejemplo, para empezar el edit collider, esto, cuando lo activamos, automáticamente vemos que nos aparece aquí 00:02:43
una especie de esfera, de malla que va rodeando a nuestro cuerpo y que, insisto, dependerá del tipo de collider que estemos usando. 00:02:49
Este objeto, al ser una esfera, pues lógicamente la forma que tiene su collider es esférica. 00:02:56
Pero si estuviésemos en otro tipo de collider, pues aparecería con otra forma. 00:03:01
Pero lo que me interesa es que si nos acercamos, veremos que tiene unos pequeños asideros, aquí los tenemos, pequeñitos, 00:03:03
que nos permiten deformar la forma de la malla. 00:03:09
Y lo que implica esto es cuándo empieza a entrar en contacto con otros objetos. 00:03:13
Si extendemos la malla del collider, o extendemos el collider fuera de su forma, 00:03:18
detectará las colisiones antes de entrar en contacto 00:03:23
y al contrario, si la contraemos por dentro 00:03:25
de su forma, pues primero 00:03:27
contactará y luego detectará la colisión 00:03:29
en este caso es una esfera, es muy fácil determinar 00:03:31
dónde empieza y dónde termina 00:03:33
pero imaginemos un personaje 3D cuyo collider 00:03:35
no lo podemos hacer que tenga exactamente la misma forma 00:03:37
del personaje 3D, sino que tenemos que más o menos 00:03:39
decidir, pues normalmente suele ser 00:03:42
una cápsula y en esa cápsula metemos nuestro personaje 00:03:43
y la agrandamos o la empequeñecemos dependiendo de 00:03:45
si queremos que sea más 00:03:47
extensa la zona de colisión 00:03:48
pero bueno, siempre podremos 00:03:51
Aquí cuando le damos al botón de Edit Collider 00:03:52
Siempre nos saldrán esos asideros 00:03:55
Que podemos pincharlo y veremos que se agranda o se empequeñece 00:03:58
Si pinchamos el Alt, veremos que se agranda o se empequeñece 00:04:02
Respetando el centro de la forma 00:04:05
Lo cual en este caso es bastante práctico 00:04:06
Lo voy a dejar un poquito que se expanda hacia afuera 00:04:08
Pero no demasiado para que no quede poco realista 00:04:10
Y veamos que ese mismo botón lo tenemos aquí 00:04:11
Es decir, que cuando tenemos un objeto en la escena 00:04:14
Podemos pinchar ese botón y accederemos a la edición de su colisionador 00:04:15
Y de hecho lo que hemos estado haciendo básicamente es 00:04:19
si nos fijamos en este caso ampliar su radio 00:04:22
ahí está 00:04:24
pero también podemos desplazarlo, es decir 00:04:25
si queremos que el coleccionador 00:04:27
esté fuera del objeto 00:04:29
por algún motivo que ahora mismo no se me ocurre pero 00:04:31
pues también podemos hacerlo 00:04:33
pero bueno, en este caso no, me interesa que esté centrado 00:04:34
más opciones 00:04:37
tenemos aquí Strigger que lo que hace es 00:04:38
lanzar un aviso cuando ha coleccionado con otro objeto 00:04:41
lo veremos ahora cuando nos metamos en el 00:04:43
código y aquí el material 00:04:45
que es un material físico 00:04:47
que es el que he creado previamente y que bueno que ya veremos 00:04:49
en detalle cuando veamos los materiales. 00:04:51
Pero ahora lo que nos interesa es, mediante código, 00:04:53
detectar cuando se ha producido 00:04:56
una colisión. 00:04:58
Y eso es lo que vamos a hacer. 00:04:59
Yo voy a crear un nuevo script 00:05:01
al que le voy a llamar SphereCollider, por ejemplo. 00:05:02
Y se lo voy a asociar 00:05:06
a mi espera. 00:05:07
Pues fijémonos que lo primero que voy a hacer es borrar 00:05:09
los métodos que vienen por defecto, 00:05:11
el de Start y Update, porque no los voy a necesitar. 00:05:13
De hecho, vamos a utilizar un método propio 00:05:15
que lo empiezo a escribir. Es un método que no devuelve nada, 00:05:17
Por eso escribo aquí void. Y si empezamos a escribir onTriggerEnter, veremos que automáticamente Unity nos lo completa diciendo que es un método privado, eso lo ha puesto él, pero no está de más que lo indique. 00:05:19
El método onTriggerEnter, que es decir que esto se va a lanzar cuando se ha lanzado el trigger, es decir, el disparador. 00:05:31
Y ahora automáticamente dentro ha atrapado una variable tipo collider a la que le ha llamado other. Es decir, que dentro de la variable other tendremos todos los datos referidos al objeto con el que ha colisionado. 00:05:36
y es en este momento cuando, por ejemplo, le puedo decir 00:05:46
que mande a consola 00:05:49
se ha chocado con algo 00:05:50
y ahora en mi Unity 00:05:53
si es verdad que a la esfera, en el collider 00:05:54
le tengo que decir 00:05:57
que es trigger 00:05:58
es decir, que se lance 00:06:00
un disparador cuando ha chocado 00:06:02
así que ahora mismo, en la consola 00:06:04
si lo lanzo 00:06:06
veremos aquí en la consola que efectivamente cuando choque con el suelo 00:06:08
efectivamente ha detectado 00:06:11
Pero fijémonos una cosa, la esfera sigue cayendo 00:06:15
Y eso es algo que tenemos que entender 00:06:17
Que es que cuando activamos el trigger de los colliders 00:06:19
De repente deja de detectar las colisiones 00:06:22
Y ya es como si no tuviese física 00:06:25
Lo único que hace es que cuando colisiona 00:06:27
Manda un aviso, nada más 00:06:29
Pero ya no es materia sólida 00:06:31
Ahora lo que tenemos que hacer es actuar en consecuencia desde el código 00:06:34
Algo que puedo hacer 00:06:38
Es que cuando choque con algo 00:06:39
Destruya este objeto 00:06:42
y eso lo hacemos con el método destroy 00:06:45
y que destruya el GameObject. ¿Cuál? Pues como no le identifico cuál 00:06:51
o no le especifico cuál, pues destruirá al que está asociado este script. 00:06:54
Y efectivamente ahora mismo veremos caer la esfera. Allá va 00:07:00
y cuando llegue al final, ¡oh! desaparece. Pero es que desaparece 00:07:03
incluso de mi jerarquía. Algo que tenemos que entender 00:07:07
es que la variable other que hemos capturado aquí nos da 00:07:10
toda la información con respecto al objeto con el que ha colisionado, es decir, le podemos 00:07:14
preguntar cualquier cosa, entre otras cosas su nombre o los tags 00:07:18
a los que pertenece. Ejemplo, voy a preguntarle 00:07:22
aquí que me muestre 00:07:27
la variable order que, insisto, tiene el objeto con el que ha colisionado 00:07:29
pues que se vaya al objeto GameObject 00:07:34
de esa variable y que me dé su nombre, por ejemplo 00:07:38
que es uno de los atributos que tengo dentro de un GameObject 00:07:42
el nombre de ese GameObject. Así que por ejemplo yo ahora cuando lance el juego 00:07:47
aquí en consola me dirá que ha chocado con el plane 00:07:51
si yo le cambio el nombre a suelo 00:07:55
y lanzo el juego, efectivamente el objeto 00:08:01
con el que ha chocado es el suelo. A partir de ese momento 00:08:07
pues lógicamente podemos empezar a programar en el sentido de que 00:08:13
Porque yo le puedo decir que cuando colisione, si el nombre del objeto con el que has chocado 00:08:17
es el suelo, cuidado con mayúsculas y minúsculas, entonces destruye el objeto. 00:08:26
Idioma/s:
es
Autor/es:
Álvaro Holguera
Subido por:
Alvaro H.
Licencia:
Reconocimiento - No comercial - Sin obra derivada
Visualizaciones:
94
Fecha:
6 de octubre de 2024 - 20:29
Visibilidad:
Público
Centro:
CFP JOSÉ LUIS GARCI
Duración:
08′ 39″
Relación de aspecto:
1.78:1
Resolución:
1280x720 píxeles
Tamaño:
135.98 MBytes

Del mismo autor…

Ver más del mismo autor


EducaMadrid, Plataforma Educativa de la Comunidad de Madrid

Plataforma Educativa EducaMadrid