Blenderで戦車を壁にぶつけるスクリプト(その1)

「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)

コメント

タイトルとURLをコピーしました