Unityの2DRPGには村人などのNPCとの会話が重要と考えていたので、会話のさせ方を勉強してみました。
やりたいこと
- 操作キャラクタとNPCに会話させたい
準備するもの
Unity のアセット「Fungus」
「Fungus」は 無料で使える会話イベントのエンジンのようです。
多機能のようでこれから少しずつ覚えていこうと思います。まずは基本的な会話のさせ方を学ぼうと思います。
操作できるキャラクターの設定
キャラクターの設定は以下のものを使用します。
a1026302.hatenablog.com
設定
[Fungus] インポート
[AssetStore]から[Fungus] を検索します。
assetstore.unity.com
[PackageManager]から[Fungus]を選択し[Import]ボタンをクリックします。
[Import Unity Package]のサブウィンドウが表示されるので[Import]ボタンをクリックします。
[Assets]に[Fungus]と[FungusExamples]が追加されます。
追加された2つのフォルダの主な内容です。
- [Fungus] はフォントや[Fungus]のスクリプト
- [FungusExamples] は[Fungus]で作られたサンプル
フローチャートを出して会話
「Flowchart」というGameObject作成
[Tools] -> [Fungus] -> [Create] -> [Flowchart] で作成します。
[Hierarchy]に [Flowchart] が追加されます。
Flowchart作成
[Flowchart]を選択後、右側の[Inspector]タブから[Flowchar(Script)]の[Open Flowchart Window]ボタンをクリックします。
[Flowchart]というサブウィンドウが表示されるので[New Block]というボタンをクリックします。
[Inspector]が以下のように切り替わります。
右下の[+]をクリックして[Narrative] -> [Say]を選択します。
[Flowchart]の[Inspector]の[Commands]に[Say]が増えます。
[Say]を選択し[Story Text]にメッセージを入力します。
入力後動作確認してみます。
NPCを配置して会話
「Guest」というゲームオブジェクト作成
テスト用NPCを配置します。
会話用のNPCを配置して[Guest]という名前に変更します。
「Guest」というゲームオブジェクトにコンポーネント追加
[Guest]を選択して[Inspector]タブから[Box Collider2D]を追加します。
以下のスクリプトを準備します。
using System.Collections; using System.Collections.Generic; using UnityEngine; using Fungus; [RequireComponent(typeof(Flowchart))] public class NPCController : MonoBehaviour { [SerializeField] string message = ""; GameObject playerObj; Flowchart Flowchart; void Start() { playerObj = Gameobject.FindGameObjectWithTag("Player"); flowChart = GetComponent<Flowchart>(); } private void OnCollisionEnter2D(UnityEngine.Collision2D other) { if (other.gameObject.tag == "Player") { StartCoroutine(Talk()); } } IEnumerator Talk() { flowChart.SendFungusMessage(message); yield return new WaitUntil(() => flowChart.GetExecutingBlocks().Count == 0); } }
[Guest]というゲームオブジェクトに作成したスクリプトをアタッチします。
「Guest」というゲームオブジェクトのタグを変更
プレイヤーの判断用に[Player]に[Player]タグを設定します。
「Character」というゲームオブジェクト作成
[Tools] ->[Fungus] ->[Create] ->[Character]を選択し「Character」というゲームオブジェクトを作成します。
「Character」設定
「Character」というゲームオブジェクトの「Character(Script)」というコンポーネントの[Name Text]を[Guest]に編集する。
「Character(Script)」というコンポーネントの「Portraits」という項目付近に画像をドラック&ドロップする。
画像が登録されたら[Elemet0]を確認する。
フローチャート編集
[Guest]というゲームオブジェクトからフローチャートの編集を行います。
[Hierarchy]から[Guest]を選択して[Inspector]タブのスクリプトの[Message]に[会話練習]と入力します。
[Flowchart]の[Open Flowchart Window]ボタンをクリックします。
[Flowchart]というサブウィンドウが表示されるので[New Block]をクリックします。
[Inspector]が切り替わるので、[Excute On Event]を[Message Received]にします。
[Message]に[会話練習]と入力します。
[+]ボタンをクリックして[Narrative/Say]を選択します。
[Character]を選択します。
[Story Text]に会話の内容を入力します。
実行結果
なんとなく会話できてそうです。
youtu.be