2Dゲームや3Dゲームのフィールド上でNPCとの会話を実装できる無料アセット『Dialogue System』の使い方の備忘録です。
シンプルな機能が嬉しい
2DのRPGゲームとかで、NPCと会話する機能って必須ですよね。前に備忘録として書いたように自作でも全然対応可能ですが、この『Dialogue System』の無料アセットを使えば簡単に実装できます。無料ってのが良いですよね。
【会話機能の自作の備忘録記事】
『Dialogue System』がやれること
『Dialogue System』の使い方の前に、『Dialogue System』がやれることをまとめておきます。
Dialogue Systemでできること
- 簡単で使いやすい対話システムの構築: 3Dプロジェクトと2Dプロジェクトの両方で使用できる、使いやすい対話システムをゲームに組み込むことができます。
- トリガーベースの対話開始: プレイヤーが特定のエリア(トリガーボックス)に入ると、自動的に対話が開始されます。これは
Dialogue Trigger
コンポーネントによって実現されます。 - NPCとの会話:
Dialogue Manager
コンポーネントをNPCキャラクターに追加することで、プレイヤーとの会話を管理できます。 - 柔軟な対話内容のカスタマイズ:
- セリフ:
Dialogue Manager
でNPCのセリフを自由に設定できます。 - キャラクター設定:
Dialogue Character
を作成することで、話者の名前やアイコン画像などを設定できます。 - 効果音: セリフごとに効果音(オプション)を付けることができます。
- イベント: セリフごとにUnityイベントをトリガーし、ゲーム内の特定の動作を実行させることができます。
- セリフ:
- シーン間の対話システムの保持:
Dialogue UI
プレハブをシーンに配置することで、シーンが切り替わっても対話システムが維持されます。 - 操作のカスタマイズ:
Dialogue UI
プレハブから、対話を進めるための操作ボタンを変更できます。 - カスタムロジックの追加:
Dialogue Manager
の関数を利用して、独自の対話ロジックを実装することができます。 - 簡単なドキュメント: 分かりやすいドキュメントが用意されているため、簡単に使用方法を理解できます。
Dialogue Systemの基本的なシステム設計
次に、Dialogue Systemの基本的な設計思想と、その流れを確認しましょう。
Dialogue Systemは、プレイヤーとNPC間の対話を管理するシステムです。主に以下の3つのコンポーネントで構成されています。
- Dialogue Trigger: 対話の開始を検知する
- Dialogue Manager: 対話の内容を管理する
- Dialogue UI: 対話を画面に表示する
これらのコンポーネントが連携することで、柔軟でカスタマイズ可能な対話システムを実現しています。
1. Dialogue Trigger
- 役割: プレイヤーが特定のエリア(トリガーボックス)に入ったことを検知し、
Dialogue Manager
へ通知します。 - 動作:
- プレイヤーに装着され、コライダー(Collider)とリジッドボディ(Rigidbody)またはキャラクターコントローラー(CharacterController)を必要とします。
- コライダーの衝突判定を利用して、プレイヤーがトリガーボックスに入ったことを検知します。
- トリガーが発動すると、
Dialogue Manager
に通知を送信します。
- システム設計上の位置づけ: 対話システムの「入り口」となるコンポーネントで、プレイヤーの行動を起点として対話を開始する役割を担います。
2. Dialogue Manager
- 役割: 対話の内容を管理し、
Dialogue UI
へ情報を送信します。 - 動作:
- NPCに装着され、トリガーとして設定されたコライダー(Collider)と、サウンド再生用のオーディオソース(Audio Source)(オプション)を必要とします。
Dialogue Trigger
からの通知を受け取ります。- 格納されているセリフ、キャラクター情報、効果音、Unityイベントなどのデータを
Dialogue UI
へ送信します。 - カスタム関数を追加することで、独自の対話ロジックを実装できます。
- システム設計上の位置づけ: 対話システムの「心臓部」となるコンポーネントで、対話の内容を保持し、制御する役割を担います。
3. Dialogue UI
- 役割:
Dialogue Manager
から受け取った情報を基に、対話を画面に表示します。 - 動作:
- プレハブとしてシーンに配置されます。シーンが変更されても破棄されないように、プレイヤーには配置しないでください。
Dialogue Manager
から送信されたセリフ、キャラクター情報などを画面に表示します。- 対話を進めるための操作ボタンを管理します。
- 操作ボタンはプレハブから変更できます。
- システム設計上の位置づけ: 対話システムの「出力装置」となるコンポーネントで、プレイヤーに情報を視覚的に提示する役割を担います。
コンポーネント間のデータの流れ
- プレイヤーが
Dialogue Trigger
のトリガーボックスに入る。 Dialogue Trigger
がDialogue Manager
に通知を送信。Dialogue Manager
が保持している対話データをDialogue UI
に送信。Dialogue UI
が受け取ったデータを基に、画面にセリフやキャラクター情報を表示。- プレイヤーが操作ボタンを押すことで、
Dialogue UI
がDialogue Manager
に次のセリフを要求。 - 3~5を繰り返し、対話が進行。
使い方
それでは、Dialogue Systemの実際の実装方法と実装例を解説します。
ここでは、プレイヤーがNPCに近づくと簡単な会話が始まるというシンプルな例を使って説明します。
実装方法
ステップ 1: プロジェクトの準備
- Unityで新しい2Dプロジェクトを作成します。
- Asset Storeから「Dialogue System」をインポートします。
ステップ 2: NPCのセットアップ
- シーンにNPCとなるスプライトを配置します(例: 2Dスプライトの四角形)。
- NPCに
Dialogue Manager
コンポーネントを追加します。 - NPCに2D用のトリガーとして機能するコライダーを追加し、
Is Trigger
にチェックを入れます(例: Box Collider 2D)。 - (オプション) NPCに音声を再生するための
Audio Source
コンポーネントを追加します。
ステップ 3: Dialogue Managerの設定
Dialogue Manager
コンポーネントのSentences
リストに、会話のセリフを追加します。- 各セリフについて、以下の項目を設定します。
- Dialogue Character: 右クリック -> Create -> Dialogue System -> New Dialogue Character で新しいキャラクターを作成し、名前やSprite画像を設定してアサインします。
- Message: 表示するセリフを入力します。
- Unity Event: (オプション) セリフ表示時に実行したいUnityイベントを設定します。
- Sound Clip: (オプション) セリフ再生時に流したい効果音を設定します。
ステップ 4: プレイヤーのセットアップ
- シーンにプレイヤーとなるスプライトを配置します(例: 2Dスプライトの円形)。
- プレイヤーに
Dialogue Trigger
コンポーネントを追加します。 - プレイヤーに2D用のコライダーとリジッドボディを追加します(例: Circle Collider 2DとRigidbody 2D)。
Rigidbody 2D
のGravity Scale
は0
に設定して、重力の影響を受けないようにします。またはキャラクターコントローラー(CharacterController)をアサインしても大丈夫です。
ステップ 5: Dialogue UIの配置
Assets/Prefabs
フォルダからDialogue UI
プレハブをシーンにドラッグ&ドロップします。- (オプション)
Dialogue UI
プレハブのContinue Button
オブジェクトを選択し、On Click()
イベントで使われているボタン(KeyCode)を変更することで、会話を進めるボタンを変更できます。
実装例:簡単な会話 (2D)
この例では、以下のような簡単な会話を実装します。
- プレイヤーがNPCに近づくと、NPCが「こんにちは!」と言う。
- プレイヤーがボタンを押すと、NPCが「元気ですか?」と言う。
- プレイヤーがボタンを押すと、会話が終了する。
具体的な設定:
NPC (四角形のスプライト)
- Dialogue Manager:
- Sentences:
- Element 0:
- Dialogue Character: “NPC” (事前に作成しておく、Spriteを設定)
- Message: こんにちは!
- Unity Event: (なし)
- Sound Clip: (なし)
- Element 1:
- Dialogue Character: “NPC”
- Message: 元気ですか?
- Unity Event: (なし)
- Sound Clip: (なし)
- Element 0:
- Sentences:
- Collider: Box Collider 2D (Is Trigger: オン)
- Audio Source: (なし)
プレイヤー (円形のスプライト)
- Dialogue Trigger: (デフォルト設定のまま)
- Collider: Circle Collider 2D
- Rigidbody 2D: (Gravity Scale: 0)
Dialogue UI
- (デフォルト設定のまま)
実行結果
- ゲームを実行します。
- プレイヤーをNPCに近づけます。
Dialogue UI
に「こんにちは!」と表示されます。- 設定したボタン(デフォルトではスペースキー)を押すと、「元気ですか?」と表示されます。
- 再度ボタンを押すと、会話が終了し、
Dialogue UI
が非表示になります。
2Dゲームにおける注意点
- コライダーは必ず2D用のものを使用してください (Box Collider 2D, Circle Collider 2Dなど)。
- Rigidbody 2Dを使用する場合、重力の影響を考慮して
Gravity Scale
を調整してください。