Activa JavaScript para disfrutar de los vídeos de la Mediateca.
Primeros pasos en Unity. Colisiones (parte 1) - Contenido educativo
Ajuste de pantallaEl ajuste de pantalla se aprecia al ver el vídeo en pantalla completa. Elige la presentación que más te guste:
Dentro del tema de físicas en Unity, aprendamos cómo gestionar cuándo dos objetos colisionan entre sí)
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:
- 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