一、先列印出要重新命名的內容,不真正重新命名
程式碼:
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
這行程式碼將頂點組的名稱更新為新的名稱。
請注意,這段程式碼假設骨架的骨骼名稱和頂點組的名稱是一致的,這樣才能正確地找到並重新命名對應的骨骼。如果不一致,那麼重新命名操作可能會失敗或者產生意料之外的結果。此外,重新命名操作可能會影響依賴於特定名稱的動畫、約束或其他設定,因此在執行這樣的操作前應當謹慎。