「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
コメント