アニメ『サクラダリセット』
リセットと言っているタイムリープの考え方が面白いです。世界のあらゆる物をセーブした状態に戻すことらしいです。使った本人は記憶がセーブ時に戻ってしまうので、よくわからない能力です。
続きのドミノエディタです。セーブしたデータを、Blenderで読み込んで、ドミノを配置します。ドミノエディタが使いやすくなってきたら、たくさんのドミノを使ってドミノ倒しをやろうと思っています。
ドミノの数がいくら増えても、本物のドミノと違って、失敗しても、リセットできるところがうれしいです。
左がドミノエディタで、右がBlenderで読み込んだ後の配置です。ずいぶん違いますがそのうち合わせていこうと思っています。
Blenderで読み込むには、以下のスクリプトを流すだけです。
(途中に出てくるtakkというユーザ名は変更します)
def addobj( x, y, ch ): if ch!="0": bpy.ops.object.select_all(action='DESELECT') bpy.context.scene.objects.active=cube cube.select=True bpy.ops.object.duplicate() bpy.ops.transform.translate(value=(x,-y,1)) print(ch) if ch=="2": bpy.ops.transform.rotate(value=-math.pi/2,axis=(0,0,1)) if ch=="3": bpy.ops.transform.rotate(value= math.pi/4,axis=(0,0,1)) bpy.ops.transform.translate(value=(-0.6, -0.6, 0)) if ch=="4": bpy.ops.transform.rotate(value= -math.pi/4,axis=(0,0,1)) bpy.ops.transform.translate(value=( 0.6, -0.6, 0)) if ch=="5": bpy.ops.transform.rotate(value= math.pi/4,axis=(0,0,1)) bpy.ops.transform.translate(value=( 0.6, 0.6, 0)) if ch=="6": bpy.ops.transform.rotate(value= -math.pi/4,axis=(0,0,1)) bpy.ops.transform.translate(value=(-0.6, 0.6, 0)) if ch=='#': bpy.ops.object.mode_set(mode='EDIT') bm=bmesh.from_edit_mesh(bpy.context.object.data) bm.faces.ensure_lookup_table() bm.faces[3].material_index=1 bpy.ops.object.mode_set(mode='OBJECT') import bmesh,math cube=bpy.data.objects['Cube'] bpy.ops.transform.resize(value=(0.5,0.17,1)) bpy.ops.rigidbody.object_add(type='ACTIVE') bpy.data.materials['Material'].diffuse_color=(0,0,0) m=bpy.data.materials.new('Material.Black') m.diffuse_color=(1,1,0) bpy.context.object.data.materials.append(m) filename = "c:/Users/takk/Desktop/savedata.txt" f=open(filename) lines=f.readlines() for line in lines: lis=line.split(',') if len(lis) >= 3: x=int(lis[0]) y=int(lis[1]) ch=lis[2] addobj(x,y,ch) bpy.ops.mesh.primitive_plane_add() bpy.ops.transform.resize(value=(99,99,1)) bpy.ops.rigidbody.object_add(type='PASSIVE') bpy.ops.object.select_all(action='DESELECT') cube.select=True bpy.ops.object.delete() camera=bpy.data.objects['Camera'] camera.location=(10,20,60) camera.rotation_euler[0]=0 camera.rotation_euler[1]=0 camera.rotation_euler[2]=math.pi/2 bpy.data.scenes['Scene'].rigidbody_world.time_scale=3
左上を倒し始めるとこのように動きます。
コメント