スクリプト兵法書~MAXScript編~

スクリプトで広がるCG表現。

Vol.7:スクリプトからアニメーションを操作する場合の注意点

前回「Vol.6:アニメーションの分離と差し替え」は、Autodesk 3ds Max でアニメーションデータを扱うための方法を解説しました。今回は、スクリプトからアニメーションを操作するときに気をつけたい点を紹介していきます。

メイン画像

使用するシーンを準備する

まずは、今回の作例で使用するシーンを準備します。せっかくなので、これまで勉強したことを活かし、シーン自体もスクリプトで作成してみましょう。



 p = undefined
 for i=0 to 8 do (
   b = Box length:10 width:10 height:10
   b.Name = "src:Box00" + ((i+1) as String)
   b.pos.z = i*15
   
   b.parent = p
   p = b
 )
 
 for i=0 to 8 do (
   b = execute("$'src:Box00" + ((i+1) as String) + "'")
     
   xCtrl = b.rotation.controller.x_rotation.controller
   zCtrl = b.rotation.controller.z_rotation.controller
   
   for j=0 to 100 do (
     addNewKey xCtrl j
     xCtrl.keys[j+1].value = 20*sin(360.0/100*(i*10+j))
     addNewKey zCtrl j
     zCtrl.keys[j+1].value = 10*sin(360.0/100*(i*10+j))
   )
 )

ここで execute() という関数が初めて出てきたので解説をしておきます。この関数は、引数として与えた文字列をスクリプトとして実行する関数です。これを使うことで、スクリプトの中で生成した文字列を使ってスクリプトを実行し、その結果を取得することができます。今回はループの中で使用して、 Box を取得するのに使用しています。

早速、このスクリプトを実行しましょう。すると、生き物のようにウネウネと動くオブジェクトが生成されます。
更に、動きの付いていないオブジェクトも作成してみます。



 p = undefined
 for i=0 to 8 do (
   b = Box length:10 width:10 height:10
   b.Name = "dest:Box00" + ((i+1) as String)
   b.pos.z = i*15
   
   b.parent = p
   p = b
 )

これで、準備が整いました。

シーンを生成

スクリプトで生成したシーン

オブジェクトへのアニメーション転送

では、新しいオブジェクトにアニメーションを転送してみます。



 for i=0 to 8 do (
   s = execute("$'src:Box00" + ((i+1) as String) + "'")
   d = execute("$'dest:Box00" + ((i+1) as String) + "'")

	 d.rotation.controller = copy s.rotation.controller

	 notifyDependents d.rotation.controller
 )

いい感じですね :-)。ついでにボーンについても同様の操作をしてみましょう。

Bone の作り方はちょっと特殊です。作るためには BoneSys というインターフェイスを使用します。



 BoneSys.createBone startPos endPos zAxis

ボーンの生成

BoneSysBone を生成

マニュアルを見ると、3つの引数を与える必要があります。これに合わせてスクリプトも書き替えましょう。



 p = undefined
 for i=0 to 8 do (
   b = (BoneSys.createBone [0,0,i*15] [0,0,(i+1)*15] [0,1,0])
	 b.length = 15
   b.Name = "bone:Bone00" + ((i+1) as String)
   
   b.parent = p
   p = b
 )

SEARCH
MAIL MAGAZINE
RSS
 
▲ページTOPへ戻る
© WORKS CORPORATIONS INC. ALL RIGHTS RESERVED.