ドアを開閉する

車両モデルのドアの開閉は、TpF2モデルの アニメーション の機能を使って実現します。このページはドアの開閉についての説明ページですが、ここではまず TpF2モデルのアニメーションの仕組みについて説明します。

TpF2モデルのアニメーションは、キーフレームアニメーション として実装します。キーフレームアニメーションは、タイムライン上のいくつかの時点(キーフレーム)における座標変換(移動、回転、拡大縮小など)を指定しておき、その間の動きは自動的に補完することでアニメーションを実現する方法です。TpF2では一般的に、キーフレームを表す時刻と座標変換の組のリストを、 aniファイル と呼ばれる形式のファイルで保存しておきます。

アニメーションではもうひとつ、イベント について理解しておく必要があります。イベントとは、ゲームエンジン側で定められているモデルの動きのタイミングのことで、たとえば「左側のドアを開ける (open_doors_left)」「右側のドアを閉める (close_doors_right)」といったイベントが定められています。実際のアニメーションの設定では、モデルのひとつひとつのオブジェクトに対して、「open_doors_left イベントが発生したらこの ani ファイルのアニメーションを実行する」という形で、アニメーションを設定していきます。

ドアの開閉に関しては、次の6つのイベントがあります。

イベント名

タイミング

open_doors_left

左側のドアを開ける(左側にホームがある状態で駅に停車)

open_doors_right

右側のドアを開ける(右側にホームがある状態で駅に停車)

open_all_doors

すべてのドアを開ける(鉄道車両では使用しない)

close_doors_left

左側のドアを閉める(左側にホームがある状態で駅を発車)

close_doors_right

右側のドアを閉める(右側にホームがある状態で駅を発車)

close_all_doors

すべてのドアを閉める(鉄道車両では使用しない)

それでは、ここからは実際にドア開閉のアニメーションの実装方法を、順を追って説明します。

1. Blender でキーフレームアニメーションを作成する

モデルエディタにはアニメーションの設定された fbx モデルを解釈して ani ファイルを作成する機能があるため、Blender 上でアニメーションを作成し、アニメーション込みで fbx を出力するのがもっともお手軽な方法です。Blender でアニメーションを作成する場合、ポイントは次の2点です。

  • アニメーションはすべてストリップ化する。ストリップ化せずアクションのままでもモデルエディタでインポートはできますが、ani ファイルが作成できません。

  • ストリップ名をイベント名にする。

では、実際に手順を見ていきます。まず、ワークスペースを Animation にし、下側のエリアの表示を「タイムライン」にしてください(ドープシートの方が慣れている方はもちろんそちらでも構いません)。

用意ができたら、オブジェクトにキーフレームを設定していきます。まず、アニメーションを設定するオブジェクト(ここでは DoorRR、右側後方ドア)を選択します。タイムライン上のカーソルが「1」にあることを確認して、右クリックメニューから「キーフレーム挿入」を選択します。キーフレーム挿入メニューが表示されるので、「位置」を選択してください。

操作が完了すると、タイムライン上にオブジェクトとアクション(DoorRRAction)の行が追加され、キーフレームを表すオレンジ色のひし形が表示されます。また、サイドバーに表示されるトランスフォームの「位置」の欄が黄色く表示されるようになります。これで、初期状態のキーフレームが設定できました。

続いて、アニメーション動作の完了時のキーフレームを設定します。タイムライン上のカーソルを「24」まで動かしてください。この数字はフレーム数を表しており、Blender のデフォルトのフレームレートは 24 のため、このカーソル位置は開始から1秒後を表しています。

Blender 上のフレームレートは、プロパティエディタの出力プロパティで変更できます。キーフレームの時刻はモデルエディタでのインポート時に秒に変換されるため、ここでのフレームレートはとくに制限なく自由に設定できます。

カーソルを動かしたら、次はこの時刻でのオブジェクトのトランスフォームを設定します。ドアを移動させて、ドアが開いた状態にしてください。ここでは X 軸方向に -1.2m だけ移動させます。サイドバーでは、移動させた項目だけがオレンジ色になり、変更していない項目は緑色で表示されます。

この状態で、もう一度右クリックメニューから「キーフレーム挿入」を選択し、キーフレームを追加してください。タイムラインの「24」の位置にも、キーフレームを表すオレンジ色のひし形が表示されます。

ここまでできたら、タイムラインの再生ボタンを使って画面上でアニメーションを再生できます。試してみてください。

2. アクションをストリップ化する

ここまでで作成したアニメーションは、Blender の アクション として設定されています。アニメーションを TpF2 上で使えるようにするには、アクションをストリップに変換しておく必要があります。

ストリップへの変換は簡単です。下側のエリアの表示を「ノンリニアアニメーション」に変更すると、オブジェクトごとの作成済みのアクションのリストが表示されます。このリストのアクション名の右側にあるアイコンボタンをクリックすると、アクションをストリップに変換できます。

ストリップ化すると、オブジェクトのグループの中に新しく「NlaTrack」という行が追加されます。

ストリップ化したら、追加されたストリップが選択された状態で、サイドバーの「アクティブストリップ」の「名前」にアニメーション実行のトリガーとなるイベント名(ここでは open_doors_right)を入力してください。ストリップ名が入力したイベント名になります。

これで、一つのオブジェクトに対する一つのアクションの設定が完了しました。他のオブジェクトに対しても、同じようにキーフレームの設定とストリップ化を行って、すべてのアニメーションを設定してください。

3. モデルをエクスポートする

Blender 上でのアニメーションの設定が終われば、FBX のエクスポート以降の手順は通常の手順と同じです。ただし、エクスポートに当たって 2点ほど注意が必要です。

  • 出力する前に、タイムライン(またはドープシート、ノンリニアアニメーション)のカーソル位置を「1」または「0」に合わせてください。アニメーションの途中にカーソルがある状態で出力すると、その状態がモデルの標準の状態として出力されてしまいます。

  • エクスポート画面では、サイドバーの「アニメーションをベイク」にチェックが入っており、4つあるチェックボックスのうち「NLA ストリップ」だけにチェックが入った状態でエクスポートしてください。

エクスポートしたモデルをモデルエディタで読み込むと、Blender 内でストリップ名として設定したイベントがアニメーション選択のドロップダウンリストに表示され、アニメーションを再生できるようになります。このまま「SAVE」ボタンでモデルを保存すれば、自動的に ani ファイルが作成され、mdl ファイル内にアニメーションの設定が追加されます。

4. TpF モデル内でのアニメーション設定の構成

アニメーション設定の手順は以上ですが、最後に上の手順で作成されたアニメーションがファイル内でどのように設定されているかを見ていきます。

まず、モデルエディタによって生成された ani ファイルは、オブジェクト名をファイル名としてres/models/animation/vehicle/train/(モデル名)/(イベント名) 下に出力されます。ani ファイルは lua スクリプトの書かれたテキストファイルで、単にキーフレームの時刻(ミリ秒単位)と座標変換のリストとなっています。

それぞれの ani ファイルは、mdl ファイルの各オブジェクトの設定の中で、イベント名と関連付けられて参照されています。

5. ドア閉めのアニメーション(逆再生)

ドア閉めのアニメーションについては、上の手順で Blender 上のアニメーションとして作成することももちろんできますが、単にドア開けアニメーションの逆再生とすることもできます。この場合、ドア開けアニメーション付きの TpF2 モデルを作成した後で、mdl ファイルを直接編集して実装します。

次のように、ドア開けアニメーションの ani ファイルを指定し、forward = false の指定を加えることで、逆再生のアニメーションを実行できます。

最終更新