BLOGブログ

2023.08.04UE5

「名探偵モカと密室脱出」開発者による見どころ紹介! ー ChatGPTに任せたゲーム進行と自然な会話の実現方法

ここではChatGPTとUnreal Engine 5を用いた技術デモ「名探偵モカと密室脱出」の詳細な解説を行います。

 

ゲーム開始からクリアまでを収録したノーカット動画はこちら
https://youtu.be/N2uDYZ1PNNM

プロジェクトの概要は【こちら】をご覧ください。

 


■プロジェクト紹介

『名探偵モカと密室脱出』はChatGPTおよびAzure Cognitive ServicesとUnreal Engine 5(以下、UE5)を用いて制作した技術デモを兼ねた3D脱出ゲームです。

プレイヤーは密室に閉じ込められた名探偵モカの相棒です。モカとの会話を通してヒントを貰いながら、脱出のカギを見つけて部屋の中からの脱出を目指します。

このゲームではコントローラやキーボードでの操作ではなく、マイクによる音声入力のみでゲームを進行することができ、通常のゲーム体験とは違ったゲームの形を体験することが出来ます。

「名探偵モカと密室脱出」は、社内の技術研究プロジェクトの1つです。
ただ技術を試すだけではなく、実際に簡単なゲームを作成することでどのようにゲームへの応用ができるのかを明確化していきます。


■今回の研究テーマ

『自然なコミュニケーションによるゲームプレイの可能性を探る』と
『コントローラーからの解放。会話で進めるゲーム』の2つでした。

『自然なコミュニケーションによるゲームプレイの可能性を探る』では、以下の3つの項目を満たす必要があります。
①自然言語によるNPCとのコミュニケーション
②ChatGPTにより3Dキャラクターを動かす
③ChatGPTによりゲーム進行を行い、ゲームのシナリオを収束させる

 

それを踏まえて作られた「名探偵モカと密室脱出」のゲーム内容は
『会話を通して名探偵モカにヒントを貰いながら、扉の鍵を見つけて脱出すること』です。

 


■会話処理について

プレイヤーとモカとの会話は、以下の手順でPC上とCloudサービス上で処理が行われます。

  • プレイヤーの音声は Microsoft の提供する Azure Cognitive ServicesのSpeech Serviceに送られ、リアルタイムでテキストに変換。
  • 変換されたテキストは事前に指定したプロンプトに追加され、ChatGPT(GPT-4)に入力。
  • ChatGPTにはNPCの行動とセリフを算出し、一つの返答として受信。
  • 帰ってきた返答はセリフとコマンドに分割。
  • セリフ部分はAzure Cognitive ServicesのCustom Neural Voiceを使い、生成された合成音声がNPCのセリフとして読み上げ。
  • コマンド部分はキャラクターの行動に反映。UE5を使用して、キャラクターの移動場所や再生するモーションに反映。

 


■ChatGPTによるゲーム進行管理

今回のようなことを行いたいとき、ChatGPTとゲームロジックでの処理の切り分けは、次の4パターンが考えられました。

A. ゲームの仕組みと直接関係のない要素、たとえばキャラクターのセリフや表情などのみをChatGPTに任せるパターン。
B. Aに加えて、キャラクターの移動やアイテムの使用などもChatGPTに任せるパターン。
C. Bに加えて、ChatGPTによって移動やアイテムの使用の結果がどのようになるかも決定するパターン。
D. 移動やアイテムの使用だけでなく、ゲーム全体の進行もChatGPTに任せるパターン。

本作では、Dの手法を採用しており、NPCとの会話からゲームの進行まで「完全にChatGPTに」任せています。

 

以下は実際にゲームで使用しているプロンプトです。
(フラグは演出の発生条件としてだけ使われるため、ゲームの進行はChatGPT側で管理されます。)

部屋の脱出するには以下のイベントを番号順に進行する必要がある。進行した場合は文章の最後にフラグを付け加えてください。
①パイプタバコをふるとカチャカチャという音がする。
②パイプタバコを回すとモカが鍵を見つける。【鍵入手】
③鍵穴にパイプタバコから見つけた鍵を使うと、柱時計の扉が自動的に開き、「中にレバーがある」とモカが話す。【扉開く】
④柱時計のレバーを下げるとクリア。【クリア】

 


■「さっきの○○って…」自然な会話の為に

ChatGPTの入力(API)はリクエストごとに独立して動作するため、通常は前回の入力に対する連続性はありません。
例:1回目の会話「本棚を調べて」        →ChatGPT「本棚にはこんな本があるよ!」と応答する。
  2回目の会話「さっきのとこをもう一回調べて」→ChatGPT「さっきってどれ?何のこと?」となってしまう。

 

リクエスト間の連続性を維持するには、それぞれのリクエストに全ての会話の文脈を含める必要があります。
本作では、プレイヤーとの会話の履歴を毎回プロンプトと一緒に送信するよう設定しました。

こうすることで前の会話の内容を理解して返事を返してくれるため、より現実味のあるコミュニケーションに近づけることが出来ました。
ただし、送信可能な文字数には制限があるため、送信する会話履歴の長さに上限を設け、その上限を超える場合は古い履歴から削除するようにしています。


■感想パートの導入

プレイヤーがゲームをクリアした後に、モカが「感想を述べるパート」を追加しました。
これは、ゲームクリア後の空白時間が味気ないと感じたためです。

プロンプトにはキャラクターの背景と感想を述べる指示を記載し、さらにゲーム中にプレイヤーが会話した全ての履歴を追加しています。
これにより、プレイヤーは自身のゲーム中の会話とNPCの行動の関係性をより深く振り返ることができ、ゲームの終了後もその世界感に浸ることができます。

 


■会話レスポンスの最適化について

GPT-4の導入は多くの改良をもたらしましたが、一方でレスポンスの遅延という新たな課題が生じました。
以前のバージョンであるChatGPT(GPT-3.5)と比べ、レスポンスが遅くなってしまい、その結果、全出力を待つユーザーの待ち時間が長くなってしまいます。
ユーザー体験を最優先に考えると、この待ち時間の短縮は避けて通れない課題となります。

GPTのAPIでは出力結果をストリーミングで受け取ることができるため、これを活用すれば改善が可能です。
具体的には、文の区切りが出力されるたびにその部分を分割し、直ちに音声合成を開始するように設定しています。
これにより、全出力を待つことなく、分割された部分から順に音声化されるため、ユーザーの待ち時間が大幅に短縮されます。

 

 


講演動画、スライド資料はこちら:「声だけでプレイする3D脱出ゲーム制作事例~ChatGPTでセリフと行動を制御~」講演動画&スライド資料公開!

リリースブログはこちら:ChatGPT×UE5、技術デモ「名探偵モカと密室脱出」を発表!”声だけ”でプレイする3D脱出ゲーム