妹でもわかるUnrealEngine4

毎日更新? 妹に説明するために書いてるけど、たまにわかってない場合もあるUnrealEngine4を中心としたゲーム制作の話。略すとイモリアル

毎日更新? 妹に説明するために書いてるけど、たまにわかってない場合もあるUnrealEngine4を中心としたゲーム制作の話。略すとイモリアル

NPCとの会話のシステム(1) とおりすがりの会話

f:id:una_unagi:20170927234938g:plain

「先日の会話の話で、あれもっと簡単に作れるんじゃないかと思ったんで、少しテストをしてみている」

imoue.hatenablog.com
先日のやつ

妹「これは……会話してるの?」

「人間のまわりに透明コリジョンを置いておくと、通りすがりに声をかけられる感じになる。近くによった時だけじゃなく、完全にランダムで発話するタイプもあるけど。アクションRPGみたいなのでよく使われる」

妹「会話ボタン押さないでいいからかなあ」

「アクションだと決定ボタンに攻撃が割り当てられてるから、街の中で剣を振ってオブジェクトを壊せるゲームとかだと、話すつもりで切りかかったり、ちょっと相性悪い。あんまりこみいった話には向かないけど」

妹「ここは○○の街ですとかは、こういうので十分なのかな」

f:id:una_unagi:20170927235616p:plain
f:id:una_unagi:20170927235631p:plain

「ちょっと手間取ったのは変数に複数行の設定をしておくこと。これをやっとかないと入力欄でSHIFT+ENTER押しても改行できなかった

妹「複数行にしておけば、長い会話でもいいんだ。画面からはみでちゃうだろうけど」

UE4の中で長文を管理出来るというのは重要。あとはしゃべる内容をアクターに設定して、何かに接触したら会話用のウィジェットを出す……ためのアクターのイベントを呼び出す。ウィジェットは何も入力を受け付けずに、キャラがその場を離れるとメッセージウィンドウ消滅」

妹「なんで直接ウィジェットを出さないの?」

「もう少し複雑な処理をしたいのと、別のアクターやレベルからでも使えるように独立させといた方がいいかなと思って。ウィジェット呼び出し用アクターはレベル1個だけ手動配置して、あとはGetAllActorsOfClassで呼び出す。こうすればGameModeとか使わなくても1本化できる」

妹「複雑というのは」

「これは入力待ちも何にもないやつで、一般的なDialogueシステムとは違うから。これをもう少し普通のRPG会話ができるようにしてみる。テキスト変数をいっぱい作らずに済む方法で」