Graffity株式会社でUnityエンジニアをしていますCovaです。
今回は米国・韓国で発売された、初のAndroidXR OS搭載端末であるGalaxyXR実機にて、Android XR Extensions for Unityで公開されている各種サンプルを動かしてみました。
基本的には環境を作って、公開されているSampleSceneをビルドしたというものです。
検証環境
| 項目 | バージョン等 |
|---|---|
| Unity | Unity6.2.6f2 |
| Android XR Extensions for Unity | 1.2.0 |
| OpenXR Plugin | 1.15.1 |
| Unity OpenXR Android XR | 1.1.0 |
| MacOS | Tahoe 26.0.1 |
検証項目
1. Environment Blend Mode.
画面のAplhaBlend とOpaque を切り替えるDemoのようです。
Opaque(不透過)
AlphaBlend (透過あり)
2. Object Tracking.
一応ObjectTrack用のReference設定用ScriptableObjectがありましたが、手元の環境では動作しませんでした。
ARPlaneManager による平面検知は動いていました。
3. Face Tracking.
4. Image Tracking.
こちらはARFoundation でも見かける画像のReference設定で登録して、各テクスチャをA4用紙にプリントアウトしてみましたが、うまく認識してくれず・・・
1. Marker Tracking
画像で設定こそできますが、いまのところうまく動作せず・・・
2. QR Code Tracking.
SampleにはQRコードやArUco まーかの設定などがありましたが、こちらもダメでした・・・
5. Hand Mesh.
手のMesh表示です。
画像では伝わりづらいですが、OpenXRのHandTrackingをベースにしているのか、ちゃんと指のまげ具合も追従してくれて、ラグはあまり感じませんでした
6. Scene Meshing.
現在見ている環境のMeshを生成するDemoです。
おそらくはQuest3 等と同様、LiDARセンサーを利用しているものと思われます。
そのため、光が反射しやすい材質だとうまく検知できないという結果がありました。
Original
Mesh
7. Unbounded Reference Space.
境界なしの空間ということなのですが、特段PassThroughで何かが表示されるわけでもなくといった形です。
多分うまく動いてないんだと思います。
8. Passthrough Composition Layer.
CompositionLayer を使ってどのObjectがどのタイミングでどういうモードで描画されるのか?を設定できるものです。
みたいに設定されています。
つまり、それぞれのObjectの形でパススルー映像が流れ込むっていう感じです。
実際に動かすとこんな感じの見た目です。
左下ですが、表面(Face)が奥側にあるので、頑張って回り込むと無事描画されています。
(ちなみに境界外に出ようとするとアプリの画面が薄くなります)
9. Body Tracking (Experimental).
BodyTrackingと言っていますが、実際は手・手首あたりのボーンからIKで体のBoneを推定するだけという感じでした。

てっきり服をきてても肘などがトラックできるのかな?と思いましたが、手首位置を固定して肘のみを動かしてもトラックされない のと、体のBoneが全くの固定 だったのでExperimentalが外れるまではただの腕の位置のIKによる推定システム と捉えておくのが良さそうです。
10. Foveated Rendering
Vulcan や最新のMRデバイスといえば、 Foveated(中心窩) Renderingですね。
全てのピクセルを馬鹿正直にRenderingするとコストがかかるので、視線の先を中心とした領域を高解像度に、だんだん中心から遠ざかるに連れて低解像度にすることで、Rendering負荷を下げつつ必要な部分のみ解像度を高めるという手法です。
で、実際に試したのですが、正直違いはわからなかったです・・・(Demoが悪いのか視力が悪いせいなのか・・・)
None
Low
Medium
High
検証するにあたって
APKのInstall方法
Apple Vision Pro 同様本体にはUSB-C のポート等はありません。
そのため、基本的には ADB のワイヤレスデバッグを利用します
ワイヤレスデバッグを使えば有線で端末とPCをつながなくてもapkのInstall/Uninstall/logcat などデバッグコマンドが一通り使えます。
スマホのAndroid 端末と同様、
- 設定画面の開発者設定
- ワイヤレスデバッグの項目を ON
- ワイヤレスデバッグの項目のToggleじゃない部分を選択
- ペア設定コードによるデバイスのペア設定 を選択
そうするとおそらく同じLAN環境につながれていれば、6桁の数値とポート番号つきのローカルIPが表示されるので、まずはポート番号つきのローカルIPを以下のように入力します。
$ adb pair xxx.xxx.xxx.xxx:xxxxx
その後、ペアリング用の番号を聞かれるので
Enter paring code :
のところに先ほどの本体側に表示されている6桁の番号を入力します。
このようにすることで、無線で adb install -r hoge.apk のようにAPKをInstallしたりすることが可能です。
環境構築でハマったポイント
1. 入力で警告が出る
このような無言の警告が出る場合があります。(おそらくは日本語テキストが本体側でうまく処理できて表示できてないだけです)
これは、公式のStartup ガイドにあるOpenXRの設定の Enabled Interaction Profiles の設定ミスが原因です
2. コントローラーの入力設定を求められる
1を設定したのに今度はコントローラーの入力を求められるモーダルが表示される場合があります。
いやハンドトラッキングとGaze操作するからコントローラーなどないという場合もありますが、基本的には1の設定をすることの弊害です。
こちらはInputSystemのInputAction との設定に乖離がある場合に表示されます。
暫定的な対処方法としてはUnityのProjectSettings内にあるInputSystemPackageの
Project-wide Actions をNone にすることで回避できます。
ただ、このようにしてしまうと操作がシンプルに出来なくなるので、UnityのMRProjectTemplate にある InputActionManager コンポーネントのようなInputSystemActionを設定するScriptを用意してあげると良いです。





















