@tool extends Node3D func _add_inspector_buttons() -> Array: var buttons: Array = [] buttons.push_back({ "name": "Regular cube mesh", "pressed": _add_regular_cube_mesh }) buttons.push_back({ "name": "Internal cube mesh", "pressed": _add_internal_cube_mesh }) buttons.push_back({ "name": "Delete all children", "pressed": func(): for child in get_children(true): child.queue_free() }) return buttons func _add_regular_cube_mesh() -> void: var m = MeshInstance3D.new() var b = BoxMesh.new() m.mesh = b add_child(m, true) m.owner = self m.position.x = 1.5 * get_child_count(true) func _add_internal_cube_mesh() -> void: var m = MeshInstance3D.new() var b = BoxMesh.new() m.mesh = b add_child(m, true, Node.INTERNAL_MODE_BACK) var mat = StandardMaterial3D.new() mat.albedo_color = Color("ff4c4e") b.material = mat # Lock the node in editor. Prevents selection (here for internal nodes) # UNDOCUMENTED # https://github.com/godotengine/godot-proposals/issues/3046 m.set_meta("_edit_lock_", true) m.owner = self m.position.x = 1.5 * get_child_count(true)