如何使用python更改blender中对象的属性

时间:2018-05-02 14:46:59

标签: python blender

我目前正在Blender中使用游戏引擎。我想知道如何通过脚本更改对象的属性,如位置,旋转,颜色,以及更改对象中的相关变量。

scene = bpy.data.scenes["Scene"]
scene.Cube.diffuse_color = [0]=red [1]=green [2]=blue

在上面的示例中,我尝试更改多维数据集的颜色,但它失败并显示错误“无法分配给文字”。我该如何解决?

2 个答案:

答案 0 :(得分:0)

一些建议

  1. 在开始在Blender中编码之前,你必须确定自己在做什么,因为除非要找到解决问题的方法,否则很难。
  2. 始终关注the documentation
  3. Blender有一个隐藏的控制台,您可以通过拖放UI的较高部分来显示它;每次在UI中执行某些操作(移动对象,更改颜色,...)时,此处显示相应的Python命令: enter image description here
  4. 关于您的问题

    以下是一个简单的代码段,向您展示如何在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更适合询问搅拌机问题。