一、先打印出要重命名的内容,不真正重命名
代码:
import bpy for arm in bpy.context.selected_objects: if arm.type != 'ARMATURE': print("%s bu shi gu jia" % str(arm.name)) continue print('Dealing with', arm.name) for object in arm.children: for vg in object.vertex_groups: new_name = arm.name +'_'+vg.name print('Renaming to', new_name) print('Done!')
带中文注释代码:
import bpy # 遍历当前选中的所有对象 for arm in bpy.context.selected_objects: # 如果当前对象不是骨架类型,则跳过 if arm.type != 'ARMATURE': continue # 打印当前正在处理的骨架对象的名称 print('正在处理', arm.name) # 遍历骨架的所有子对象 for object in arm.children: # 遍历子对象的所有顶点组 for vg in object.vertex_groups: # 创建新的名称,格式为骨架名称加下划线加顶点组名称 new_name = arm.name + '_' + vg.name # 打印要重命名的新名称 print('重命名为', new_name) # 打印完成信息 print('完成!')
注意:要先选中骨骼,然后再运行代码
二、真正重新命名代码:
import bpy # 遍历当前选中的所有对象 for arm in bpy.context.selected_objects: # 如果当前对象不是骨架类型,则跳过 if arm.type != 'ARMATURE': continue # 打印当前正在处理的骨架对象的名称 print('正在处理', arm.name) # 遍历骨架的所有子对象 for object in arm.children: # 遍历子对象的所有顶点组 for vg in object.vertex_groups: # 创建新的名称,格式为骨架名称加下划线加顶点组名称 new_name = arm.name + '_' + vg.name # 打印要重命名的新名称 print('重命名为', new_name) # 将骨架的相应骨骼名称改为新的名称 arm.pose.bones[vg.name].name = new_name # 将顶点组的名称改为新的名称 vg.name = new_name # 打印完成信息 print('完成!')
在这段代码中,除了打印出要重命名的新名称外,还添加了实际的重命名操作。具体来说:
-
arm.pose.bones[vg.name].name = new_name
这行代码将骨架中对应顶点组名称的骨骼名称改为新的名称。这里使用了骨架对象的pose
属性来访问骨架的蒙皮绑定信息,然后通过顶点组的旧名称找到对应的骨骼对象,并将其名称更新为新的名称。 -
vg.name = new_name
这行代码将顶点组的名称更新为新的名称。
请注意,这段代码假设骨架的骨骼名称和顶点组的名称是一致的,这样才能正确地找到并重命名对应的骨骼。如果不一致,那么重命名操作可能会失败或者产生意料之外的结果。此外,重命名操作可能会影响依赖于特定名称的动画、约束或其他设置,因此在执行这样的操作前应当谨慎。