一、先打印出要重命名的内容,不真正重命名

代码:

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 这行代码将顶点组的名称更新为新的名称。

请注意,这段代码假设骨架的骨骼名称和顶点组的名称是一致的,这样才能正确地找到并重命名对应的骨骼。如果不一致,那么重命名操作可能会失败或者产生意料之外的结果。此外,重命名操作可能会影响依赖于特定名称的动画、约束或其他设置,因此在执行这样的操作前应当谨慎。

 

posted on 2024-04-18 00:51  大话人生  阅读(80)  评论(0编辑  收藏  举报