【blender】bpy操作:选择对象和激活对象

这是一个非常重要且容易混淆的问题,Blender 中 “激活对象(active object)”“选中对象(selected objects)”两个不同的概念,尤其在脚本和操作(如编辑模式、UV 操作)中有重大区别。


1. 区别说明

名称 含义 可有多个? 用途
选中对象 (obj.select_get() == True) 在 3D 视图中高亮黄色(或橙色)的对象 ✅ 多个 常用于批量操作、移动、删除等
激活对象 (bpy.context.view_layer.objects.active) 当前“主要操作目标”对象 ❌ 仅一个 所有编辑模式、材质、UV、骨骼等命令都只针对它

✅ 2. 举个例子说明

你可以同时选中 5 个物体,但只有 1 个是“激活”的。

例如在 Blender 中按住 Shift 依次点选多个物体,最后点的那个是 激活对象(边框是黄色),其余是 选中对象(边框是橙色)。


❗ 3. 编辑模式只能进入激活对象!

❌ 如果你没有设置某个物体为“激活对象”,即使选中了它,也不能进入它的编辑模式。

例如你执行:

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')  # ✅ 正确

就可以进入编辑模式。


✅ 4. 代码示例:选择多个但激活单个

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')  # 退出

5. 小结

操作 是否需要激活对象?
bpy.ops.object.mode_set(mode='EDIT') ✅ 是
bpy.ops.uv.smart_project() ✅ 是(必须处于激活对象的编辑模式)
obj.location = ... ❌ 不需要(只要对象存在)
材质赋值、修改名称等 ❌ 不需要激活

你可能感兴趣的:(散装知识点,blender)