たくさんの会話できるnpcを実装する方法

プログラミングには基本的に「やりたいことにそのまま使える正解のサンプル」なんてものはありません
ですので、自分のやりたいことにするにはどうすればいいか、というのを常に考える必要があります

それから、難しいことを難しいまま考えて実現しようとしても、大抵は実現できません
ですので、簡単に考えられるように分解する必要があります

うまく分解できれば、その小さい単位であればすぐにサンプルが見つかるか、うまい方法を思いつくかもしれません

今回でいうと「人物が複数人いて、それぞれ違うことを話す」というところが重要ですね
他の要素(DialogueのAssetの使い方等)は一旦脇に置いて、重要なところをいかに実現するかを考えましょう

上記納得がいかなければ、心ゆくまで検索してみると良いでしょう


一応サンプルは用意しました

NPCのクラスです
話しかけられたら、決められた文言を返すように設計します
人物毎に別の内容を返してもらいたいので、この部分は変数にすべきですね
このとき、InstanceEditable(インスタンス編集可能)にチェックを入れておきましょう

次に、Playerのクラスです
今回は単純に、目の前をチェックして、NPCがいれば話しかけるようにしました

そして、作ったNPCをLevelに配置し、Details(詳細)パネルで変数にした会話内容を編集します
これで、同じBPだけど違うことを話すNPCができました
あとはこれを応用すれば、Dialogueのアセットを使うのであれば、データテーブルのRowNameあたりを変数にしておけば、それに従った内容を喋らせる事ができますね

同じように会話をするけれど、会話時の処理を変えたい、という考えが出てきた場合は、ChildBlueprintClass…いわゆる継承をしてみると良いでしょう

今回の例では、NPCのクラスを継承して、話しかけられた回数を数えるようにしてみました
なお、Player側は変える必要がありません
NPCクラスに対してアクションするようにしておけば、NPCクラスを継承したクラスにも同じようにアクセスできるからです
(このへんの理由に関しては、オブジェクト志向について調べてみるべきでしょう)