前回に続きMeta Quest 3S。¥45,800もしたので元を取るくらい使い倒していきたい所存です。
今回はVRアプリを実装してみてどんなものが出来るのか、何が簡単でどんなことが難しいことかを検証していきました。
早速、ここ数日の成果物はこちら。
大まかに言うと、
・Meta Questから作ったアプリを起動
・ポインターで所定の位置を決めてテレポート移動
・コントローラ(右手と左手のやつ)でボールを掴む
・ボールをヒューマノイドにぶつける(表情が少し変わる)
ということをやってます。
環境
・Meta Quest 3S
・Meta XR Simulator
・Godot
・Meta Horizonアプリ
以前Three.jsを用いて3Dモデルを表示したこともあり、ネイティブアプリではなくWebXRにする選択肢もありましたが、Godotを使った情報が多く出てきたのでこちらにしました。あと最近趣味でGodot(OSSのゲームエンジン)を軽く触っていたこともあり。
Meta XR SimulatorはMac版はこちら。
セットアップ
まず、Questを開発者モードにしないとパソコンのGodotからインストールができないようです。
開発者モードはMeta Horizonアプリのハンバーガーメニューからデバイスを選択し、ヘッドセットの設定をタップ。Metaアカウントの開発者申請をするとONにできます。
次にMacBookとQuestをType-Cで接続します。Meta純正のLinkケーブルというのがかなり良いらしいのですが、持ってないのでApple純正のケーブルで試したところ疎通OKでした。
Quest(Horizon OS)はAndroidベースということなので、正常に繋がってればAndroidスマホ同様にadb devicesコマンドを叩いて一覧に出るはずです。プラグインはGodot XR ToolsとVRMの2つで、どちらもGodotのAsset Libからインストール→プラグイン有効でOK。
実装
コードレベルで書くと非常に大変なのでざっくりした流れだけ書いていきます。
・メインとなる3Dシーンを一つ作る
・シーンにスクリプトをアタッチし、VRモードを有効にする(参考)
・Meta XR Simulatorを起動し、左上のスイッチを有効にする
・↓各種設定を変更



・シーンに床、壁、ボール、ヒューマノイドを配置する
・壁とヒューマノイドにボールが当たるように当たり判定(CollisionShape3D)を設定
→ここまで書いて気づいたのですが、もっと丁寧に説明してる記事があったのでこちら参照。
・XROrigin3Dに右手/左手に「掴む(XRToolsFunctionPickup)」や「テレポート(XRToolsFunctionTeleport)」、「スティック移動(XRToolsMovementDirect)」などを追加。
・OpenXRアクションマップにTouch controller/Touch controller proのプロファイルを追加。

* ポイント
コントローラを使った操作のテレポートやスティック移動は既存の仕組みを使えば実装は難しくありませんでした。ですが、シミュレータで操作しようとするとショートカットキーを組み合わせて面倒ですし、実機に入れてもゴーグル付けたり外したりが結局面倒になります。
スティックをぐりぐり回して移動や回転を変えると気持ち悪くなるのでテレポートは個人的に必須、というかテレポートですら目を瞑ってます。
実装中のあれこれ
前述のコントローラの実装のように、公式に載っているような一般的な知識だとAIが割としっかり回答をしてくれました。一方で「xxxというノードにyyyが衝突したらzzzで」というように、コードの大部分を思考させるようなケースでは精度があんまり高くないので詰まった時にAIに頼れないことがしばしばありました。
VRMはアニメーション付きでポーズを変えるのに苦戦中。これが出来ると表現できることが一気に増えるので何とか達成したいです。
あとは動的にオブジェクトを読み込むのが課題で。つまり、キャラクターや物の位置/状態をサーバー側で管理できるかどうかで作れるゲームの制約が大きく変わると思うんですよね。セーブ機能としても有用だし、複数人が参加できる形式のゲームだとそういう仕組みが必要かなと思います。
まとめ
アイディア次第で面白いものが作れるのがゲームの良さだと思うので、技術的なハードルの高さや酔いに負けずもう少し学びたいと思います。最近のデバイスはスペックが良いのでフリー素材を駆使すればビジュアルの良いものが作れそうですね。
届いてから一週間で¥45,800のうち800円分くらいは楽しんだ気がします。もうちょいクオリティの高いゲームっぽいものが出来たらまたご紹介します。
サイバーパンクへの道のりは険しい( ´Д`)y━・~~