ホーム < ゲームつくろー! < ゲームプログラマのためのBlender

ゲームプログラマのためのBlender スクリプト編
その2 オブジェクトの移動・回転・スケール

[Blender Ver2.7.9]


 前章ではBlenderでのスクリプトの記述方法の事始めを見てきました。Blenderのスクリプト内で出来る程は恐ろしい程沢山ありますので、この章からは少しペースアップ、小項目をピックアップしてその記述方法をさささーっと見ていく事にしましょう。



@ オブジェクトの移動、回転、スケールを変更

 オブジェクトはbpy.context.scene.objectsにあります。さらにアクティブ中の物(オレンジ表示の物)であればobjects.activeでObject型として取得できます。Object型の移動、回転、スケールはそれぞれ以下のように指定できます:

import bpy
import math

obj = bpy.context.scene.objects.active

# Location
obj.location = ( 3, -2, 0 )

# Rotation using euler
obj.rotation_euler = ( math.radians(45.0), 0, 0 )

# Scale
obj.scale = ( 2.0, 3.0, 4.0 )

#はPythonのコメントです。コメントを英語にしているのは気取っているとかではなく(^-^;、BlenderのText Editorが日本語に対応していないためです(文字化けします)。


〇 Object.location (オブジェクトを移動)

tuple ( x, y, z ) : 移動先の(x, y, z)座標

〇 Object.rotation_euler (オブジェクトを回転)

tuple ( x, y, z ) : 各軸の回転角度(ラジアン)

〇 Object.scale (オブジェクトのスケールを変更)

tuple ( x, y, z ) : 各軸方向のスケール値


tupleというのはPythonの型の一つで複数の値の塊です。一度設定すると値を変更できないのが特徴です。似たようなものにlistがありますが、こちらは[ ]で数値をくくります:

tuple ( 1, 2, 3 )
list [ 1, 2, 3 ]



A オフセット

 移動や回転、スケールなどで今の値に対してオフセットしたい場合は加減算の演算子が使えます。ただしタプルごとの加減はできないため一工夫必要です:

import bpy
import math
from mathutils import *

obj = bpy.context.scene.objects.active

# Location
obj.location.x += 3
obj.location.y -= 2

vec = Vector( (1, 2, 3) )
obj.location += vec;

# NG
# obj.location += ( 1, 2, 3 )

[+=]というのは右辺の値を左辺に加算する演算子です。上の例ではオブジェクトの今のx座標に3を加えている事になります。[-=]は減算します。

個々の座標ではなくて、例えば( 2, 4, 5 )の方向に動かしたい、などのようなベクトルの加減をしたい事も多いのですが、タプル型は直接加減出来ないため、そのままだとエラーになってしまいます。この場合、一度ベクトルをVector型として定義します。上で「Vector( ( 1, 2, 3 ) )」というのがその定義です。このVector型はmathutilsというモジュールに定義されています。Vector型であればコードのように加減が可能です。



B 回転モード

 軸回転(x, ,y, z)では回転の順番で結果が変わってしまいます。回転モードはその軸の順番を指定します:

import bpy
import math

obj = bpy.context.scene.objects.active

obj.location = ( 0, 0, 0 )
obj.rotation_mode = 'XZY'
obj.rotation_euler = ( math.radians(45), math.radians(45), math.radians(45) )


〇 Object.rotation_mode (オブジェクトの回転モードを変更)

enum  : 回転モードを表す列挙型