Up to date

This page is up to date for Godot 4.2. If you still find outdated information, please open an issue.

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.

You can define the shape of a PhysicsBody3D by adding one or more CollisionShape3Ds as child nodes. Note that you must add a Shape3D resource to collision shape nodes in the Inspector dock.

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.

We recommend favoring primitive shapes for dynamic objects such as RigidBodies and CharacterBodies as their behavior is the most reliable. They often provide better performance as well.

Formas de colisión convexas

Convex collision shapes are a compromise between primitive collision shapes and concave collision shapes. They can represent shapes of any complexity, but with an important caveat. As their name implies, an individual shape can only represent a convex shape. For instance, a pyramid is convex, but a hollow box is concave. To define a concave object with a single collision shape, you need to use a concave collision shape.

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.

You can generate one or several convex collision shapes from the editor by selecting a MeshInstance3D and using the Mesh menu at the top of the 3D viewport. The editor exposes two generation modes:

  • 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

Concave collision shapes, also called trimesh collision shapes, can take any form, from a few triangles to thousands of triangles. Concave shapes are the slowest option but are also the most accurate in Godot. You can only use concave shapes within StaticBodies. They will not work with CharacterBodies or RigidBodies unless the RigidBody's mode is Static.

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.

You can generate a concave collision shape from the editor by selecting a MeshInstance3D and using the Mesh menu at the top of the 3D viewport. The editor exposes two options:

  • 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.

Ver también

See Importando escenas 3D for information on how to export models for Godot and automatically generate collision shapes on import.

Advertencias de rendimiento

You aren't limited to a single collision shape per PhysicsBody. Still, we recommend keeping the number of shapes as low as possible to improve performance, especially for dynamic objects like RigidBodies and CharacterBodies. On top of that, avoid translating, rotating, or scaling CollisionShapes to benefit from the physics engine's internal optimizations.

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.