Attention: Here be dragons
This is the latest
(unstable) version of this documentation, which may document features
not available in or compatible with released stable versions of Godot.
Checking the stable version of the documentation...
Collision shapes (2D)
Esta guía explica:
The types of collision shapes available in 2D in Godot.
Using an image converted to a polygon as a collision shape.
Performance considerations regarding 2D collisions.
Godot proporciona muchos tipos de formas de colisión, con diferentes equilibrios de rendimiento y precisión.
You can define the shape of a PhysicsBody2D by adding one or more CollisionShape2Ds or CollisionPolygon2Ds as direct child nodes. Indirect child nodes (i.e. children of child nodes) will be ignored and won't be used as collision shapes. Also, note that you must add a Shape2D resource to collision shape nodes in the Inspector dock.
Nota
When you add multiple collision shapes to a single PhysicsBody2D, you don't have to worry about them overlapping. They won't "collide" with each other.
Las primitivas formas de colisión
Godot proporciona los siguientes tipos de formas de colisión primitivas:
SeparationRayShape2D (designed for characters)
WorldBoundaryShape2D (infinite plane)
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
Advertencia
Godot currently doesn't offer a built-in way to create 2D convex collision shapes. This section is mainly here for reference purposes.
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.
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 utilizan TileMaps para el diseño de niveles, las formas cóncavas son el mejor enfoque para la colisión de un nivel.
You can configure the CollisionPolygon2D node's build mode in the inspector. If it is set to Solids (the default), collisions will include the polygon and its contained area. If it is set to Segments, collisions will only include the polygon edges.
You can generate a concave collision shape from the editor by selecting a Sprite2D and using the Sprite2D menu at the top of the 2D viewport. The Sprite2D menu dropdown exposes an option called Create CollisionPolygon2D Sibling. Once you click it, it displays a menu with 3 settings:
Simplification: Higher values will result in a less detailed shape, which improves performance at the cost of accuracy.
Shrink (Pixels): Higher values will shrink the generated collision polygon relative to the sprite's edges.
Grow (Pixels): Higher values will grow the generated collision polygon relative to the sprite's edges. Note that setting Grow and Shrink to equal values may yield different results than leaving both of them on 0.
Nota
If you have an image with many small details, it's recommended to create a simplified version and use it to generate the collision polygon. This can result in better performance and game feel, since the player won't be blocked by small, decorative details.
To use a separate image for collision polygon generation, create another Sprite2D, generate a collision polygon sibling from it then remove the Sprite2D node. This way, you can exclude small details from the generated collision.
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.