FISICAS: CONCEPTOS BASICOS (II)



Veíamos en la entrada anterior que un collider vendría a ser meramente un caparazón que le añadimos a una malla para que pueda colisionar con otras mallas, pudiendo ese caparazón tener la misma forma que la malla (mesh collider) o una forma que nosotros le diseñemos para él a partir de una o varias formas primitivas (primitive collider)que Unity nos ofrece.

Supongamos entonces que tenemos dos mallas en nuestra escena, a cada una de las cuales le asignamos un collider (del tipo que sea, eso no importa para este ejemplo). A través de un script vinculado a una de las mallas movemos su transform para que colisione contra la otra malla. Probadlo si queréis con dos cubos (que ya traen "de serie" un collider primitivo (obviamente, un box collider)). Comprobaréis que pese a tener cada malla un collider, a efectos prácticos es como si no lo tuvieran, ya que se atraviesan.

Esto sucede porque para que dos mallas puedan colisionar, además de estar ambas dotadas de su pertinente collider, es preciso que al menos una de las dos mallas tenga vinculado además un Rigidbody no kinemático.

Olvidémonos de momento del palabro "kinemático" y centrémonos en el Rigidbody.

Un rigidbody es el conjunto de datos que permiten a Unity calcular, entre otras cosas, las consecuencias que tendrá una colisión para el gameobject al cual se asigna dicho rigidbody.

Al igual que nos pasaría a nosotros si estuviéramos en clase de física, para que Unity calcule las consecuencias de una hipotética colisión necesita tener en cuenta factores como la masa del gameobject al que se vincula, la velocidad relativa a que se produce la colisión, si existe o no rozamiento y en qué medida, si hay o no gravedad, etc. Por resumir, asignando un rigidbody a un gameobject automáticamente estamos dotando a dicho gameobject de una serie de propiedades físicas, tales como gravedad, rozamiento y peso, ya que sin saber la masa de un objeto - por ejemplo- es imposible calcular el resultado de una colisión (probad si no a patear de manera indiscriminada objetos con diferentes masas, paredes de carga y yorkshires inclusive, para que comprobéis las diferentes posibilidades de desplazamiento).

Lo más impactante para los recién llegados a Unity cuando le asignamos un rigidbody a una malla -como muchos ya habréis comprobado- es que automáticamente, salvo que el suelo a su vez tenga otro collider, nuestra malla se pierde en las profundidades de la escena. Por eso se tiende por algunos (manuales de pago incluidos) a simplificar en ocasiones cuando se explica lo que es un rigidbody, limitándolo a "lo que hace que un objeto se vea afectado por la gravedad".

Y por ahí suelen empezar también las confusiones entre colliders y rigidbodies, debido a que los dos tienden a solaparse y es difícil explicar uno sin mencionar al otro. Es verdad que ambos son necesarios para que se produzca una colisión, pero intervienen en apartados distintos: el collider sería el dónde (se produce la colisión) y el rigidbody el cómo.

Supongo que se entiende que no tendría sentido asignar un rigidbody a una malla que no tenga un collider, ya que de nada sirve calcular una colisión que nunca tendrá lugar (ya que no hay collider para esa malla con el que colisionar o ser colisionado)

Sí cabe pensar en un collider que no tenga rigidbody. De hecho, es lo que en Unity se conoce como "static colliders".

Un collider estático, como su nombre indica, está pensado para objetos que no se van a mover en la escena. Este tipo de colliders sin rigidbody pueden interactuar/colisionar con otros colliders siempre que éstos colliders sí tengan vinculado un rigidbody (ya hemos visto que si ninguno de los dos objetos tiene un rigidbody la colisión no se produce, básicamente porque Unity no tiene ninguna forma de calcular las consecuencias de dicha colisión entre dos objetos "no físicos" y directamente obvia la colisión).

Lo que sucede es que cuando un collider dinámico (con rigidbody) se mueve y fruto de ese movimiento colisiona con un collider estático (sin rigidbody), como Unity ignora las propiedades físicas del collider estático, meramente éste -haciendo honor a su nombre- no se moverá. Y de hecho, si se moviera, y precisamente por lo expuesto (Unity no sabe calcular cómo y cuánto se ha de mover) el costo computacional sería brutal.

Por todo lo anterior, los static colliders son óptimos para las partes fijas de nuestro juego, tal como paredes, librerías, árboles y objetos similares que no han de moverse pero que tampoco han de atravesarse por los personajes y demás partes móviles del juego.

Espero que estos conceptos que estoy intentando explicar a cuentagotas queden claros. Sé que al principio parece todo un poco confuso, pero es esencial entenderlos correctamente.


Un abrazo y hasta pronto.


POSTED BY UnityScripts
POSTED IN
DISCUSSION 17 Comments

17 Responses to : FISICAS: CONCEPTOS BASICOS (II)

  1. Anónimo says:

    Gracias, espero que continues con tus magistrales lecciones.

    Un Saludo

  2. Juan says:

    Excelente blog, me ha sido de mucha ayuda, sigue asi. :)

  3. Santi says:

    Ola buenos dias m podeis ayudar.explico;yo instale unity 3d y ya no m salia la camara me salio un cubo con las flechas,no m preocupe x eso pero claro al insertar un cubo ya m di cuenta q algo pasaba,no salia ni cubo ni nada en la pantalla?m loseis ayudar con eso?

  4. Santi says:

    En vez d.una camara sale un cuadrado pequeño con flechas y crear un cuadrado no sale el cuadrado?

  5. Pablo says:

    Eres muy grande este blog es la pedra roseta para cualquier autodidacta en scripting en unity. Muchas gracias por tu esfuerzo y por molestarte en compartir tu conocimiento.

    Un fuerte abrazo

  6. Anónimo says:

    Simplemente gracias totales..

  7. Anónimo says:

    Muy bien explicado de forma clara y a la vez profesional,muchas gracias!!

  8. Dg Zurdo says:

    HOLA AMIGO MUCHAS GRACIAS POR TUS APORTES , ES MUY BUENO TU BLOG ... ESPERO QUE CONTINÚES... TAL VEZ CON ALGO MAS DE FÍSICAS O CON ALGO DE IA. NOS VEMOS Y MUCHAS GRACIAS!!!!!

  9. Anónimo says:

    Todo lo que he leído hasta ahora está muy claro y preciso.
    Muchas gracias.
    Saludos.

  10. He estado mucho tiempo intentando aprender a base de tutoriales de youtube, pdf, etc... y la verdad es que no avanzaba nada.
    Por fin aquí te explican de manera ordenada y clara todo lo necesario para hacer cualquier cosa con Unity.
    Infinitas gracias por el trabajo realizado, todavía voy por la clase Transform, pero me paso por aquí a diario para seguir avanzando.

  11. B. says:

    Mil thnks, un grandioso aporte.

  12. Anónimo says:

    seguiras?

  13. Unknown says:

    Espero que aunque decidas no continuar, con mas tutoriales, esto quede se quede en internet para la posteridad y no lo borres.

    Saludos.

  14. Anónimo says:

    Gracias por esta aportación. Un gran trabajo!

  15. Unknown says:

    Gracias por toda esta información, espero y sigas subiendo estas grandes lecciones

  16. Muchas gracias por el esfuerzo puesto en este blog!!

    Lo leí completo y hoy (marzo 2017), salvo la UI de Unity y algunas pocas cosas deprecadas, la información del blog sigue aplicable y está MUY bien explicada.

    Saludos!

  17. this site is depend on unity scripts
    https://allunityscripts.blogspot.com/

Leave a Reply

Con la tecnología de Blogger.