【2025年版】Unity XR 3.0 × 生成AI!仮想空間を「書き換える」魔法の実装ガイド

Unity XR 3.0 × 生成AI開発ガイド:GitHubサンプル活用術 生成AIクリエイティブ
【2025年版】Unity XR 3.0 × 生成AI!仮想空間を「書き換える」魔法の実装ガイド

はじめに:静的なVR空間は、もう退屈だ。

AIハック術師のハヤトだ。

結論から言おう。2025年、XR(VR/AR)開発において「あらかじめ作られたシナリオ」をなぞるだけの体験は、もはやレガシーになりつつある。

想像してほしい。プレイヤーの言葉に合わせて性格を変えるNPC、視線を向けるだけで生成されるオブジェクト、そして「その場の思いつき」でルールさえも書き換わる仮想空間。これを実現するのが、Unity XR Interaction Toolkit (XRI) 3.0 と マルチモーダルAI の融合だ。

今回は、Unity公式がGitHubで公開している「宝の山」とも言えるサンプルプロジェクトをベースに、生成AI(OpenAI API)を組み込んで、「対話で空間に干渉する」次世代のXRインタラクションを実装する方法を解説する。

単なるツールの紹介ではない。これは、君の手で「終わりのない世界」を作るための実践ガイドだ。

1. Unity XR Interaction Toolkit 3.0 の革新と「公式GitHub」の価値

まずは武器を選ぼう。なぜ今、XRI 3.0なのか。そしてなぜ公式サンプルが重要なのか。

XRI 3.0:開発速度を倍増させる「Near-Far」の統合

以前のバージョン(2.x系)で開発者を悩ませていたのが、「遠くの物を指すレイ(Ray)」と「近くの物を掴む手(Direct)」の切り替え処理の複雑さだ。

XRI 3.0ではこれが劇的に進化している。

  • Near-Far Interactor: 1つのコンポーネントで遠近両方の操作をシームレスに処理。コード量が激減する。
  • Input Reader: 入力デバイスの違い(Meta Quest, Vision Pro, HTC VIVEなど)を抽象化し、マルチプラットフォーム対応が容易に。
  • Gaze Interaction: 視線追跡の統合強化。これこそが「見て生成する」AI機能との相性が抜群に良い理由だ。

GitHubサンプルが「最強の教科書」である理由

多くの初心者が有料アセットに飛びつくが、実はUnity公式がGitHubで公開している XR Interaction Toolkit Examples こそが、最も信頼性が高く、拡張性の高いベースプロジェクトだ。

サンプルシーン名 AI開発での応用アイデア
Station 7: 2D UI VR空間内に浮かぶ「AI対話コンソール」としてそのまま利用可能。
Station 4: Socket Interactors 「AIに頼んで生成したアイテム」が出現する台座(クラフト台)として活用。
Station 5: Gaze Interaction ユーザーが見ている対象物をAIに解析させる(Vision機能)トリガーに使用。

この記事では、この中の「UIインタラクション」をハックして、AIへの命令インターフェースへと作り変えていく。

2. マルチモーダルAI × XR が生み出す「3つの未来」

技術的な実装に入る前に、何を「ゴール」にするかを明確にしておこう。単にChatGPTとチャットするだけなら、スマホで十分だ。XR空間で目指すべきは以下の体験だ。

  1. 空間コンシェルジュ (Spatial Agent):
    「そこの赤い箱を取って」と指差しながら音声で指示すると、AIが意図を理解してそのオブジェクトを動かす。
  2. ジェネレーティブ・ワールド (Generative World):
    「もっと暗くして、不気味な雰囲気にして」と言うと、スカイボックスやライティング、BGMがリアルタイムで再生成される。
  3. NPCの魂の実装 (Soulful NPC):
    決まったセリフではなく、プレイヤーの行動(近づく、武器を向けるなど)をXRIのイベントで検知し、動的に反応を変えるキャラクター。

3. 実践ガイド:VR空間に「AIの脳」を実装せよ

ここからは実際に手を動かしてもらおう。UnityのXR環境に、OpenAIのAPIを接続し、VR内のキーボードで質問するとAIが答えてくれる最小構成のプロトタイプを作成する。

Step 1: 環境構築とサンプルのインポート

  1. Unity 2022.3 (LTS) 以降でプロジェクトを新規作成(3D Core または VR Template)。
  2. XR Interaction Toolkit をPackage Managerからインストール(バージョン3.0.x以上を確認)。
  3. GitHubからダウンロードした「XR Interaction Toolkit Examples」の Assets/Samples/XR Interaction Toolkit/[Version]/Starter Assets をインポートする。
  4. サンプルシーン(例:World Space UI)を開き、VRヘッドセット(Quest Link等)で動作確認する。

Step 2: OpenAI通信用スクリプトの作成

外部アセットを使わず、C#標準の UnityWebRequest だけで実装する。これが最も軽量で、ブラックボックス化しない方法だ。

プロジェクトに AIController.cs というスクリプトを作成し、以下のコードを記述してほしい。

using System.Collections;
using System.Text;
using UnityEngine;
using UnityEngine.Networking;
using TMPro;

public class AIController : MonoBehaviour
{
    [Header("AI Settings")]
    [SerializeField] private string apiKey = "YOUR_OPENAI_API_KEY"; // 本番では環境変数等で管理すること
    [SerializeField] private string model = "gpt-4o-mini";

    [Header("UI Connections")]
    [SerializeField] private TMP_InputField inputField; // VRキーボードからの入力
    [SerializeField] private TextMeshProUGUI outputText; // AIの回答表示

    private const string ApiUrl = "https://api.openai.com/v1/chat/completions";

    // ボタンのOnClickイベントから呼び出すメソッド
    public void SendRequestToAI()
    {
        if (string.IsNullOrEmpty(inputField.text)) return;
        StartCoroutine(PostRequest(inputField.text));
    }

    private IEnumerator PostRequest(string userMessage)
    {
        outputText.text = "Thinking...";

        // JSONデータの作成
        string jsonBody = "{\"model\": \"" + model + "\", \"messages\": [{\"role\": \"user\", \"content\": \"" + userMessage + "\"}]}";
        byte[] bodyRaw = Encoding.UTF8.GetBytes(jsonBody);

        using (UnityWebRequest request = new UnityWebRequest(ApiUrl, "POST"))
        {
            request.uploadHandler = new UploadHandlerRaw(bodyRaw);
            request.downloadHandler = new DownloadHandlerBuffer();
            request.SetRequestHeader("Content-Type", "application/json");
            request.SetRequestHeader("Authorization", "Bearer " + apiKey);

            yield return request.SendWebRequest();

            if (request.result != UnityWebRequest.Result.Success)
            {
                outputText.text = "Error: " + request.error;
            }
            else
            {
                // 簡易的なJSONパース(本来はJsonUtility用のクラス定義を推奨)
                string responseText = request.downloadHandler.text;
                // ※ここでは簡易的にコンテンツ部分を抽出する処理を想定
                outputText.text = ExtractContent(responseText);
            }
        }
    }

    // 簡易パーサー(実運用ではNewtonsoft.Jsonなどを推奨)
    private string ExtractContent(string json)
    {
        string searchKey = "\"content\": \"";
        int startIndex = json.IndexOf(searchKey);
        if (startIndex == -1) return json;
        startIndex += searchKey.Length;
        int endIndex = json.IndexOf("\"", startIndex);
        return json.Substring(startIndex, endIndex - startIndex).Replace("\\n", "\n");
    }
}

Step 3: シーンへの統合

ここが「ハック」のポイントだ。サンプルシーンにある既存のUIを流用する。

  1. シーン内の適当なGameObjectに AIController.cs をアタッチする。
  2. サンプルのCanvas内にある InputField (TMP)Text (TMP) を、スクリプトのインスペクタにドラッグ&ドロップして紐付ける。
  3. サンプルの「Submit」ボタン(または適当なButtonコンポーネント)の OnClick イベントに、AIController.SendRequestToAI を登録する。
  4. 再生ボタンを押し、VR空間内のキーボードで「Unityについて教えて」と入力して送信してみよう。

Step 4: インタラクションへの応用(応用編)

テキストが返ってくるだけでは面白くない。AIの応答に応じて空間を操作するには、AIに「Function Calling(関数呼び出し)」のようなJSONを返させればいい。

プロンプト(messagesの部分)に以下のようなSystem指示を加えてみよう。

"system", "content": "あなたはVR空間の管理者です。ユーザーが色を変えたいと言ったら、回答の先頭に [COLOR:RED] のようなタグをつけてください。"

そしてC#側で [COLOR:RED] を検知したら、GetComponent<Renderer>().material.color = Color.red; を実行するロジックを追加する。これで、「赤くして」と言うだけで目の前のキューブが赤くなる魔法が完成する。

4. まとめと次なる戦略

Unity XR Interaction Toolkit 3.0 は、VR開発の面倒な部分をすべて引き受けてくれる。そして公式サンプルは、その機能を使いこなすための最短ルートだ。

今回の要点は以下の3つ。

  • XRI 3.0の新機能(Near-Far統合)を活用し、インタラクション開発の工数を削減せよ。
  • GitHubの公式サンプルを単なる見本ではなく、自作アプリの「土台」として使い倒せ。
  • 生成AIをAPI経由で接続し、テキストだけでなく、空間操作(色変更、生成など)へと拡張せよ。

これからは、コードを書くだけでなく、「AIという同僚」をどうVR空間に住まわせるかが開発者の腕の見せ所になる。さあ、HMDを被って、君だけの無限の世界へダイブしよう。

コメント

タイトルとURLをコピーしました