UnityでBMSスキン用のエフェクト素材を作成するツール

世のスキン制作者の方々がどのようなツールを使っているかはわかりませんが、さすがにボムなどのアニメーション素材を1コマずつ描くのは骨が折れるでしょうから、何らかのアニメーションを作れるソフトを使っていると思います。 また、作成したアニメーションをLR2やbeatorajaで使える状態にするには全コマを並べて1枚の画像にする必要があるため、面倒な思いをしている人もいるかも知れません。

Unityはゲームエンジンですが、豊富なスクリプト機能で面倒な作業を自動化でき、パーティクル機能を使えば簡単にそれっぽいエフェクトを作れそうです。 また、無料でも十分使える上、アセットストアに素材がたくさん公開されています。 そこで、Unityを素材制作ツールとして使う雛型のプロジェクトを作ってみました。

サンプルを改造してボムを作る方法

  1. 上記リポジトリをクローンまたはダウンロードし、Unityエディタ(2017以降のバージョン推奨)で開きます。
  2. AnimationCapture/Examples/BombExample.unity シーンを開きます。
  3. シーン内に置いてあるオブジェクト Bomb_1 がボム本体で、プレハブになっています。ボムに変更を加えたらプレハブに適用してやるか、あるいは新しいプレハブにしておきましょう。他のシーンからそのプレハブを参照する場合や、ボムを複数個置いて見た目を確認したい場合などに役立ちます。
  4. Unityエディタで再生中にゲーム画面内の▶ボタンを押すとボムを発火します。赤い●のボタンを押すと発火と同時に録画し、プロジェクトのフォルダ直下の Capture フォルダ内に全コマ並べた画像を保存します。連射すると一部分が不発になることがあるので、録画時は再生後時間を置いてから行ってください。
  5. Bom_1 の子の階層にあるオブジェクトをいじるとボムを改変できます。サンプルは3つのパーティクルシステムと1個のスプライトのアニメーションから成り立っています。
  6. 既に設置されているボムを使わず、一から作成したエフェクト、通常の3Dオブジェクト、アセットストアからダウンロードしてきたエフェクト素材などを配置して撮影することもできます。ただし、ちゃんとエフェクトが発火するようにするにはボタン押下時のイベントと結び付る(場合によってはスクリプトを書く)必要があります。

f:id:excln:20170917222057p:plain

f:id:excln:20170917222101p:plain

録画設定の変更

スキンによって各アニメーションパーツのコマの大きさやコマの数が決まっています。場合によっては中心点をずらしたりアスペクト比を変更したりする必要もあります。 このような録画設定を調整するには、シーン内の Main Camera にアタッチされている Animation Capture コンポーネントのパラメータを変更して下さい。 最終的に出力する画像の大きさ、コマの大きさ、フレームレート、取り込み範囲などを指定できます。 取り込み範囲はゲーム画面に黄色い枠で表示されます。これを狭くすると出力画像にはボムが大きく描かれることになります。

Over Active DX+ / Over Active DX 3 などのスキンではちょっと変わった値*1にする必要があるので、設定済みのシーンをあらかじめ用意しておきました。 BombExample_OADX.unity を使って録画すると適切な設定で保存されます。

注意

  • スプライトのアニメーションデータ(時間経過に伴ってスプライトの大きさや透明度を変えてます)をいじるには専用の編集ウィンドウを出現させる必要があります。詳しくはUnityのアニメーション機能を調べてみて下さい。
  • 自分で追加した画像をパーティクルで使う場合には、マテリアルを作成してそこに画像をテクスチャとして貼り付ける必要があります。
  • 実際にゲームに使った際の見た目を調整しやすいように、編集用のシーンでは背景画像を表示しています。もちろん出力画像には映らないようになっています。サンプルでは縞模様となっていますが、これをプレイ画面のスクリーンショットなどに差し替えてみるとよいでしょう。
  • 現在、加算合成用のエフェクトのみに対応しています*2。ボム以外のエフェクトを作る場合は注意してください。
  • プロジェクト自体はMITライセンスとしていますが、サンプルを改変した場合も含めて作成したエフェクトにはクレジット表記等は必要ありません。もちろん、アセットストアから拾ってきたエフェクトなど第三者の作った素材を利用する場合はそちらの規約に従ってください。

解説

Animation Capture スクリプトで取り込み枠の表示、キャプチャしたアニメーションを1枚の画像にまとめる処理を行っています。 1枚にまとめる処理はシェーダーを使って回りくどいことをしているのですが、他の方法が思いつきませんでした。

ちなみに、単純にゲーム画面に映っている映像を連番png画像に保存するだけなら非常に単純なスクリプトで行うことができます。 ちょっとしたBGAの素材を作ることもできます。 Unityを使える方は、ゲーム以外のコンテンツの制作にも使ってみてはいかがでしょうか。

スキン制作時にはもうひとつ、元画像から切り抜く座標と画面上に張り付ける座標の計算という面倒な作業がありますが、こちらもUnityのスクリプト機能やエディタ拡張などを駆使して支援する方法を模索しています。 うまくいったらこのリポジトリに追加する予定です。

*1:中心点がずれている、横に引き伸ばす前提のアスペクト比になっている等。OADX系以外でも、この仕様のコマ数を変更したり画像全体のサイズを拡大縮小したりしたような仕様のスキンが多くあります。

*2:出力画像は必ず黒背景の不透明画像となります。