Python脚本在Blender中有多种使用场合,Blender提供了API给python脚本,脚本中需要import bpy
来操纵Blender。对于这个API能做什么,官方文档中有说明:只要是界面上可以编辑的(如场景,模型,粒子等等),它都可以编辑。
我现在想观察一下Python脚本具体有哪些使用场合。
1.Python控制台
Python控制台是一种编辑器类型,在其中可以直接运行Python脚本:
其中下面脚本代码被运行:
scene = bpy.context.scene
for obj in scene.objects:
obj.location.x += 1.0
首先获得了当前上下文中的scene
对象,然后对scene中的objects
进行遍历,对他们执行操作:让他们的location(位置)的x值递增1。执行后会发现场景中所有物体的位置x值都多了1 。
这里并没有import bpy
,说明在python控制台这个环境中已经默认导入bpy了。
2.文本编辑器(Text Editor)
文本编辑器是另一个编辑器类型。
首先创建一个新的文本
然后填入刚才的脚本(此时需要import bpy)
import bpy
scene = bpy.context.scene
for obj in scene.objects:
obj.location.x += 1.0
然后点 运行脚本
效果同样是移动了物体。
3.插件
3.0.插件代码
这是我的插件文件testPlg.py
的内容:
bl_info = {
"name": "YaksueTestPlg",
"blender": (2, 80, 0),
"category": "Object",
}
import bpy
class ObjectMoveX(bpy.types.Operator):
"""My Object Moving Script""" # Use this as a tooltip for menu items and buttons.
bl_idname = "object.move_x" # Unique identifier for buttons and menu items to reference.
bl_label = "Yaksue Test Operator" # Display name in the interface.
bl_options = {'REGISTER', 'UNDO'} # Enable undo for the operator.
def execute(self, context): # execute() is called when running the operator.
# The original script
scene = context.scene
for obj in scene.objects:
obj.location.x += 1.0
return {'FINISHED'} # Lets Blender know the operator finished successfully.
def register():
bpy.utils.register_class(ObjectMoveX)
def unregister():
bpy.utils.unregister_class(ObjectMoveX)
bl_info
中包含一些关于插件的信息,比如插件名字叫什么,这里我叫“YaksueTestPlg” 。register
和unregister
分别在插件启动和禁用时被调用,这里他们主要工作是对ObjectMoveX
进行注册和注销。ObjectMoveX
继承自bpy.types.Operator
,说明它是一个操作器(Operator)。他的bl_label
指明了这个操纵器在界面中显示的名字,这里叫“Yaksue Test Operator”。execute
函数是这个操纵器运行时被调用的函数,他其中执行了我们之前测试的操作。
3.1.在文本编辑器中测试
如果直接在文本编辑器中运行testPlg.py
,是不会有任何效果的。需要在末尾加上:
if __name__ == "__main__":
register()
这让在文本编辑器运行时可以运行register这个函数。
运行之后,新的操纵器“Yaksue Test Operator”被添加进来,按 F3 搜索这个操纵器,可以看到它:
点击后运行,效果和之前的一样。
3.2.安装插件
菜单中选择Edit,之后选Preference,打开插件分栏,选择安装插件,之后选择testPlg.py
之后可以在插件列表中看到安装的插件:
勾选这个插件后启用他,之后效果和我们上一步的一样。
4. 其他脚本文件
Blender安装目录的scripts
文件夹中有包括插件在内的Python脚本文件,addons
是插件,而startup
中有启动时将载入的脚本,presets
有些预设文件。