我目前正在Blender中使用游戏引擎。我想知道如何通过脚本更改对象的属性,如位置,旋转,颜色,以及更改对象中的相关变量。
scene = bpy.data.scenes["Scene"]
scene.Cube.diffuse_color = [0]=red [1]=green [2]=blue
在上面的示例中,我尝试更改多维数据集的颜色,但它失败并显示错误“无法分配给文字”。我该如何解决?
答案 0 :(得分:0)
以下是一个简单的代码段,向您展示如何在Blender中更改默认多维数据集的颜色:
import bpy
activeObject = bpy.context.active_object #Set active object to variable
mat = bpy.data.materials.new(name="MaterialName") #set new material to variable
activeObject.data.materials.append(mat) #add the material to the object
bpy.context.object.active_material.diffuse_color = (1, 0, 0) #change color
您还可以通过相关属性(位置,rotation_euler - 用于Euler XYZ旋转和缩放)以这种方式访问对象的变换:
>>> object.location
Vector((-2.609607696533203, -3.618044137954712, 1.8581657409667969))
>>> object.rotation_euler
Euler((-0.6668576598167419, 0.697817325592041, -1.8853096961975098), 'XYZ')
>>> object.scale
Vector((1.2768771648406982, 1.4246054887771606, 0.6418209075927734))
希望这是一个很好的提示,让你开始。
答案 1 :(得分:0)
首先,您得到的错误是因为您显示的代码不是有效的python代码,要更改颜色值,您需要将索引([0]
)附加到属性名称并将值附加到assign位于=
符号的另一侧。
color[0] = 0.1
可以在一行中为多个属性分配相同的值 -
color[0] = color[1] = color[2] = 0.2
您还可以使用tuple -
将所有四个值(颜色包括alpha)分配给颜色属性red = blue = green = alpha = 0.2
color = (red, green, blue, alpha)
现在你想要做什么 -
有两种方法可以访问搅拌机数据,bpy仅用于在建模,纹理等时访问数据。
当游戏引擎运行时,bpy不可用,您需要使用bge来访问您分配给python控制器的脚本中的任何数据。
要获得您要尝试的工作,首先为材质启用对象颜色,您可以在options in the material settings下找到它。启用此功能后,您可以调整对象颜色属性 -
import bge
cont = bge.logic.getCurrentController()
own = cont.owner
own.color[0] = 0.2 # red
own.color[1] = 0.3 # green
own.color[2] = 0.4 # blue
可以访问其他对象,使用getCurrentScene()
获取具有对象列表的当前场景,
scn = bge.logic.getCurrentScene()
enemy = scn.objects['enemy']
您可以在game engine types的许多API页面中找到示例代码,并且会发现blender.stackexchange更适合询问搅拌机问题。