こんにちは、トイロジックでインゲームのプログラムを担当しているSSです。今回はUE4プロジェクトで実装したディレクターAIについて、掻い摘んで紹介させていただきます。
目次
ディレクターAIの概要
まずディレクターAIとはなんなのか、簡単に言うとゲーム全体をリアルタイムで監視し、状況に応じてゲームのコントロールをしてくれる機能です。現場監督をしてくれるAIというイメージでしょうか。
今回ご紹介させていただくディレクターAIは、プレイヤーの状況に応じてゲームの盛り上がり、ゲームの難易度を自動調整し、エネミーの出現位置や出現頻度、出現させるエネミーの種類などを動的に決める機能のお話になります。基準となるゲームの難易度はありつつも、その中でゲームの盛り上がりを表現したり、プレイヤーが難しすぎる、簡単すぎると感じたときに微調整する機能を作成しました。
ディレクターAIと聞くと何か凄いものをイメージされる方もいるかもしれませんが、仕組みとしてはシンプルです。今回実装したディレクターAIには、大きく分けると4つの役割があります。
- 「プレイヤーのストレス値」を算出する機能
- 「ゲームの難易度」を調整する機能
- 「ゲームの盛り上がり」を調整する機能
- 「エネミーを生成する」機能
これらの役割についてご紹介します。
ディレクターAI、4つの役割
ここからは先程述べたディレクターAIの4つの役割についてです。
1.「プレイヤーのストレス値」を算出する機能
これはプレイヤーが緊張している状態を数値化したものになります。
- 敵と近距離で戦闘をしている(= 時間的余裕がない)
- たくさんの敵に狙われている(= 混乱しそう)
は緊張状態とみなし、緊張状態が一定時間続いたらストレス値を上げるようにし、逆に緊張状態ではない時間が続いたらストレス値を下げるようにしました。ストレス値が変わるとエネミーの出現頻度、出現位置が動的に変わるようにし、ストレス値のバランシングを行っています。
2.「ゲームの難易度」を調整する機能
エネミーの出現頻度、出現位置の調整をしても、プレイヤーのスキルや状況によってはストレス値に偏りが出る事があります。そこで、ストレス値が一定以上、または一定以下になったときは難易度の調整を行うことでバランシングしています。この難易度は1~10の値で表現し、出現するエネミーの数、そしてエネミーの種類を動的に変更させています。
3.「ゲームの盛り上がり」を調整する機能
今回いうところのゲームの盛り上がりとは
- 少しずつ緊張感のある状態にしていく(= エネミーの出現数を少しずつ増やす)
- 盛り上がりがピークに達したら大きな課題を出す(= エネミーの数を最大限にする)
- 課題をクリアしたら達成感を作る(= 一定時間耐えきったらエネミーの数が0になるように出現数を減らしていく)
とし、ゲームの盛り上がりを数値として0~100で表現しています。値が100になると盛り上がりがピークに達している状態です。ゲームの盛り上がり値は基本的に時間で加算されます。
4.「エネミーを生成する」機能
前述したストレス値、難易度、ゲーム盛り上がりから、エネミーの出現頻度、出現位置、数、種類を算出し、エネミーを生成する機能です。これらはUE4のDataTable、CurveData、EQSを使い、プランナーが調整できるようにしました。
難易度毎にエネミーの最大数、エネミーの種類が定義されたDataTable
を作成し、ゲームの盛り上がりにあわせてエネミーの数が変動するようにCurveData
を使用しました。エネミーの出現位置はEQS
を使って算出しています。
最後に
以上、簡単にですが私が実装したディレクターAIについてお話させていただきました。今回ディレクターAIの実装を初めて経験させていただきましたが、UE4のEQS
は柔軟に追加変更対応ができとても便利でした。
少しでも参考になれば幸いです。最後までお読みいただきありがとうございました。