よくアドベンチャーやロールプレイングなどで見られる登場人物同士による会話劇を
Unityで作ってみました。
と言っても、現在関わっているプロジェクトで必要になったので実装+実際に会話劇を組み立てる人たちが作業しやすいように補助ツールなども作ったというお話です。
(概念的なお話)
UnityEditor側でやっていることは2つあり、
・Editor上で会話劇(以降2Dデモと呼称)を作る
・外部ファイルを読み込んで2Dデモを自動生成する
です。
#1.Editor上で2Dデモを作る#
書いてその通り、Editor上で2Dデモを作れる機能です。
そもそもこれが無いと2Dデモを作れません。
仕組みとしては、
- [背景を表示する]
- [BGMを再生する]
- [テキストAを表示する]
- [立ち絵Aを表示する]
- [テキストAを消す]
- [テキストBを表示する]
- [立ち絵Bを表示する]
という感じでアクション(「立ち絵を表示する」や「テキストを表示する」)を
順に登録したアクションリストを作り、
順番に再生していくだけというよくある仕組みです。
これを実現するために使用しているのが、ScriptableObjectです。
ScriptableObjectはよくパラメータや参照を格納する用途で使われると思います。
こいつを利用して、
1.アクションのパラメータと参照を格納するScriptableObject(を継承したクラス)を用意する
例:立ち絵を表示するアクションクラス(仮称:Event_StandChara)
ー 立ち絵として表示する画像の参照
ー 立ち絵prefabの参照(gameobject側にイメージをaddcomponentしておき、そこに画像をセット)
ー 立ち絵の表示位置
ー 立ち絵反転フラグ etc...
2.複数のアクションを格納するScriptableObject(を継承したクラス)を用意する
3.2のScriptableObjectを解析し、再生する仕組みを用意する
とう流れで実現しています。
【実際に表示される画面】
※素材はプロ生ちゃんをお借りしています。
一応、現在台詞を話しているキャラに対してフォーカスを当てたり、話していないキャラはグレーをかけたり、
立ち絵の優先順位を変えたり(話しているキャラを手前に表示)など細かい部分は内部で勝手にやってくれるようにしてます。
(エディタは社内で使っているので見せらないよ!)
#2.外部ファイルを読み込んで2Dデモを自動生成する#
もう一つは外部ファイルを読み込んで、自動でアクション生成+アクションを格納するScriptableObjectを作成するという機能です。
これを用意したのはスクリプターさんが実際に2Dデモを作ろうとした時に、
毎回Unityを起動して、2Dデモを作るエディタを起動して、一つ一つアクションを登録していくという作業で結構な時間を取られてしまうということが起きてしまうため、
出来るだけ簡単にかつUnityが無くても作業が出来るように外部ファイルからでも2Dデモを作れる仕組みを用意しました。
機能としてはシンプルです。
ルールに従って作られた外部ファイルを読み込み、解析し、ScriptableObjectを作成し、保存する。
これだけです。
外部ファイル自体はtextファイルを使用しています。
基本的に社内で使用して、最終的にアクションを格納するScriptableObjectを作成して出力するので
特に凝る必要はないと考えました。
textファイルの方に予め用意したルールを元にアクションを記述してもらい、それをローダーに通すと自動で2Dデモファイルを作成してくれるので、特に難しい操作はないです。
その内、ちゃんと記事にしたいなーと思っていますがだいたいはやらないフラグ…