Help us understand the problem. What is going on with this article?

UnityでアドベンチャーゲームやRPGで見られる登場人物同士による会話劇を作れるツールを作ってみた

More than 3 years have passed since last update.

よくアドベンチャーやロールプレイングなどで見られる登場人物同士による会話劇を
Unityで作ってみました。
と言っても、現在関わっているプロジェクトで必要になったので実装+実際に会話劇を組み立てる人たちが作業しやすいように補助ツールなども作ったというお話です。
(概念的なお話)

UnityEditor側でやっていることは2つあり、
・Editor上で会話劇(以降2Dデモと呼称)を作る
・外部ファイルを読み込んで2Dデモを自動生成する
です。

1.Editor上で2Dデモを作る

書いてその通り、Editor上で2Dデモを作れる機能です。
そもそもこれが無いと2Dデモを作れません。

仕組みとしては、
1. [背景を表示する]
2. [BGMを再生する]
3. [テキストAを表示する]
4. [立ち絵Aを表示する]
5. [テキストAを消す]
6. [テキストBを表示する]
7. [立ち絵Bを表示する]
という感じでアクション(「立ち絵を表示する」や「テキストを表示する」)を
順に登録したアクションリストを作り、
順番に再生していくだけというよくある仕組みです。

これを実現するために使用しているのが、ScriptableObjectです。
ScriptableObjectはよくパラメータや参照を格納する用途で使われると思います。
こいつを利用して、
1.アクションのパラメータと参照を格納するScriptableObject(を継承したクラス)を用意する
例:立ち絵を表示するアクションクラス(仮称:Event_StandChara)
 ー 立ち絵として表示する画像の参照
 ー 立ち絵prefabの参照(gameobject側にイメージをaddcomponentしておき、そこに画像をセット)
 ー 立ち絵の表示位置
 ー 立ち絵反転フラグ etc...
2.複数のアクションを格納するScriptableObject(を継承したクラス)を用意する
3.2のScriptableObjectを解析し、再生する仕組みを用意する
とう流れで実現しています。

【実際に表示される画面】
※素材はプロ生ちゃんをお借りしています。
スクリーンショット 2015-12-16 0.18.42.png
一応、現在台詞を話しているキャラに対してフォーカスを当てたり、話していないキャラはグレーをかけたり、
立ち絵の優先順位を変えたり(話しているキャラを手前に表示)など細かい部分は内部で勝手にやってくれるようにしてます。
(エディタは社内で使っているので見せらないよ!)

2.外部ファイルを読み込んで2Dデモを自動生成する

もう一つは外部ファイルを読み込んで、自動でアクション生成+アクションを格納するScriptableObjectを作成するという機能です。
これを用意したのはスクリプターさんが実際に2Dデモを作ろうとした時に、
毎回Unityを起動して、2Dデモを作るエディタを起動して、一つ一つアクションを登録していくという作業で結構な時間を取られてしまうということが起きてしまうため、
出来るだけ簡単にかつUnityが無くても作業が出来るように外部ファイルからでも2Dデモを作れる仕組みを用意しました。

機能としてはシンプルです。
ルールに従って作られた外部ファイルを読み込み、解析し、ScriptableObjectを作成し、保存する。
これだけです。

外部ファイル自体はtextファイルを使用しています。
基本的に社内で使用して、最終的にアクションを格納するScriptableObjectを作成して出力するので
特に凝る必要はないと考えました。

textファイルの方に予め用意したルールを元にアクションを記述してもらい、それをローダーに通すと自動で2Dデモファイルを作成してくれるので、特に難しい操作はないです。

その内、ちゃんと記事にしたいなーと思っていますがだいたいはやらないフラグ…

gumi
Python、Erlang、Elixir などちょっと変わった技術でゲームをつくったりする会社。プログラマだけじゃなく、企画、デザイン、イラストなど開発全般揃ってます。
http://gu3.co.jp
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした