アニメ『サクラダリセット』
リセットと言っているタイムリープの考え方が面白いです。世界のあらゆる物をセーブした状態に戻すことらしいです。使った本人は記憶がセーブ時に戻ってしまうので、よくわからない能力です。
続きのドミノエディタです。セーブしたデータを、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
左上を倒し始めるとこのように動きます。

コメント