循环不';t工作,3行python代码

循环不';t工作,3行python代码,python,python-2.7,blender,blender-2.76,Python,Python 2.7,Blender,Blender 2.76,这个问题是关于blender、python脚本的 我在这方面完全是新手,所以请原谅我提出的任何愚蠢/新手问题/评论 我简化了它(3行代码),使它更容易解决问题 我需要的是一个代码,为循环函数中的每个对象添加一个新的uv贴图 但这段代码将只向一个对象添加多个新UV贴图 import bpy for x in bpy.context.selected_objects: bpy.ops.mesh.uv_texture_add() 我在这里干什么 谢谢注意:我对搅拌机不太熟悉 似乎bpy.op

这个问题是关于blender、python脚本的

我在这方面完全是新手,所以请原谅我提出的任何愚蠢/新手问题/评论

我简化了它(3行代码),使它更容易解决问题

我需要的是一个代码,为循环函数中的每个对象添加一个新的uv贴图

但这段代码将只向一个对象添加多个新UV贴图

import bpy
for x in bpy.context.selected_objects:
    bpy.ops.mesh.uv_texture_add()
我在这里干什么

谢谢

注意:我对搅拌机不太熟悉

似乎
bpy.ops
操作取决于
bpy.context
的状态。每个操作也可以覆盖上下文

我假设
uv\u texture\u add()

试着这样做:

import bpy

for x in bpy.context.selected_objects:
    override = { "selected_objects": x }
    bpy.ops.mesh.uv_texture_add(override)
应该像一次只选择一个对象那样运行操作

来源:

uv\u texture\u add
操作符仅适用于当前活动对象。通过设置
scene.objects.active

import bpy
for x in bpy.context.selected_objects:
    bpy.context.scene.objects.active = x
    bpy.ops.mesh.uv_texture_add()

与Sambler所说的类似,我总是使用:

for active in bpy.context.selected_objects:
    bpy.context.scene.objects.active = active
    ...
在为Blender编程时,我使用的这两行比任何其他行都多(当然除了
import bpy

我想我第一次在这里学到这一点,如果你想好好介绍一下它是如何工作的:

他在文章中使用了:

# Create a list of all the selected objects
selected = bpy.context.selected_objects

# Iterate through all selected objects
for obj in selected:
    bpy.context.scene.objects.active = obj
    ...
他的评论很好地解释了这一点,但我会更进一步。正如您所知,Blender缺少内置的多对象编辑。如果您试图从python或Blender的gui本身设置活动对象的值,则可以编辑活动对象,也可以编辑活动对象。因此,尽管我们每次写的都略有不同,但效果是一样的。我们在bpy.context.selected_objects中使用
for active循环所有选定对象,然后活动对象设置为循环中的下一个对象,该循环迭代所有使用
bpy.context.scene.objects.active=active
选择的对象。因此,无论我们在循环中做什么,都会对选择中的每个对象执行一次,并且我们对相关对象执行的任何操作都会对所有对象执行。如果我们只使用第一行并将代码放入
for
循环,会发生什么

for active in bpy.context.selected_objects:
    ...

无论我们在循环中做什么,都会对选择中的每个对象执行一次,但我们对相关对象执行的任何操作都只会对活动对象执行,但执行次数与选定对象的次数相同。这就是为什么我们需要从循环中设置活动对象。

我修复了缩进,但请告诉我缩进是否是您执行它的方式。是的@eandersson是的,我以前是这样执行它的,谢谢,但是,我真的不明白为什么在脚本编辑器中会出现问题:,感谢您的编辑:)您可能想在
x
上执行一些操作。我不懂搅拌机,所以我不能建议你在这里做任何你想做的事。给你一袋苹果,你就做袋中苹果的
:吃袋
。你可能想要袋子里的苹果:吃苹果
x
-一个随机名称-依次指向对象中的每个对象,但您不能使用
x
。您可能需要更好地学习Python和blender,然后才能编写一行代码…甚至在这里提问(请参阅)。我感谢您的帮助,但不幸的是,它做了同样的事情。。。。感谢您的帮助,我非常感谢:)对于覆盖,您希望设置
活动\u对象
而不是
选定的\u对象
。不幸的是,在这个操作符中使用覆盖似乎不起作用。这就像一个符咒^ ^,这就是为什么我喜欢stackoverflow,因为像你这样的人^ ^,,,我知道我必须更改活动对象,但不知道如何更改,非常非常感谢兄弟,你拯救了这一天:德萨姆勒:如果你还告诉OP你在哪里发现了搅拌机操作员是如何工作的,这将是一个更好的答案。