Как изменить свойства объектов в блендере с питоном - PullRequest
0 голосов
/ 02 мая 2018

В настоящее время я использую игровой движок в Blender. Мне было интересно, как я могу изменить свойства объекта с помощью скрипта, такие как положение, вращение, цвет и изменить связанные переменные в объектах.

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

В приведенном выше примере я попытался изменить цвет куба, но он завершился неудачно с ошибкой «Невозможно назначить литералу». Как я могу решить это?

Ответы [ 2 ]

0 голосов
/ 07 мая 2018

Во-первых, ошибка, которую вы получаете, состоит в том, что код, который вы показываете, не является допустимым кодом Python, чтобы изменить значение цвета, вам нужно иметь индекс ([0]), прикрепленный к имени свойства, и значение для присвоения на другой стороне знака =.

color[0] = 0.1

Можно присвоить одно и то же значение нескольким свойствам в одной строке -

color[0] = color[1] = color[2] = 0.2

Вы также можете назначить все четыре значения (цвет включает в себя альфа) свойству color, используя tuple -

red = blue = green = alpha = 0.2

color = (red, green, blue, alpha)

Теперь о том, что вы пытаетесь сделать -

Существует два способа доступа к данным блендера, bpy используется только для доступа к данным во время моделирования, текстурирования и т. Д.

Когда игровой движок работает, bpy недоступен, вам нужно использовать bge для доступа к любым данным из сценариев, которые вы назначаете контроллеру python.

Чтобы получить то, что вы пытаетесь сделать, сначала включите цвет объекта для материала, это можно найти в параметрах в настройках материала . Если этот параметр включен, вы можете настроить цвет объекта -

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']

Вы можете найти пример кода на многих страницах API для типов игровых движков и найдете blender.stackexchange - лучшее место для того, чтобы задавать вопросы блендерам.

0 голосов
/ 03 мая 2018

Пара предложений

  1. Перед тем, как приступить к написанию кода в Blender, вы должны быть уверены в том, что делаете, потому что если вам не станет трудно найти решение вашей проблемы.
  2. Всегда смотрите документацию .
  3. Blender имеет скрытую консоль, которую можно отобразить, перетаскивая верхнюю часть пользовательского интерфейса; каждый раз, когда вы что-то делаете в пользовательском интерфейсе (перемещаете объект, меняете цвет, ...), здесь отображается соответствующая команда Python: enter image description here

О вашем вопросе

Ниже приведен простой фрагмент, показывающий, как изменить цвет куба по умолчанию в 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

Вы также можете получить доступ к преобразованиям объекта через соответствующие свойства (location, вращение_выбора - для вращений Эйлера 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))

Надеюсь, это хороший совет для начала.

...