将FBX模型转为Unity可动画模型时代码报错,求修复方案
修复Blender Python脚本的FBX导入与动画导出错误
错误原因分析
你遇到的AttributeError: 'bpy_prop_collection' object has no attribute 'load'是因为**bpy.data.objects是Blender存储场景物体的集合对象,没有load方法**。导入FBX模型需要使用Blender专门的导入操作符,而非直接调用集合的不存在方法。
修复后的完整脚本
import bpy # 清空当前场景(可选,避免原有物体干扰) bpy.ops.object.select_all(action='SELECT') bpy.ops.object.delete() # 1. 正确导入FBX模型 bpy.ops.import_scene.fbx(filepath="model.fbx") # 获取导入的模型(假设导入的第一个物体是目标模型) model = bpy.context.selected_objects[0] # 2. 创建并添加骨架到场景 # 创建骨架数据 armature_data = bpy.data.armatures.new("MyArmature") # 创建骨架物体并关联数据 armature_obj = bpy.data.objects.new("MyArmature", armature_data) # 将骨架添加到场景 bpy.context.collection.objects.link(armature_obj) # 设置骨架为活动物体并进入编辑模式创建骨骼(示例创建一根骨骼) bpy.context.view_layer.objects.active = armature_obj bpy.ops.object.mode_set(mode='EDIT') # 创建根骨骼 root_bone = armature_data.edit_bones.new("Root") root_bone.head = (0, 0, 0) root_bone.tail = (0, 0, 1) # 返回物体模式 bpy.ops.object.mode_set(mode='OBJECT') # 3. 将模型绑定到骨架(设置父子关系并自动权重) # 选中模型和骨架 bpy.context.view_layer.objects.active = armature_obj model.select_set(True) armature_obj.select_set(True) # 设置父子关系并启用自动权重绑定 bpy.ops.object.parent_set(type='ARMATURE_AUTO') # 4. 调整骨架姿势创建动画(示例:设置关键帧) bpy.ops.object.mode_set(mode='POSE') # 选择根骨骼 pose_bone = armature_obj.pose.bones["Root"] # 设置初始姿势关键帧(第1帧) pose_bone.location = (0, 0, 0) pose_bone.keyframe_insert(data_path="location", frame=1) # 设置第50帧的姿势 pose_bone.location = (1, 0, 0) pose_bone.keyframe_insert(data_path="location", frame=50) bpy.ops.object.mode_set(mode='OBJECT') # 5. 导出适合Unity的FBX(包含骨架和动画) bpy.ops.export_scene.fbx( filepath="animation.fbx", use_selection=True, # 只导出选中的模型和骨架 use_armature_deform_only=True, # 仅导出影响模型的骨骼 bake_anim=True, # 烘焙动画 bake_anim_use_all_bones=True, bake_anim_use_nla_strips=True, bake_anim_use_all_actions=True, bake_space_transform=True # 确保坐标适配Unity )
关键修正点说明
- FBX导入:用
bpy.ops.import_scene.fbx替代错误的bpy.data.objects.load,导入后通过bpy.context.selected_objects获取导入的模型。 - 骨架创建:仅创建
armature数据不够,必须创建对应的场景物体并添加到集合,还要进入编辑模式创建骨骼(示例中创建了一根基础骨骼,你可以根据需求编辑)。 - 模型绑定:使用
ARMATURE_AUTO类型的父子关系,自动为模型添加权重,确保模型能跟随骨架动画。 - 导出设置:添加Unity适配的导出参数,比如烘焙动画、仅导出影响模型的骨骼等,避免导出冗余数据。
内容的提问来源于stack exchange,提问作者Talented Developer
相关产品推荐
相关产品推荐

