前回までで2DRPGのNPCの移動処理をUnityとC#で実現してきました。
前回の記事:
今回の記事ではこのNPCキャラクターの村人と会話できるようにしていきます。
会話用のイベントの実装やメッセージダイアログの表示法などをマスターしていきましょう。
会話用のイベントデータの作成
それでは実際に会話のためのイベントデータを作成していきます。
まず、「RPGSceneManager」スクリプトに以下の内容を追加します。
1 2 3 4 5 |
//RPGSceneManager.cs 会話内容を表示するための処理を追加 //次のものを追加(中身は後で記述) public void ShowMessageWindow(string message) { } |
会話のイベントは「MassEvent」クラスの派生クラスとして定義します。
新しく「NPCEvent」という名前のスクリプトを作成し内容を以下のようにします。保存先はお好みでOKですが、記事ではAssets > Scripts > MassEventフォルダーの中に保存してます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
//NPCEvent.cs 会話用のイベントクラスの定義 using System.Collections; using System.Collections.Generic; using UnityEngine; [CreateAssetMenu(menuName = "MassEvent/NPC Event")] public class NPCEvent : MassEvent { [TextArea(3, 15)]public string Message; public override void Exec(RPGSceneManager manager) { manager.ShowMessageWindow(Message); } } |
「NPCEvent」はメニューのAssets > Create > MassEvent > NPCEventから作成できますので、新しく「NPCEvent」というイベントデータを作成してください。
保存先はお好みでOKですが、記事ではAssets > MassEventフォルダーの中にしています。
作成した「NPCEvent」データの設定内容は次のようにしてください。
1 2 3 4 5 6 |
//NPCEventの設定内容 Tile: 設定しなくてOK Message: フィールドからダンジョンに行けるぞ。 アイテムが欲しくなったら道具屋に、 回復したいときは回復屋に行くといいぞ。 |
会話用のイベントデータを作成したので、「NPCEvent」を「NPC」プレハブに設定できるように「CharacterBase」スクリプトを修正していきます。
1 2 3 |
//CharacterBase.cs イベントデータを設定できるようにする //次のものを追加 public MassEvent Event; |
コンパイルできたら、「NPC」プレハブの「NPC」コンポーネントの「Event」フィールドに「NPCEvent」を設定してください。
会話用のUIの作成
次に会話内容を表示するためのUIを作成していきます。
次の手順でシーンにGameObjectを作成してください。
- メニューのGameObject > UI > ImageをクリックしGameObjectを作成する
- 作成されたCanvasのGameObjectの名前を「MessageWindow」に変更
- 「MessageWindow」には「Image」という子GameObjectが予め作成されているので、その名前を「Panel」に変更する
- 「Panel」の子GameObjectにメニューのGameObject > UI > Textをクリックしテキストを追加する
- テキストの名前は「TextTemplate」に変更する
GameObjectの作成ができたら、それらのパラメータを次のように変更してください。
村人のいる方に移動したら会話UIが表示され、メッセージが流れるようになっていればOKです。
まとめ
今回の記事ではNPCである村人と会話できるようにする処理を実装しました。
今回作成した会話用のUIは以降の記事でも使用していくのでしっかりと理解しておきましょう。
また、さらにメッセージダイアログを修正する案として、開く際にアニメーションさせたり、メッセージが終わったら何かしらの画像を表示したりするなども考えられますね。
興味がある方は作ってみるといいでしょう。
今回の内容をまとめると以下のようになります。
- 「CharacterBase」コンポーネントにイベントデータを設定できるようにした
- 会話用のイベントデータを作成
- 会話用のUIの作成
- プレイヤーがNPCに話しかけると会話できるようにスクリプトを作成
それでは次の記事に行ってみましょう!
コメント
村人の隣に行っても会話ができないのですがもう少し追記お願いできないでしょうか。
NPCEventのCreateAssetMenuの行の”が全角になっているミスを発見しました。
重箱の隅をつつくような指摘ですが一応記載しておきます。
よろしくお願いいたします。
誤植報告ありがとうございます。
たしかに右側のダブルクォーテーションが全角になっていました。
こちら修正しておきました。
すいません、コメントが反映されていないようなので、改めてお送りします。
バージョン2021.3.5f1で、macの環境で作業をしています。
MassEventにNPCEventの項目がありません。MoveMapしか表示されていない状態です。
8章で追加されていたプロジェクトをDLさせていただいて、使用しています。
NPCEventはバージョンをさらに落とす必要がありますでしょうか。
それとも別の方法がありますでしょうか。
原因がわからず困っています。
ご確認いただけると幸いです。
文面だけで環境差のある個別質問回答はかなり厳しいので回答が難しい状態です。
1記事目の導入で書いた通り画面操作部分など2019、2020、2021バージョンで若干見た目や開発メニューの位置や名称に差が出ます。
講座と同じ画面で作っていきたい場合2019LTSでスタートして進めてみてください。