Dialogue Systemの使い方【Unity・備忘録】

ゲーム開発
スポンサーリンク

2Dゲームや3Dゲームのフィールド上でNPCとの会話を実装できる無料アセット『Dialogue System』の使い方の備忘録です。

Dialogue System | GUI Tools | Unity Asset Store
Use the Dialogue System from HeneGames on your next project. Find this GUI tool & more on the Unity Asset Store.

シンプルな機能が嬉しい

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つのコンポーネントで構成されています。

  1. Dialogue Trigger: 対話の開始を検知する
  2. Dialogue Manager: 対話の内容を管理する
  3. 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から送信されたセリフ、キャラクター情報などを画面に表示します。
    • 対話を進めるための操作ボタンを管理します。
    • 操作ボタンはプレハブから変更できます。
  • システム設計上の位置づけ: 対話システムの「出力装置」となるコンポーネントで、プレイヤーに情報を視覚的に提示する役割を担います。

コンポーネント間のデータの流れ

  1. プレイヤーがDialogue Triggerのトリガーボックスに入る。
  2. Dialogue TriggerDialogue Managerに通知を送信。
  3. Dialogue Managerが保持している対話データをDialogue UIに送信。
  4. Dialogue UIが受け取ったデータを基に、画面にセリフやキャラクター情報を表示。
  5. プレイヤーが操作ボタンを押すことで、Dialogue UIDialogue Managerに次のセリフを要求。
  6. 3~5を繰り返し、対話が進行。

使い方

それでは、Dialogue Systemの実際の実装方法と実装例を解説します。

ここでは、プレイヤーがNPCに近づくと簡単な会話が始まるというシンプルな例を使って説明します。

実装方法

ステップ 1: プロジェクトの準備

  1. Unityで新しい2Dプロジェクトを作成します。
  2. Asset Storeから「Dialogue System」をインポートします。

ステップ 2: NPCのセットアップ

  1. シーンにNPCとなるスプライトを配置します(例: 2Dスプライトの四角形)。
  2. NPCにDialogue Managerコンポーネントを追加します。
  3. NPCに2D用のトリガーとして機能するコライダーを追加し、Is Triggerにチェックを入れます(例: Box Collider 2D)。
  4. (オプション) NPCに音声を再生するためのAudio Sourceコンポーネントを追加します。

ステップ 3: Dialogue Managerの設定

  1. Dialogue ManagerコンポーネントのSentencesリストに、会話のセリフを追加します。
  2. 各セリフについて、以下の項目を設定します。
    • Dialogue Character: 右クリック -> Create -> Dialogue System -> New Dialogue Character で新しいキャラクターを作成し、名前やSprite画像を設定してアサインします。
    • Message: 表示するセリフを入力します。
    • Unity Event: (オプション) セリフ表示時に実行したいUnityイベントを設定します。
    • Sound Clip: (オプション) セリフ再生時に流したい効果音を設定します。

ステップ 4: プレイヤーのセットアップ

  1. シーンにプレイヤーとなるスプライトを配置します(例: 2Dスプライトの円形)。
  2. プレイヤーにDialogue Triggerコンポーネントを追加します。
  3. プレイヤーに2D用のコライダーとリジッドボディを追加します(例: Circle Collider 2DRigidbody 2D)。Rigidbody 2DGravity Scale0に設定して、重力の影響を受けないようにします。またはキャラクターコントローラー(CharacterController)をアサインしても大丈夫です。

ステップ 5: Dialogue UIの配置

  1. Assets/PrefabsフォルダからDialogue UIプレハブをシーンにドラッグ&ドロップします。
  2. (オプション) 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: (なし)
  • Collider: Box Collider 2D (Is Trigger: オン)
  • Audio Source: (なし)

プレイヤー (円形のスプライト)

  • Dialogue Trigger: (デフォルト設定のまま)
  • Collider: Circle Collider 2D
  • Rigidbody 2D: (Gravity Scale: 0)

Dialogue UI

  • (デフォルト設定のまま)

実行結果

  1. ゲームを実行します。
  2. プレイヤーをNPCに近づけます。
  3. Dialogue UIに「こんにちは!」と表示されます。
  4. 設定したボタン(デフォルトではスペースキー)を押すと、「元気ですか?」と表示されます。
  5. 再度ボタンを押すと、会話が終了し、Dialogue UIが非表示になります。

2Dゲームにおける注意点

  • コライダーは必ず2D用のものを使用してください (Box Collider 2D, Circle Collider 2Dなど)。
  • Rigidbody 2Dを使用する場合、重力の影響を考慮してGravity Scaleを調整してください。
タイトルとURLをコピーしました