这是一个非常重要且容易混淆的问题,Blender 中 “激活对象(active object)” 与 “选中对象(selected objects)” 是两个不同的概念,尤其在脚本和操作(如编辑模式、UV 操作)中有重大区别。
名称 | 含义 | 可有多个? | 用途 |
---|---|---|---|
选中对象 (obj.select_get() == True ) |
在 3D 视图中高亮黄色(或橙色)的对象 | ✅ 多个 | 常用于批量操作、移动、删除等 |
激活对象 (bpy.context.view_layer.objects.active ) |
当前“主要操作目标”对象 | ❌ 仅一个 | 所有编辑模式、材质、UV、骨骼等命令都只针对它 |
你可以同时选中 5 个物体,但只有 1 个是“激活”的。
例如在 Blender 中按住 Shift
依次点选多个物体,最后点的那个是 激活对象(边框是黄色),其余是 选中对象(边框是橙色)。
❌ 如果你没有设置某个物体为“激活对象”,即使选中了它,也不能进入它的编辑模式。
例如你执行:
obj.select_set(True) # 只是选中
bpy.ops.object.mode_set(mode='EDIT') # ❌ 报错:没有激活对象
但如果你写:
bpy.context.view_layer.objects.active = obj
bpy.ops.object.mode_set(mode='EDIT') # ✅ 正确
就可以进入编辑模式。
for obj in bpy.data.objects:
if obj.name.startswith("wall_"):
obj.select_set(True) # 多选
bpy.context.view_layer.objects.active = obj # 设置当前操作目标
bpy.ops.object.mode_set(mode='EDIT') # ✅ 进入它的编辑模式
# 在编辑模式下执行操作
bpy.ops.object.mode_set(mode='OBJECT') # 退出
操作 | 是否需要激活对象? |
---|---|
bpy.ops.object.mode_set(mode='EDIT') |
✅ 是 |
bpy.ops.uv.smart_project() |
✅ 是(必须处于激活对象的编辑模式) |
obj.location = ... |
❌ 不需要(只要对象存在) |
材质赋值、修改名称等 | ❌ 不需要激活 |