「Blenderで戦車を壁にぶつける」では、手動で、剛体Cubeを積み上げて、アニメーションしましたが、今回はそれをスクリプトでやってみます。
Cubeの角を取るには、このAPIを使います。
bpy.ops.object.modifier_add(type=’BEVEL’)
剛体設定はこのAPIです。床の場合は、PASSIVEを指定します。
bpy.ops.rigidbody.object_add(type=’ACTIVE’)
コピーは、duplicateを使い、同位置でコピーした後に、translateで移動させます。
bpy.ops.object.duplicate()
複数を選択してコピーをしますが、Cubeを選択すると決まっているので、
cube_objs=[o for o in bpy.data.objects if o.name.startswith(‘Cube’)]
このように全Cubeでリストを作り、for文で回してselectしています。
では、実行方法。
Blender起動時のCubeがある状態から始めます。
Scriptingを選びます。
本記事の下の方にあるスクリプトをコピペして、Enterを押します。
このような表示になっていたら成功です。
壁ができています。
全スクリプトです。
import bpy bpy.ops.transform.resize(value=(0.5, 0.5, 0.5)) bpy.ops.transform.translate(value=(-5,0,0.5)) bpy.ops.object.modifier_add(type='BEVEL') bpy.data.materials['Material'].diffuse_color=(0.1, 0.6, 0.6) cube=bpy.data.objects['Cube'] bpy.ops.rigidbody.object_add(type='ACTIVE') cube.rigid_body.use_deactivation=True cube.rigid_body.use_start_deactivated=True cube.rigid_body.collision_shape='MESH' for i in range(0,9): bpy.ops.object.duplicate() bpy.ops.transform.translate(value=(0,0,1)) cube_objs=[o for o in bpy.data.objects if o.name.startswith('Cube')] for o in cube_objs: o.select = True for i in range(0,9): bpy.ops.object.duplicate() bpy.ops.transform.translate(value=(1,0,0)) bpy.ops.mesh.primitive_plane_add() bpy.ops.transform.resize(value=(99, 99, 1)) bpy.ops.rigidbody.object_add(type='PASSIVE') mat=bpy.data.materials.new('Material.001') bpy.context.object.data.materials.append(mat) mat.diffuse_color=(0.6, 0.1, 0.1)
コメント