Skip to content

Instantly share code, notes, and snippets.

@lyuma
Created October 15, 2020 16:02
Show Gist options
  • Save lyuma/c707c74486a74112bc5a2791dda92154 to your computer and use it in GitHub Desktop.
Save lyuma/c707c74486a74112bc5a2791dda92154 to your computer and use it in GitHub Desktop.
Tool script for Godot 4.0.dev which renames a bone or a blendshape.
@tool
extends EditorPlugin
func _enter_tree():
add_tool_menu_item("Rename bone or blendshape", self, "callback")
# add_import_plugin(import_plugin)
func callback(ud):
var nodes:Array = get_editor_interface().get_selection().get_selected_nodes()
for node in nodes:
if node is MeshInstance3D:
var nodem:MeshInstance3D = node
var nm:ArrayMesh = nodem.mesh as ArrayMesh
var mynm:ArrayMesh = nm # Workaround script bug
if nm is ArrayMesh:
if nm.get_blend_shape_count() == 0:
print("No blend shapes found yet! Added a sample one.")
var sa:Array = nm.surface_get_arrays(0)
var pt = nm.surface_get_primitive_type(0)
nm.clear_surfaces()
nm.add_blend_shape("Test " + str(nm.get_blend_shape_count()))
nm.add_surface_from_arrays(pt, sa)
var bsn = mynm.get_blend_shape_name(0)
print("Old blend shape name 0 " + bsn)
nm.set_blend_shape_name(0, str(OS.get_datetime()))
print("Blend shape changed from " + bsn + " to " + mynm.get_blend_shape_name(0))
elif node is Skeleton3D:
var skel:Skeleton3D = node
var skelx:Skeleton3D = node # Avoid infinite loop due to GDScript bugs
var bn:String = skel.get_bone_name(0)
print("Old bone name 0 " + bn)
skel.set_bone_name(0, str(OS.get_datetime()))
print("Bone name changed from " + bn + " to " + skelx.get_bone_name(0))
# Causes infinite loop???
# print("Bone name changed from " + bn + " to " + skel.get_bone_name(0))
func _exit_tree():
remove_tool_menu_item("Rename bone or blendshape")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment