Este documento presenta la segunda clase de un taller de física 3D en Unity. Explica conceptos como colisiones, triggers y sus eventos asociados. También incluye ejemplos de cómo identificar objetos colisionados, calcular velocidades de colisión y energía de impacto, acceder a puntos de contacto, y usar triggers para recolectar ítems, activar trampas y abrir puertas. El proyecto final del taller consiste en crear un videojuego que incorpore los diferentes conceptos físicos vistos a lo largo de las 4 se
3. Proyecto
• Al finalizar las 4 semanas deberán haber
creado un videojuego en donde se observen
todos los contenidos vistos en clase.
• El proyecto debe ser un shooter o un juego
de aventura en primera o en tercera persona.
• Para su desarrollo son libres de usar todos
los assets necesarios del Asset Store de
Unity.
4. 1. Colisiones
• Si se detecta que 2 colisionadores han entrado en
contacto y al menos uno de ellos está configurado
como Rigidbody Collider, entonces se produce una
colisión.
• Esta última condición es necesaria, ya que al menos
uno debe moverse usando la física del juego para que
se produzca la colisión.
5. OnCollision
• OnCollisionEnter: Es llamado cuando su
collider/rigidbody ha comenzado a tocar
otro rigidbody/collider.
• OnCollisionStay: Es llamado en cada frame
por cada collider/rigidbody que esté
tocando otro rigidbody/collider.
• OnCollisionExit: Es llamado cuando su
collider/rigidbody ha dejado de tocar a otro
rigidbody/collider.
• Estos eventos son parte de MonoBehaviour.
7. Clase “Collision”
• Al llamarse cualquiera de los 3 eventos, la física entrega un parámetro de tipo de dato
Collision con toda la información sobre la colisión generada y del objeto con el cual colisiona.
8. Collision
• Dentro de la información del objeto con el
que colisiona, podemos acceder
directamente a su Collider, GameObject,
Transform y Rigidbody.
• De esta manera podemos identificar
fácilmente si el objeto colisionado es, por
ejemplo: el escenario, un obstáculo, un
ítem, un enemigo, etc.
• Para poder diferenciar los distintos objetos
detectados, hacemos uso de los tags.
10. Velocidad relativa
• relativeVelocity (Vector3): La velocidad lineal relativa
entre los 2 objetos colisionando.
• Dados dos observadores, A y B. La velocidad relativa de
B con respecto a A viene dada por: 𝑉𝐵|𝐴 = 𝑉𝐵 − 𝑉𝐴.
De misma manera, la velocidad relativa de A con
respecto a B viene dada por: 𝑉𝐴|𝐵 = 𝑉𝐴 − 𝑉𝐵
12. Energía de impacto
• En caso de que se lance un objeto de una
altura, podemos calcular la energía de
impacto al colisionar contra el piso, para
esto utilizamos la ley de conservación de
energía.
14. Puntos de contacto
• Desde el objeto collision podemos acceder a
la variable contacts.
• La variable contacts es un arreglo de tipo de
dato ContactPoint, el cual contiene
información de todos los puntos de contacto
en la colisión, entre los datos obtenidos se
encuentran:
• point (Vector3): La posición del punto de
contacto.
• separation (float): La distancia entre los
colisionadores en el punto de contacto.
• normal (Vector3): El vector normal del punto
de contacto.
15. Puntos de contacto
• El vector normal tiene la propiedad de ser
ortogonal a todos los vectores tangentes a
la entidad geométrica.
19. 2. Triggers
• Si se detecta que 2 colisionadores han entrado en
contacto y se cumplen las siguientes condiciones:
• Al menos uno de ellos tiene la opción isTrigger
activada y al menos uno de ellos contiene un
componente Rigidbody, entonces se produce un
evento de Trigger.
20. Triggers
• El Trigger Collider activa un evento cuando
un collider entra en su espacio.
• Estos collider no se comportan como un
objeto sólido sino que permiten que otros
colliders puedan pasar a través de él, como
si físicamente no tuviesen un colisionador.
21. OnTrigger
• OnTriggerEnter: Es llamado cuando el otro
collider entra al trigger.
• OnTriggerStay: Es llamado en cada frame
por cada otro collider que esté tocando el
trigger.
• OnTriggerExit: Es llamado cuando el otro
collider sale del trigger.
• Estos eventos son parte de MonoBehaviour.
23. Collider
• Los eventos OnTrigger sólo permiten acceder al collider y no a la colisión como lo era en los eventos
OnCollision.
• Desde el collider podemos acceder a la información del objeto con el que estamos en contacto,
específicamente a los datos: gameObject, transform y tag.
31. Ejemplo: tiempo transcurrido en una zona
• Al entrar a la zona, comienza a correr el tiempo.
• Cada 1 segundo en la zona se le aplicará daño al personaje.
32. Ejemplo: tiempo transcurrido en una zona
• Al entrar a la zona, comienza a correr el tiempo.
• Cada 1 segundo en la zona se le aplicará daño al personaje.