今回は、Unityで2D向けのRPGを制作する際の会話イベントをFungusを使って作ります。
Fungusは、RPG等の会話イベントを簡単に作成できるアセットです。機能が豊富な上に、無料で使えるので初心者をサポートしてくれる超強力なアセットです。
ここ1か月くらいは、ずっとPygameを使ってゲーム開発を行っていたので、久しぶりにUnityを使いますね。久々に使って感じたこととして、やはり定期的にUnityにも触れておく必要があるなと。
FFやDQ風の会話イベントの作成【Unity2D】
まずは、見た目の部分からということで、それっぽいマップを作っておきます。会話イベント自体は別にマップがなくても問実装出来るので問題ありません。
ちなみに、真ん中にいる勇者が主人公で、左下にいるおじいさんがテスト用NPCです。
今回は、プレイヤーである勇者がおじいさんに接触したら会話イベントを発生させるようにします。
主人公とおじいさんには、それぞれBox Collider2Dをアタッチしておきます。
プレイヤーは、スクリプトによって予め矢印キーで移動できるようにしています。プレイヤーの動かし方は、検索するといくらでも出てくるので、自分の使いやすい方法を選んでください。
Fungusを使って会話イベントを作成する
Fungusは、アセットストアから入手できます。
Fungusは現在アセットストアでは入手出来ないのでgithubからダウンロードするようにお願いします。
NPC用のスクリプトを作成
まずは、NPC用のスクリプトを作成します。
会話イベントの発生は、OnCollisionEnter2Dメソッドで行います。この時に気をつけたいのが「Collision other」の後ろに「UnityEngine.」をつけることです。
これをつけないと、FungusのCollision2DとUnityEngineのCollision2Dで競合が発生してエラーになりますので。
一応プレイヤーと判断するために、主人公に「Player」タグを設定しておきます。プレイヤーと衝突が確認できたら、コルーチンを呼び出し会話イベントが発生します。
その他の記述に関しては、この後の設定と共に説明します。
スクリプトを保存したらNPCにアタッチします。
NPCオブジェクトのインスペクターを開くと、今作ったスクリプトとフローチャートが追加されていると思います。このフローチャートで会話イベントの制御を行います。
作成したスクリプトのMessageに「test」と入力しておきます。
会話イベントに登場するキャラクター情報を登録する
続いて、NPCのキャラクター情報を登録します。
「Tools」→「Fungus」→「Create」→「Character」を選択します。
名前をNPC等に変更して、PortraitsのSizeに1と入力して会話ボックスに表示させたい画像を設定します。さまざまな画像を登録しておくことで、会話内容によってキャラクターの表情を変える事も出来ます。
私の使用している素材は、向きが違いますが表情は全て同じなので1つだけ設定しています。
フローチャートの編集を行う
NPCオブジェクトを選択して「Open Flowchart Window」をクリックします。
左上にある「New Block」をクリックして、「Execute On Event」を「Message Received」に変更します。続いてMessageにtestと入力します。
ここにあるブロックを先ほどのスクリプトにあるコルーチンから実行して、指定したブロックが終了するまで処理を待つようになります。
「+」ボタンでコマンドの設定が出来るので「Narrative/Say」をクリックします。
Characterに先ほど作成したNPCを設定して、Portraitに表示させたい画像を設定します。
Story Textには喋らせたい文字を入力してください。
Sayコマンドは、その名の通り文字を喋らせるコマンドになりますので、覚えておいてください。コマンドの種類は多岐に渡り、これらのコマンドを駆使しながらさまざまな会話イベントを作ります。
ここまで完成したらゲームを実行して、NPCに接触してみます。
どうやら上手く機能してくれているようです。現状ダイアログが表示された状態でもプレイヤーを動かせますので、会話中はプレイヤーの動きをストップさせるとより良いと思います。