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

「Blenderで戦車を壁にぶつけるスクリプト(その1)」の続きです。

他のblendファイルのオブジェクトをappendするには、bpy.ops.wm.append()を使います。
各引数は、このように指定します。

blendfile = "blendファイル(戦車)のフルパス"
bpy.ops.wm.append(
    filepath = blendfile, 
    filename = "戦車",
    directory= blendfile + "/Object/")

戦車は、appendした後、剛体設定をします

panzer=bpy.data.objects['戦車']
bpy.context.scene.objects.active=panzer
bpy.ops.rigidbody.object_add(type='ACTIVE')

また、剛体の戦車自体を自発的にアニメーションさせるので、kinematicをTrueにします。

panzer.rigid_body.kinematic=True

全スクリプトです。長いです。

import bpy

bpy.ops.transform.resize(value=(0.5, 0.5, 0.5))
bpy.ops.transform.translate(value=(-10,30,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,19):
	bpy.ops.object.duplicate()
	bpy.ops.transform.translate(value=(1,0,0))

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=(0,-10,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)

blendfile = "blendファイル(戦車)のフルパス"

bpy.ops.wm.append(
    filepath = blendfile, 
    filename = "戦車",
    directory= blendfile + "/Object/")

panzer=bpy.data.objects['戦車']
bpy.context.scene.objects.active=panzer

bpy.ops.rigidbody.object_add(type='ACTIVE')
panzer.rigid_body.kinematic=True

bpy.ops.transform.translate(value=(0, 70, 4.5))

bpy.context.scene.frame_set(1)
bpy.context.active_object.keyframe_insert(data_path="location", index=-1)

bpy.context.scene.frame_set(30)
bpy.ops.transform.translate(value=(0,-150,0))
bpy.context.active_object.keyframe_insert(data_path="location", index=-1)

bpy.context.scene.frame_set(1)
blender sim 3

コメント

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