@tool extends Node3D @export_tool_button("Generate collisions", "Callable") var generate_col_action = generate_collisions @export_group("Layers and masks") @export_flags_3d_physics var collision_layer @export_flags_3d_physics var collision_mask func get_all_children_of_type(node, type) -> Array: var nodes : Array = [] for child in node.get_children(): if is_instance_of(child, type): nodes.append(child) if child.get_child_count() > 0: nodes.append_array(get_all_children_of_type(child, type)) return nodes func clear_collisions_on_meshes(meshes: Array): for mesh_instance: MeshInstance3D in meshes: for child in mesh_instance.get_children(): child.queue_free() func generate_collisions_on_meshes(meshes: Array): for mesh_instance: MeshInstance3D in meshes: mesh_instance.create_trimesh_collision() func set_collision_mask_on_bodies(bodies: Array): for staticbody: StaticBody3D in bodies: staticbody.collision_layer = collision_layer staticbody.collision_mask = collision_mask func generate_collisions(): var mesh_instances = get_all_children_of_type(self, MeshInstance3D) clear_collisions_on_meshes(mesh_instances) generate_collisions_on_meshes(mesh_instances) var staticbody_instances = get_all_children_of_type(self, StaticBody3D) set_collision_mask_on_bodies(staticbody_instances)