OculusQuest2について
UnityでOculus Quest 2 用アプリを開発
機器セットアップ
機器管理設定をするモバイル用のOculusアプリ、OculusLinkで使うVR-PC用のOculusソフトウェアをPCにインストールする。
どちらも、FacebookIDでのサインインが必要。

BLEをONにしてOculusアプリを起動し、Oculus Quest 2の電源を入れるとペアリングが行われる。
言語、WIFIを設定。
非表示WIFIは、 Oculusアプリから設定する。
WIFIがつながると、Oculus Quest 2のソフトウェアが更新される。
Oculus Quest 2でガーディアン設定をして準備OK。
開発者モード
WebサイトからOculus Developerに登録して開発組織を決める。FacebookIDでのサインインが必要。
開発者登録が終わったら、Oculusアプリのデバイスのところに開発者モードのメニューが出るのでONに切替える。
Oculus Link ケーブルなどUSBでPCとOculusでつなぐと、Oculus Quest2側に「USBデバッグを許可しますか?」
と聞くダイアログが出たら、常に許可する。データアクセスも許可する。
Oculus Link
Oculusソフトウェアを立ち上げて、デバイスの設定から、接続方法としてOculusLinkケーブルとWiFi(AirLink)を選ぶ。

Oculus Link ケーブルなどUSBでPCとOculusでつなぐと、Oculus Quest2側にOculus Linkモードにするか聞くダイアログが出る
必要になってから切替えられるので、すぐLinkモードで使わない場合はしなくてもいい。
Unityのインストールと新規プロジェクト作成
UnityHUBで、最新リリースのUnityエディタをインストールする。
インストールするモジュールにAndroid Build Supportを加えておく。
UnityHUBで、新規プロジェクトを「3D」テンプレートから作る。
「3D」テンプレートは、従来からあるビルドインレンダラーを使う。
Oculus本体で動かすアプリは「URP」、OculusLinkで動かすなら「HDRP」がよいが、
マテリアル変更などが面倒なのでまずビルドインレンダラーで進め、全体が固まってからURP/HDRPをパッケージで追加する。
UnityのBuild Setting
Oculus(Andoroid)へのデプロイ準備
プラットフォームをAndroidを選択して、Switch Platformで切り替える。
Texture Compressionを ASTC に変更する。

RunDeviceに、接続中のOculus Quest2を選択する。(出ていない場合はRefresh)

Player Settingsを開いて、Playerから、Company NameやProduct Name,Versionなど情報を追加する。
Other Settingsから、Rendering Color SpaceをLiniearにする。

Player Settingsの下の方にあるXRpluginを開き、installで追加して、選択にOculusにチェックを入れる。
なにかエラーが出ていれば、FixAllする。

この状態でVRアプリを作成できるが、Oculusの専用機能や機器3dモデルが充実しているOculus専用SDKをインポートして使う。
Oculus Integrationのインポート
OculusLinkでUnityプレイモードから出るときに、Unityが落ちる問題
8月末にv32になってから、OculusLinkでUnityEditorからPlayをして戻ると、Unityが落ちるようになった。
Unityにバグレポートを送信したところ、OculusRiftでは再現せずQuestの問題らしい。
v33で解消予定でそれまでv31に戻して使ってほしいとのこと。
しかし、V31.2をインポートしても問題が発生する。
Oculus Integration 旧バージョンダウンロード
developer.oculus.com/downloads/package/unity-integration-archive
V31.2の前のV29では、別のバージョーン不整合でエラーメッセージが出るので使えない。
OVRPluginさえ更新しなければ、エディターが落ちる問題が出ないことが分かった。

状況をUnityに連絡し、Oculusからv33が出るまでOVRPluginを更新しないで使うことにする。
最新版のパッケージはUnity Storeにあるので、Oculus Integrationを検索しAdd MyAssetしてUnityで開く。
UnityエディタでPackageManagerが開くので、MyAssetを選択してリストからOculus Integrationを選び、ダウンロード、インポートする。

インポートが終わると、更新メッセージが出る。
まず、これは不具合の原因。Noを選ぶ。

これはUpgradeを選ぶ。

これはRestartを選ぶ。するとUnityエディタがリスタートされる。

また、これが出る。Noだが、プロジェクトを開くたび毎回聞かれるので右を選ぶと出なくなる。

最新版をインポートした後でバージョンを落とす場合には、ファイルエクスプローラーでプロジェクトのAssetsにあるOculusフォルダ全部を削除してから、
Unityでプロジェクトを立ち上げて、旧バージョンのパッケージファイルをダブルクリックしてインポートする。
Oculus Integrationのサンプルシーンを動かす
Assets\Oculus\SampleFramework\UsageにあるLocomotion.unityシーンを開く。
初期設定の状態では不具合あるので修正する。
PlayerControllerオブジェクトのCharacter Camera Constraintコンポーネント
Height Offset 1.0→0.25
1.0だと床から浮いている。25cmでちょうど床に手がつく。

PlayerControllerオブジェクトの子供のLocomotionControllerオブジェクトの設定
テレポート移動先の指示は、レイキャストを出してシーン内オブジェクトと接触判定して接触点を割り出している。
接触判定の対象かどうかは、Layerで判定する。
BuildSetting>Tags and Layersに使えるレイヤーのリストがある。

Locomotion.unityでは、Builtin Layer 4番 Waterをテレポートポイントとして使用している。
普通に作られた床などは、Builtin Layer 0番Defaultなので、それを使えば、VR用に作ったシーンでなくてもそのまま使える。
逆にどこでも行けてしまうようになるため、限定したい場合は必要に応じテレポート専用レイヤーを作る。

VR用に作っていない普通のオブジェクトをテレポート指示個所を選べるよう設定を変更する。
ヒエラルキーでPlayerControllerオブジェクトの下にある、LocomotionControllerオブジェクトを選択。
-
インスペクターから、Teleport Target Handler PhisicalコンポーネントのAim Collision Layer MaskでDefaultにチェックを入れる。

Oculus(Android)へのデプロイ
シーンをセーブして、BuildSettingを開く。
Scene in Buildに、Add Open Sceneを押して現在編集中のシーンを加える。

Build and Runを押すと、ビルドするアプリ(.apk)のファイル名を聞かれるので、名づけをする。
ビルドが開始されるので待つ。
アプリが完成したらOculusにUSBで送られ、Oculusでアプリが起動する。
Oculusでアプリが起動したらOculusLinkケーブルを抜いてもOK。
Oculusヘッドセット、コントローラーを装着してアプリを確認する。
アプリを終了は、オキュラスメニューから終了する。
改めてOculusでアプリを動かすとき
自作アプリは最初に現れるアプリメニューには出てこないが、全てのプログラムで下の方に隠されている
提供元不明アプリを探すと選択できる。
OculusIntegrationのLocomotionシーン

シーンが開始されると、Bボタンでコントロールスキームを選択するメニューが表示される。
Aボタンで選択したら、選択後にBボタンでメニューを閉じる。
Aボタンによる指定ノードへのテレポート
Aボタンを押して右サムスティックでポイントし、Aボタンをリリースするとノードへテレポートする。
矢印を回転させて、テレポート後の出現向きを変えられる。
2次元ステックテレポート
サムスティックを前方方向に押して場所を選び、スティックをリリースしてテレポートする。
スティック前方方向の長押しでエイムを始めると、テレポート後の回転向きを制御できる。
エイムしていないとき、サムスティックでアバター回転できる。
LストレーフRテレポート
左サムスティックを使用して任意の方向にウォーキング移動。
右サムスティックを2次元スティックテレポートのように前方方向に押してテレポート移動。
ターゲット設定中に右スティックを回転で、出現向きを制御できる。
ウォーキングのみ
左サムスティックを使用して任意の方向に移動、右スティックを使用して回転。
自分の作ったテストシーンにOculusIntegrationのlocomotionプレハブを実装する
プロジェクト作成時に出来た「3Dテンプレート」のシーン=Assets\scenes\Samplesceneを開く。
歩き回る足場となるための床を作る。
新規にPlaneオブジェクトを、0,0,0位置に作る。
狭いと足を踏み外して落ちてしまうので、scaleを5,1,5に変更しておく。
Planeには既にコリジョン設定済み。LayerはDefaultになっている。
真っ白だと見にくいので、マテリアルを設定する
Assets\Oculus\SampleFramework\Usage\Locomotion\Materialにある床用のマテリアルを、Planeにドラッグアンドドロップする。

「3Dテンプレート」のシーンに元々ある、MainCameraオブジェクトを削除する。

Starter Assetsの場合
プレーヤー関連のオブジェクトをインスペクターでチェック外して無効化する。
Main Camera
Player Follow Camera
Player Armature

Player Controllerプレファブを入れる
Assetsを”player"で検索して、locomotionのsceneで使われている、PlayerControllerプレファブをヒエラルキーにドラッグドロップする。

PlayerControllerのCharacter Camera ConstraintコンポーネントのHeight Offsetを0.25にする。

Simple Capsule With Stick Movementコンポーネントの
CameraRigに、ヒエラルキーでplayercontrollerの中にあるcamera_rigコンポーネントをドラッグドロップして、参照設定する。

PlayerControllerの子供のLocomotionControllerオブジェクトの、
Teleport Aim Handler LaserコンポーネントをOFFにする。
Teleport Aim Handler ParabolickコンポーネントをONにする。
テレポート移動位置の指示をする個所を選べるように、対象レイヤーを設定する。
-
Teleport Target Handler PhisicalコンポーネントのAim Collision Layer Maskでdefaultをチェックする。

Oculus(Android)へのデプロイ
シーンをセーブして、BuildSettingを開く。
Scene in Buildに、Add Open Sceneを押して現在編集中のシーンを加える。

Build and Runを押すと、ビルドするアプリ(.apk)のファイル名を聞かれるので、名づけをする。
ビルドが開始されるので待つ。
アプリが完成したらOculusにUSBで送られ、Oculusでアプリが起動する。
Oculusでアプリが起動したらOculusLinkケーブルを抜いてもOK。
Oculusヘッドセット、コントローラーを装着してアプリを確認する。
アプリを終了は、オキュラスメニューから終了する。
改めてOculusでアプリを動かすとき
自作アプリは最初に現れるアプリメニューには出てこないが、全てのプログラムで下の方に隠されている
提供元不明アプリを探すと選択できる。
OculusLinkでの使用
プラットフォームをAndroidからPCに選択しなおし、Switch Platformで切り替える。
PLayer Settingで、XRpluginのOculusが選択されていることを確認する。

OculusLinkの状態ではPC-VRになるのでOculusだけ別の部屋に運んで試すという可搬性がなくなるが、
Unityエディタで編集中にPlayボタンを押したらすぐに動作確認できる。
Oculus developers Hubを使えば、ガーディアン無効化など開発者向け設定もできる。

着座してテストする場合は、立った時と目線高さがかわることで、テレポート先の頭上余裕距離判定などに差が出る。
また、ノートPCをたたむとか机の上のものをむやみに動かすと自己位置推定のノイズになる。
Starter Assetsの場合
バックエンド設定を切替えて、新旧Inputが両方使えるように設定する。
設定は、Project SettingsのPlayer>Other Settings>Active Input Handlingで「Both」に設定する、

これで、New Input Systemと旧Input Managerの両方のAPIが使用できるようになる。
シーンをセーブしてから、Playボタンを押して動作確認する。

Oculus Link

PCでOculusソフトを起動して機器接続を確認する。
Oculus Linkケーブルで接続するとOculus Linkモードにするか聞くダイアログがOculus内に出るので、する。
後でスイッチは可能。
Oculus developers Hub
PCに接続しているOculusのポータルとして機器を操作できる。


ADB(Android Debug Bridge)を再設定するように指示が出る。

PC側から動画を記録したり、機器の中に保存した画像や動画を見たり、再起動操作などができる。
なぜかファイルの転送はできないので、普通にUSBドライブとしてエクスプローラーで開いて行う。

OVR Metrics Toolをインストールすれば、パフォーマンスデータの測定ができる。
ADB(Android Debug Bridge)をUSBでなくWiFi経由で使う設定もある。
OculusQuest2について