見出し画像

【ChatGPT】物語を持つ環境と無限にインタラクションして遊べるゲームの構築と、UnityRoomでの公開

はじめに

先日、ChatGPTを使用したあるゲームが公開されました。(現在は公開停止中)
名前は「ドキドキAI尋問ゲーム」

ChatGPTを使用して犯人を自白に追い込みむゲームなのですが、5日前にプレイして面白く、感動しました。
おお、短編ゲームとして綺麗に作られていると。
そこで、自分も何かゲームを作ってみたいなと思い、今まで作ろうと思いつつ作れていなかったゲームを作り、公開してみました。

題名は、「ChatGPTで遊ぼう! ルーナの秘密王国:妖精たちの知られざる物語」
公開場所:https://unityroom.com/games/luna_33242352


公開場所はUnityroomで、APIの登録やダウンロードなどもいらず、ページを開くだけでプレイできます。
よければプレイしてみてください。
スマホにはまだ対応できていないので、PCの人のみプレイ可能です。

本記事ではこのゲームの簡単な紹介と、自分が作ってみたかった、「物語持つ環境と無限にインタラクションして遊ぶゲーム」というものがどういうものか、それをどのように構築したか、についての解説です。
本題は物語を持つ環境と無限にインタラクションして遊ぶゲームとはどういうものか、ということについてです。

ゲームの紹介

「ChatGPTで遊ぼう! ルーナの秘密王国:妖精たちの知られざる物語」は滅びた妖精の国を、ユニという少女になって妖精ルーナと一緒に探検する探索ゲームです。
以下の画像はゲームに出てくる妖精ルーナの姿。

特徴は以下の三つ。

  • ルーナが妖精の国の各地を探検している時、各所の解説をしてくれる

  • 解説の内容に質問したり、ルーナ自身に質問すると、その世界のことを交えて答えを返してくれる

  • 会話するたびに好感度が増減していき、それによってルーナの態度が変わる

ゲームの目的はルーナとイチャイチャすることです。
会話するたびに好感度が増減して、それによってルーナの態度が変わるので、好かれたり嫌われたりしてみると楽しいですよ!

以下は三つの特徴の具体的な説明です。

ルーナが妖精の国の各地を探検している時、各所の解説をしてくれる

以下みたいに、ゲームにある様々なロケーション、門だったり城だったり竜だったり、に近づくとルーナがその場所について解説してくれます。
これは定型の文章じゃなくって、近づくたびに説明の内容が変わります。基本設定は決まっているので、極端な矛盾は起きません(はず)。



解説の内容に質問したり、ルーナ自身に質問すると、その世界のことを交えて答えを返してくれる

各所の紹介だったり、あるいはルーナのことだったり、妖精の国のことだったり、そういった気になったことをルーナに質問すると、以下のように答えてくれます。



こうやって話すことで、ルーナとこの滅びた妖精の国について、より深く知ることができます。
こうやって話してくれると、キャラクターが決められた設定だけを話すわけじゃない、生きている感じがしますね。

会話するたびに好感度が増減していき、それによってルーナの態度が変わる

ルーナは会話するたびに、好感度が蓄積していきます。
最初は普通の友人程度ですが、好感度が蓄積していくことで、「殺したいぐらい憎くて、嫌いな人」~「好きすぎて病んでしまうぐらい、好きで愛している人」にまで変動します。
そしてその好感度によって、ルーナのプレイヤーへの態度は変わります。

具体的に、例えば「好きすぎて病んでしまうぐらい、好きで愛している人」の状態で、門の前で「ルーナは昔はこの国で住んでいたの?」と聞くと、以下のように答える。


でも逆に、例えば「殺したいぐらい憎くて、嫌いな人」の状態で、門の前で「ルーナは昔はこの国で住んでいたの?」と聞くと、以下のように答える。

好感度が高いと、ユニと一緒なら国を再興できるかも、的なことを言ってくれるけど、好感度が低いとあなたに私の過去は関係ない、と切り捨てられる。
こんな感じで、ルーナに好かれたり嫌われたりすることを楽しめます。

「物語を持つ環境と無限にインタラクションして遊ぶゲーム」というものはどういうものか

このゲームを作った目的は、環境と無限にインタラクションして遊ぶゲームのデモを作りたかったからです。
ではこの「環境と無限にインタラクションして遊べるゲーム」とはどういうものでしょうか?
私はこれを、ユーザーの行動によって環境が意味と物語を持って変化し、現実の世界のように変化していくゲーム、と定義しています。

大事なのは物語を持っていることです。
例えばシムシティのようなシミュレーションゲームはユーザーの行動によって意味のある反応は返します。
しかし、その中に物語はありません。
ユーザーが頭の中で物語を作ることはできますが、それはユーザーの努力によるものです。

今までも一部を体現できているゲームは存在しました。
例えばゼルダの伝説 ブレスオブザワイルド。
物語を持った世界と、練りこんだAI、物理演算を再現した世界を用意することでユーザーの遊び心に対して、様々な反応を返してくれました。
しかし、その世界に存在する人物や怪物は決められたパターンしか行動できず、限界があります。

例えばSkyrim。
自分が人生で最もはまったゲームで、一つの地方とそこで実際に生活する何百人もの人々と怪物たち。それら一人一人が固有の設定とキャラクターの個性を持っていて、プレイヤーはそこで様々な人物になった遊べるという、まさしく物語を持つ環境とインタラクションして遊べるゲームでした。
しかし人が作るものであるから、どうしてもそれらの物語には限界があります。
NPCの一人一人は決められたセリフしか話せないし、その行動もAIで決められた行動しかできません。
あくまで、有限の箱庭でした。



しかし、ChatGPTなどのLLM(大規模言語モデル)が生まれたことで、この有限という問題を解決できる可能性が生まれてきました。
今回自分が作成したゲームでは、ルーナは無限のリアクションを返してくれます。
しかも、基本的な設定は決められたうえで、それに付随したエピソードだったり、フレーバーテキストを考えて返してくれます。
もちろん、問題は山積みです。
例えば決められている設定以外でルーナが語ることは、時々によって矛盾が発生するし、整合性も完全にとれるようには作れていません。
ローカルでは動かないため、一回一回話すたびにAPIを使用しているのでこれでゲームをきちんと構築すると費用が莫大なものになるなどの問題はあります。

しかし、これらは解決可能な問題です。
大事なことは、本当に人間のように話せるNPCや、物語を持ち、それらを創作しながらインタラクションできる環境を作ることができた、ということです。
これは本当に現実のように変化するゲームを作ることがいずれ可能になる、ということを意味していると思っています。

どのように構築したか?

ここで話す内容は、どうやって門などのObjectに近づいたら、基本的な設定を守ったうえでルーナに色んなことを話してもらえるようになったか、について記載します。
それ以外の機能は基本、この仕組みの応用です。

まず、Unity上の名前と設定を持ったObjectに以下のように配置します。
このObjectは特定のCollisionを持っています。この場合で言うと門の前にある長方形の緑の空間がそれです。

このCollisionにプレイヤーが近づき、領域に侵入します。
すると、プレイヤーはObjectに設定されている名称と設定を読み込みます。
以下のような設定です。
これらの設定はCatGPTに考えてもらいました。


あとはこの設定を基本設定として、ChatGPTにこの門の名称と設定を渡して、この門について語ってもらいます。
するとルーナは自分の設定に従って、これらの情報について語ってくれます。
こうすることで、最小限の情報(ルーナの設定とobjectの情報)だけで、整合性のある設定を含んだ会話を生成させることができます。
これは手動で配置していますが、やろうと思えばこれらは設定も含めて自動で配置することも可能です。
こうして、物語を持った、無限にインタラクションを返してくれる環境を構築することができます。

これは、かなり応用性がある方法だと思っています。
大規模言語モデルに環境とのインタラクションをさせる方法として。
もっというと、大規模言語モデルに、身体的な情報を伴った世界の情報を学習させることができる方法として。

これを大規模化できれば、本当に人間のように話せるNPCが生きているかのように生活した世界を持つ、本当の意味での異世界シミュレーションゲームも作れるでしょう。

あるいは、こういったシミュレーション空間のobjectの意味や画像、物性情報、重力etc を強化学習でマルチモーダルに学習させることで、本当に人間のような欲求と世界への常識と自律的な思考能力を持ったAIを作成可能なのではないか、と思っているのですが、本記事の要旨と離れているので、それはまた別の機会に語ります。

おわりに

今日東大からも生成AIについての所感が同じように語られていましたが、大規模言語モデルとそれの延長線上の技術は世界を良くも悪くも大きく変える技術です。
場合によっては雇用を減らしたり貧富の格差をより大きくするという可能性もあるでしょう。
しかし、同時に本記事で語ったように、今までの技術ではできなかった世界を創ることができる技術でもあります。
自分は、この技術はとても大きな可能性を持つ技術だと思っています。

この記事が気に入ったらサポートをしてみませんか?