Unityでゲームを作っていると、ゲームに会話イベントを導入したくなることがあります。やはりRPGやノベルゲームといったジャンルではキャラクター同士の会話がないと面白くないですよね。
しかしUnityの機能にはそういった会話を簡単に作れる機能はなく、しかも標準機能だけだと会話イベントを自作するのはかなり難しいという問題があります。実際、私も会話機能を自作したことがあるのですがさすがに複雑な分岐のある会話までは扱えず、今までストーリー性の強いゲームを作るのは諦めてきました。
ただそのような中で改めてアセットストアを見たところ、会話イベントを簡単に作れるという「Dialogue System for Unity」がたまたまセールで安くなっていたので思い切って購入してみました。使ってみると結構癖が強いアセットでしたが、確かに会話の流れを簡単に制作・制御できたのでストーリー性のあるゲームの開発に便利だなと思った次第です。
そこでここではDialogue Systemの基本的な使い方を説明していきますね。
Dialogue System for Unityとは?
はじめに、「Dialogue System for Unity」(以下、Dialogue System)はUnityに会話システムを追加することができるアセットです。このアセットを使えば複雑な会話の流れを視覚的に作成できるほか、クエストやカットシーン等も作ることができます。
定価だと高価なアセットなのですが、たまにセールで半額以下になることもあるのでストアをこまめにチェックしてチャンスを逃さないようにするとよいでしょう。
Dialogue Systemの基本的な使い方
では前置きはこのくらいにして、ここから本題のDialogue Systemの使い方をご説明していきます。といってもDialogue Systemはかなり多機能で全部を説明することはできないので、ここでは「これくらいは覚えておかないと使いこなせないよ」という部分に絞って書いていきますね。
導入方法
まず導入方法は他のアセットと同じで、パッケージマネージャからDialogue Systemを選んで任意のプロジェクトにインポートすればOKです。
ちなみにインポートすると「ようこそ画面」的なウィンドウが表示されると思うので、例えば
- 2Dの物理演算
- Input System
- Text Mesh Pro
- Cinemachine
等を使用している場合は対応するチェックボックスにチェックを入れておきましょう。そうするとDialogue Systemがそれらと連携できるようになります。
新しいダイアログデータベースの作成
次に新しいダイアログデータを作成します。
まずインポートしたDialogue Systemのフォルダの「Prefabs」(Plugins/Pixel Crushers/Dialogue System/Prefab)の中に「Dialogue Manager」というプレハブがあるのでそれをシーンにドラッグ&ドロップしてください。
そうしたらDialogue System Controllerコンポーネントの「Initial Database」の欄の右側の「Create」ボタンを押して、適当なフォルダにダイアログのデータベースを新規作成しましょう。
これで下準備ができました。
会話の流れの作り方
次にメインとなる会話の流れを作っていきます。
先ほど作ったデータベースをダブルクリックすると「Dialogue」ウィンドウが表示されます。最初は何もなく灰色のグリッドが描かれている「Conversations」タブが開かれていると思いますが、ここに会話文を作っていきます。
ただこのままでは何も操作できないので、まずは新しい会話を作っておく必要があります。下の図の「+」ボタンを押して会話を新規作成しましょう。
すると何やら「START」と書かれたオレンジ色の四角(ノードと言います)が作られました。以降はこれを起点として会話の流れを作っていくこととなります。では試しに新しいノードを作り、適当な会話文を打ち込んでみましょう。新しいノードを作るには、基本的に既存のノードを右クリックして「Create Child Node」を選択すればOKです。
今度は灰色のノードが作られました。これをクリックするとインスペクターに文章を打ち込む欄が出てくるので必要な項目にテキストを記入していきます。
一番重要なのが下の「Dialogue Text」で、ここが会話文の本文になります。ここではテストなので適当な文章を書いておきます。
あとはこの繰り返しで会話の流れを作っていくのですが、もう一つ重要な点として「アクター」の概念があります(※登場キャラクターのことです)。デフォルトでは「Player」と「NPC」の2つのキャラクターが用意されているので、ここではとりあえずその2人を使って説明します。
まずノードを選択したときのインスペクターをよく見て頂くと、
- Actor
- Conversant
という項目があると思います。Actorは喋っているほう、Conversantは話を聞いているほうです。これはDialogue Systemでは重要な設定で、例えば顔グラフィックを表示する場合にどちらのグラフィックを表示するか?といった判定などに使われます。
最初に作った灰色のノードでは
- Actor:NPC
- Conversant:Player
となっており、NPCから話しかけているという状況になっています。もしこれを変更したい場合は各項目のドロップダウンメニューから対象のアクターを選べばOKです。
ちなみにActorを変更するとノードの色が変わり、誰がそのノードで喋るのかが分かりやすい仕組みになっていて便利です(例えばPlayerがアクター側だとノードが青くなります)。
会話を分岐させる方法
さて、これで一直線の会話が作れるようになりましたが、やはりストーリーを作るうえでは会話を分岐させたいこともよくあると思います。
Dialogue Systemで会話を分岐させるのは簡単で、あるノードの子として複数のノードを作るとそれが分岐として認識されるようになります。具体的には下のような感じです。
このようにすると分岐したノードは選択肢として表示され、下の画像のようにプレイヤーが選べる形で表示されます。なお分岐点の直下のノードは会話文ではなく選択肢として表示されることにご注意ください。具体的には、上の例だと選択肢A・B・Cは下のように表示されます。
会話イベントを発生させる方法
ここまでの作業で会話の流れができたので、あとはシーン上で会話イベントを発生させてダイアログを表示するようにしていきます。会話イベントの発生は次の2パターンが多いと思うのでそれについて説明しますね。
- キャラクターに近づいたら会話イベントを発生させる
- シーン開始時に自動的に会話イベントを発生させる
キャラクターに近づいたら会話イベントを発生させる場合
まずはキャラクターに近づいたら会話イベントを発生させる場合です。動作サンプルは次のGIFのとおり。
このようなイベントの発生は次のような手順で作ることができます。
- 適当なゲームオブジェクト(ここでは球)にリジッドボディとコライダーをアタッチする(これをPlayerとする)。
- 別の適当なゲームオブジェクトに適当な大きさのコライダーをアタッチし、それをトリガーにしておく(これをNPCとする)。
- NPC側に「Dialogue System Trigger」コンポーネントをアタッチして設定を行う。
- 「Reference Database」欄に任意のデータベースを登録する。
- 「トリガー」を「On Trigger Enter」に変更する。
- Actionsの「Add Action」から「Start Conversation」を選択する。
- Conversation欄で適当な会話を選択する。
シーン開始時に自動的に会話イベントを発生させる場合
お次はシーン開始時に自動的に会話イベントを発生させる場合です。こちらはもっと簡単で、次の手順で実現することができます。
- 適当なゲームオブジェクトに「Dialogue System Trigger」をアタッチする。
- 「トリガー」を「On Start」にする。
- 「Reference Database」欄に任意のデータベースを登録する。
- 「Add Action」ボタンを押して「Start Conversation」を選択する。
- Conversation欄で適当な会話を選択する。
ダイアログ(メッセージウィンドウ)のレイアウトを変更する方法
さて、ここまでの内容でDialogue Systemの基本的な使い方を一通りご紹介しました。
ただ実際にダイアログを出してみた方ならわかると思いますが、デフォルトのダイアログのレイアウトは日本人にとっては見慣れない形式になっており戸惑う方も多いかと思います。そこで最後は、ダイアログのレイアウトをJRPGやノベルゲームのような見慣れたものに変更する方法についてです。
やり方は簡単で、Dialogue System Managerの「Dialogue UI」欄に付属のテンプレートを選択して登録するだけです。
具体的には
- JRPG形式:JRPG Template Standard Dialogue UI
- ビジュアルノベル形式:VN Template Standard Dialogue UI
といったものがあらかじめ用意されているのでそれを使ってください。見本は次のとおり。
もしウィンドウの画像など見た目を変更する場合は、テンプレートをコピーして改造するのが一番手っ取り早いです。
おわりに
以上、Dialogue System for Unityの基本的な使い方を一通りご説明しました。
なかなか癖があるアセットなので使い方で戸惑ってしまうこともあるかと思いますが、使いこなせれば非常に便利なアセットですので、ぜひ上記の内容を参考に使い方をマスターしていただければと思います。
この記事がUnityでのゲーム開発のお役に立てば幸いです。