Formas de colisión (3D)

Esta guía explica:

  • Los tipos de formas de colisión disponibles en 3D en Godot.

  • Usando una malla convexa o cóncava como forma de colisión.

  • Consideraciones de rendimiento en relación con las colisiones 3D.

Godot proporciona muchos tipos de formas de colisión, con diferentes equilibrios de rendimiento y precisión.

Puedes definir la forma de un PhysicsBody añadiendo uno o más CollisionShapes como nodos hijos. Ten en cuenta que debes añadir un recurso Shape a los nodos con forma de colisión en el Dock del Inspector.

Nota

Cuando añades múltiples formas de colisión a un solo PhysicsBody, no tienes que preocuparte de que se superpongan. No "colisionarán" entre ellas.

Las primitivas formas de colisión

Godot proporciona los siguientes tipos de formas de colisión primitivas:

Puedes representar la colisión de la mayoría de los objetos pequeños usando una o más formas primitivas. Sin embargo, para objetos más complejos, como una nave grande o un nivel entero, puede que necesites formas convexas o cóncavas en su lugar. Más información debajo.

Recomendamos favorecer las formas primitivas para los objetos dinámicos como los Cuerpos Rígidos y los Cuerpos Cineticos ya que su comportamiento es el más fiable. A menudo también proporcionan un mejor rendimiento.

Formas de colisión convexas

Convex collision shapes son un compromiso entre las formas de colisión primitivas y las formas de colisión cóncavas. Pueden representar formas de cualquier complejidad, pero con una importante salvedad. Como su nombre indica, una forma individual sólo puede representar una forma convexa. Por ejemplo, una pirámide es convexa, pero una caja hueca es cóncava. Para definir un objeto cóncavo con una única forma de colisión, hay que utilizar una forma de colisión cóncava.

Dependiendo de la complejidad del objeto, se puede obtener un mejor rendimiento utilizando múltiples formas convexas en lugar de una forma de colisión cóncava. Godot te permite usar la descomposición convexa para generar formas convexas que coincidan aproximadamente con un objeto hueco. Ten en cuenta que esta ventaja de rendimiento ya no se aplica después de una cierta cantidad de formas convexas. Para objetos grandes y complejos como un nivel completo, recomendamos usar formas cóncavas en su lugar.

Puedes generar una o varias formas de colisión convexas desde el editor seleccionando una MeshInstance y usando el menú Malla en la parte superior de la vista 3D. El editor expone dos modos de generación:

  • Crear un hermano de colisión convexo único utiliza el algoritmo Quickhull. Crea un nodo CollisionShape con una forma de colisión convexa generada automáticamente. Como sólo genera una única forma, proporciona un buen rendimiento y es ideal para objetos pequeños.

  • Crear múltiples hermanos de colisión convexa utiliza el algoritmo V-HACD. Crea varios nodos CollisionShape, cada uno con una forma convexa. Como genera múltiples formas, es más preciso para los objetos cóncavos a costa del rendimiento. Para los objetos de complejidad media, probablemente será más rápido que usar una sola forma de colisión cóncava.

Formas de colisión cóncavas o trimestrales

Formas de colisión cóncavas, también llamadas formas de colisión trimesh, pueden tomar cualquier forma, desde unos pocos triángulos hasta miles de triángulos. Las formas cóncavas son la opción más lenta pero también la más precisa en Godot. Sólo se pueden usar formas cóncavas dentro de StaticBodies. No funcionarán con KinematicBodies o RigidBodies a menos que el modo de RigidBody sea estático.

Nota

A pesar de que las formas cóncavas ofrecen la más precisa colisión, la información de contacto puede ser menos precisa que las formas primitivas.

Cuando no se usan GridMaps para el diseño de los niveles, las formas cóncavas son el mejor enfoque para la colisión de un nivel. Dicho esto, si tu nivel tiene pequeños detalles, puede que quieras excluirlos de la colisión para mejorar el rendimiento y la sensación de juego. Para ello, puedes construir una malla de colisión simplificada en un modelador 3D y hacer que Godot genere una forma de colisión para ella automáticamente. Más sobre esto a continuación

Nótese que a diferencia de las formas primitivas y convexas, una forma de colisión cóncava no tiene un "volumen" real. Puedes colocar objetos tanto fuera de la forma como dentro.

Puedes generar una forma de colisión cóncava desde el editor seleccionando una "Malla" y usando el menú "Malla" en la parte superior de la vista 3D. El editor expone dos opciones:

  • Crear el cuerpo estático de Trimesh es una opción conveniente. Crea un Cuerpo Estático que contiene una forma cóncava que coincide con la geometría de la malla.

  • Crear hermano de colisión Trimesh crea un nodo CollisionShape con una forma cóncava que coincide con la geometría de la malla.

Nota

Supongamos que necesitas hacer un desplazar un cuerpo rígido en una forma de colisión cóncava. En ese caso, puedes notar que a veces, el Cuerpo Rígido chocará hacia arriba. Para resolver esto, abre Proyecto > Configuración del proyecto y habilita Física > 3d > Colisión Trimesh Suave.

Una vez que hayas habilitado la colisión trimalla suave, asegúrate de que la forma cóncava es la única forma de tu StaticBody y que se encuentra en su origen sin ninguna rotación. De esta manera, el RigidBody debería deslizarse perfectamente sobre el StaticBody.

Ver también

Godot puede generar formas de colisión para sus escenas 3D importadas automáticamente. Ver Consejos para la Importación en la documentación para más información.

Advertencias de rendimiento

No estás limitado a una sola forma de colisión por cada PhysicsBody. Aún así, recomendamos mantener el número de formas tan bajo como sea posible para mejorar el rendimiento, especialmente para objetos dinámicos como RigidBodies y KinematicBodies. Además de eso, evitar traducir, rotar o escalar las CollisionShapes para beneficiarte de las optimizaciones internas del motor de física.

Cuando se utiliza una única forma de colisión no transformada en un CuerpoEstatico, el algoritmo de fase amplia del motor puede descartar los CuerposFisicos inactivos. La fase estrecha sólo tendrá que tener en cuenta las formas de los cuerpos activos. Si un CuerpoEstático tiene muchas formas de colisión, la fase amplia fallará. La fase estrecha, que es más lenta, debe entonces realizar una comprobación de colisión contra cada forma.

Si te encuentras con problemas de rendimiento, es posible que tengas que hacer concesiones en términos de precisión. La mayoría de los juegos no tienen una colisión 100% precisa. Encuentran formas creativas de ocultarlo o hacerlo imperceptible durante el juego.