A Godot 4 addon that lets you organize CollisionShape3D nodes into logical groups under a CollisionObject3D (StaticBody3D, RigidBody3D, CharacterBody3D, Area3D, etc) without flattening every shape into a single level of the scene tree.
Godot currently requires CollisionShape3D to be a direct child of a CollisionObject3D for it to register with the physics server. That's fine for a handful of shapes, but it forces a flat hierarchy for anything with many shapes - compound colliders, procedurally clustered shapes, or shapes you want to toggle on/off as a batch. CollisionShapeGroup3D works around that limitation entirely in GDScript, with no changes to your project's collision layers, physics settings, or body types.
Features
- Group any number of CollisionShape3D nodes under one container node.
- Children are plain, native CollisionShape3D nodes, no custom shape classes, no scripts to attach manually.
- Live transform tracking. Move or animate individual shapes, or the whole group, and the physics server stays in sync automatically.
- Enable/disable an entire group of shapes at once via a single disabled property on the group node.
- Fully event-driven. No per-frame polling cost when nothing is moving.
- Optional editor-warning suppression.
Removing the editor warning
By default, CollisionShapeGroup3D extends Node3D. Because its child CollisionShape3D nodes aren't a direct child of a CollisionObject3D, Godot's native engine code still shows its built-in configuration warning on each one ("CollisionShape3D only serves to provide a collision shape to a CollisionObject3D derived node..."). This warning is purely cosmetic, collision works correctly regardless.
If you'd rather not see it, create a StaticBody3D node instead of a Node3D, and manually attach the addon collision_shape_group_3d.gd to it. This is a deliberate choice, not a "Change Type" conversion - Godot's Change Type editor action doesn't reliably preserve script attachment across a type swap, so this addon ships two separate scripts for the two modes instead of asking you to convert one into the other.
When used this way, the script automatically:
- removes the StaticBody3D node from the physics simulation, so it has no effect on physics as a body in its own right
- hides the StaticBody3D/CollisionObject3D inspector properties that don't apply to a grouping node (collision layer/mask, physics material, etc.), since none of them do anything in this configuration
All of this happens automatically once the script is attached, you don't need to configure anything beyond choosing which node type and script to use. Both modes work identically at runtime; the choice is purely about whether you want to see the cosmetic warning.
Changelog for version 0.2
No changelog provided for this version.