UE4でOculusQuest2を動かす１

# 初めに
　この記事はタイトル通り、UE4環境でOculusQuest2を使って簡単なゲームを作っていくというものになっています。そもそも、なぜVR開発を始めたかというと、授業でVRを開発する機会があり、その授業課題提出も兼ねて、ついでに記事を書き始めました。といっても、需要があるのかは分かりませんが、記録として残します。
　VR開発については全くの初心者で、普通に間違っている可能性も十分にあるので、その点に関してはご了承ください。

追記：[第2回](https://qiita.com/HnniTns/items/5ef4e3cc56a7ca0af4ff)を上げました
追記：[第3回](https://qiita.com/HnniTns/items/0266f18586d1726a94c0)を上げました

# 開発環境

+ UE4（Ver. 4.26.2）
+ OculusQuest2（最近購入したモノ）
+ Windows10（11は未確認）
+ Android Studio（最新版でOK）
+ Oculusアプリ（PC, スマホ）

# 開発に必要なハードウェア

+ スマホ（OSは問わず）
+ OclusuQuest2 + USB-Cケーブル（USB2.0も可）※ 最初からついているケーブルは2.0ですが、普通に動きました
+ UE4が動くPC（Windows10）※ 強ければ強いほど良い

# 開発前のやる事

## スマホ側
　スマホ版のOculusアプリをダウンロードして、開発者モードをONにして下さい。恐らく最初は「**開発者登録**」をしなければ、ONにすらならないので登録して下さい。
![開発者モード.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/540257/d849a31f-46f9-e532-ed66-48fc387be8fc.jpeg)

### 参考サイト
[Facebook Oculus Quest 2 開発環境を作る Part1 ～開発者登録～ - プログラマの雑記帳](http://southsandstore.sakura.ne.jp/Programmer/2020/11/01/facebook-oculus-quest-2-%E9%96%8B%E7%99%BA%E7%92%B0%E5%A2%83%E3%82%92%E4%BD%9C%E3%82%8B-part1-%EF%BD%9E%E9%96%8B%E7%99%BA%E8%80%85%E7%99%BB%E9%8C%B2%EF%BD%9E/)

## PC側
　Android Studioをインストールして、「Welcome to Android Studio」まで画面を進めて下さい。次に、More ActionsからSDK Managerを開いてください。
![Android Studio SDK Manager.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/540257/85e94b96-b94f-12f1-bd25-63cbad7433d1.png)
　すると、Android SDKが出てくるので、ここからインストールするSDK/NDKをカスタムします。ここはUE4のバージョンでかなり変わってくると思うので、各自色々調べて頑張って下さい。少なくとも、「UE4 Ver.4.26.2」では下図で動きました。

### SDK Platforms
![Android Studio SDK.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/540257/0f14033c-6a01-3e85-3e99-cd58983c9104.png)

+ Android 12.0(S)
+ Android 7.1.1(Nougat)

### SDK Tools
![SDK Tools.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/540257/9446bf46-aec5-ffad-a83a-596316c485e9.png)

+ Android SDK Build-Tools 32
    + 29.0.2
    + 28.0.3
+ NDK
    + 23.0.7599858
+ Android SDK Command-line Tools (latest)
+ Android Emulator(不要かも？)
+ Android SDK Platform-Tools
+ Intel x86 Emulator Accelerator (HAXM installer)

　詳細はデフォルトでは表示されないので、右下にある「**Show Package Details**（黄色で囲んでいるやつです）」をONにすると表示可能です。恐らく、UE4のバージョンで大幅に変わってくる部分がこの欄になるかと思います。特に「NDK」部分が大変だと思います。なので、各自頑張って下さい。

### 参考サイト

https://shiratori1221.hatenablog.com/entry/2020/06/19/001201

# UE4の環境構築
　次にUE4での環境構築です。本記事では一からゲームを作る事を前提にしています。とりあえず、動かしたいという場合はテンプレートを使用してみて下さい。

## プロジェクト作成
　毎度おなじみプロジェクトブラウザで作成します。

+ 新規プロジェクト「ゲーム」
+ テンプレートは「Blank」
+ プロジェクト設定は「ブループリント | スケーラブルな3D・2D | レイトレーシング無効 | モバイル/タブレット | スターターコンテンツ有り」で作成

## プロジェクト設定
　真っ先に「編集 ＞ プロジェクト設定」でプロジェクト設定を開いてください。これらの構築も「UE4 Ver.4.26.2」でのお話なので、他のバージョンでは動かない可能性もかなり高いと思います。

### プラットフォーム - Android
　恐らく、テンプレートでVR用に構築していない場合は「プロジェクトはAndroidプラットフォームに対応していません」となっているので、「今すぐ設定」をクリック。

#### APKのパッケージ化
![Android - APKのパッケージ化.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/540257/68d341d4-ef1e-6639-3648-d37de0ea717c.png)

+ 最低限のSDKバージョン（19=KitKat, 21=lollipop）
    + 25
+ ターゲットSDKバージョン（19=KitKat, 21=lollipop）
    + 25

#### 高度なAPKのパッケージ化
![Android - 高度なAPKのパッケージ化.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/540257/4b57acd0-dbcf-3a75-370e-a18d2a0545ec.png)

+ Oculusモバイルデバイス向けのパッケージ
    + 0
        + Oculus Quest 2
        + 配布APKからOculus署名ファイルを削除

### プラットフォーム - Android SDK
![Android SDK - SDKConfig.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/540257/310e3e54-1345-e26c-a8ae-c72279514801.png)

+ Location of Android SDK (the directory usually contains 'android-sdk-')
    + C:/Users/（ユーザー名）/AppData/Local/Android/Sdk
+ Location of Android NDK (the directory usually contains 'android-ndk-')
    + C:/Users/（ユーザー名）/AppData/Local/Android/ndk/23.0.7599858(バージョンによる)
+ Location of JAVA (the directory usually contains 'jdk')
    + D:/folder/Android Studio/Installation/jre (Android Studioをインストールした場所になります)
+ SDK API Level (specific version, 'latest', or 'matchndk' - see tooltip)
    + matchndk
+ NDK API Level (specific version or 'latest' - see tooltip)
    + android-21

　ここも大変なところです。というのも、初見では何が何を指しているのかが不明なので、分かりにくいからです。Android Studioのインストール時に何もいじっていないなら、大体同じ場所になると思います（JAVAは場所をいじっています）。

### プラグイン - OculusVR
　この欄が存在しない場合は、「編集 ＞ プラグイン」で検索で「ocu」と入力すれば、「Oculus VR」が出てくるので有効にすればOKです。この時点で、OculusQuest2をPCに接続して下さい[^0]。

#### General Oculus
![プラグイン - OculusVR.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/540257/baf7f39b-355e-43a0-a336-5768573bf0a2.png)
　「Oculusパフォーマンスウィンドウを起動」と「Oculusプラットフォームウィンドウを起動」を使用します。「Oculus向けのテレメトリリビルドを有効にする」がいるのかは分かりません。というより、現状この項目が何を指しているのかが分かっていません。

[^0]: 注意が出ていますが気にしないで下さい。

##### Oculusパフォーマンス確認 - 基本設定
　ターゲットプラットフォームをモバイルに変更して、「有効にして下さい」的な項目が出てくるので全て有効にして下さい[^1]。

[^1]: すいません、スクショを取るのを忘れていたので画像はありません。

#### モバイル
![プラグイン - OculusVR - モバイル.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/540257/5baa77ff-e3af-572f-5ed6-b2ec1b5da852.png)

+ ハンドトラッキングサポート
    + Controllers and Hands

### コンパイル / ビルド
　OculusQuest2をPCに接続した際に、OculusQuest2側で「USBデバックを許可しますか？」が出るので、「許可する」を選択。次に、「データへのアクセスを許可」が出るので、「許可する」を選択。これらをコンパイル前にしておいて下さい。

![ビルド - Oculus.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/540257/3166ff55-7bac-e6bf-12b2-da2f4aeb9cd5.png)
　これで環境構築がようやく終わりです、「起動 ＞ Quest_2(恐らく型番？)」をクリックして、コンパイル・ビルド作業に入ります。そもそも、表示されていない場合は、「上記の設定が上手くいっていない」or「OculusQuest2を接続していない」かのどちらかです。

　その後、数分フリーズした後に、ようやくコンパイル作業に入ります。「Android_ASTCのアセットを処理中...」と「シェーダーをコンパイル中(～)」が出てくればとりあえずOK。初回はかなり長いですが、２回目以降は短くなります。
　これで一安心...と思いきや、エラーが出現して出力に失敗する可能性が非常に高いと思います。「エラーが発生 → 出力失敗 → エラー内容を確認 → 内容に応じて調べる → 修正する」が成功するまで無限に続きます。ここが一番大変です。間違いない。<font color="red">**アウトプットログを確認**</font>する事を忘れないようにして下さい。エラー内容が表示されています。

　ちなみに、勝手にOculusQuest2側に出力されているとおもうので、たまに覗いてみて下さい。恐らくアウトプットログに「LogPlayLevel: ********** RUN COMMAND STARTED **********」が表示されている後に、進まない状況になっていればOculusQuest2側に出力されていると思います。ここまで出来ていればほぼ完了で、<font color="red">OculusQuest2側で出力されているアプリ？を終了してください</font>。すると、何故か分かりませんがUE4側で処理が進み終わると思います。

　ここまでくれば、一回PCとの接続を解除してOculusQuest2単体で起動する事が可能です。OculusQuest2のアプリを開き、右上にある「全て（○件）」を選択、一番下にある「提供元不明（○件）」を選択して下さい。すると、出力したアプリ？があると思います。

#### 実行例
![Exsample](https://user-images.githubusercontent.com/52647796/145677447-25fc265c-8e24-4445-8968-5fecd01c52d4.gif)
　上手くいけばこのように実行する事が可能です。といっても、コントローラーが無いのですが...。コントローラ－はUE4のバージョンによって、対応の有無が変わるみたいです。「UE4 Ver.4.27」以上ではランチャー経由で可能です。詳細は下記サイトを参考にして下さい。
[Facebook Oculus Quest 2 開発環境を作る Part1 ～開発者登録～ - プログラマの雑記帳](http://southsandstore.sakura.ne.jp/Programmer/2020/11/01/facebook-oculus-quest-2-%E9%96%8B%E7%99%BA%E7%92%B0%E5%A2%83%E3%82%92%E4%BD%9C%E3%82%8B-part1-%EF%BD%9E%E9%96%8B%E7%99%BA%E8%80%85%E7%99%BB%E9%8C%B2%EF%BD%9E/)

#### エラー例
+ <font color="red">LogPlayLevel: Error: ERROR: Android toolchain NDK r23b not supported; please use NDK r21 to NDK r23 (NDK r21b recommended)</font>
    + 現在導入されているNDKのバージョンが非対応なので、書いてある通りに変更して下さい。
+ <font color="red">Android：パッケージ化できません：Intermediate / Android / APK \ gradle \ rungradle.bat "：app：assembleDebug</font>
    + これはよく分からないのですが、「[Android: can't package: Intermediate/Android/APK\gradle\rungradle.bat" :app:assembleDebug](https://answers.unrealengine.com/questions/880938/view.html) - UE4 ANSWERHUB」によれば、「Android SDK Build-Tools 32 > 28.0.3」に変更すると解決しました。

# VRモード
　UE4ではVRを使って編集する事が可能ですが、便利なのかは正直分かりません。VRモードをOculusQuest2で使うためには、Oculus Linkを使用します。その為には、PC版のOculusアプリを導入する必要があります。詳細は下記参考サイトをみて下さい。例えば、VRモードが出ていない場合などは接続した状態でUE4を起動する必要があったり...。

「試しにデモでVRモードをONにしてみた」の図 ↓
![VRモード.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/540257/60798073-2077-8555-586b-e1e711fa332a.jpeg)

## 参考サイト

https://www.moguravr.com/oculus-link-setup-explanation/

https://docs.unrealengine.com/4.27/ja/BuildingWorlds/VRMode/

https://zenn.dev/d_forest/scraps/cec3c8be0215d0

# 次回へ続く
　今回は環境構築編でした。次回からキチンとゲームを作り始めます。といっても、簡単なゲームを作るだけなので「UFOシューティング」のようなゲームを作りたいと考えています。

---

　なんだかんだで、ユウナマの記事を上げてから２か月経ってしまいました。どうしても、記事を書くやる気が発生せず、卒業制作に取り組んでいました。楽しみにしてくれている方には申し訳ありません。実はユウナマ制作に関してはほとんど進んでいません。どうしても、個人制作よりもチーム制作を優先度が高いので...。
　ユウナマの記事とは別に一回記事を没にしていたり...。恐らく、２月以降にユウナマ関係の記事を上げると思います。

# 参考サイト

+ [【UE4】OculusQuestのHandtracking導入手順（Android開発環境構築も含む）※Quest2の動作確認済み](https://shiratori1221.hatenablog.com/entry/2020/06/19/001201) - shiratori00’s diary
+ [UE4でoculus quest 2用ゲームを作る方法](https://unlimited-games.hatenablog.com/entry/2020/12/11/085533) - UNLIMITED GAMES BLOG
+ [Facebook Oculus Quest 2 開発環境を作る Part1 ～開発者登録～](http://southsandstore.sakura.ne.jp/Programmer/2020/11/01/facebook-oculus-quest-2-%E9%96%8B%E7%99%BA%E7%92%B0%E5%A2%83%E3%82%92%E4%BD%9C%E3%82%8B-part1-%EF%BD%9E%E9%96%8B%E7%99%BA%E8%80%85%E7%99%BB%E9%8C%B2%EF%BD%9E/) - プログラマの雑記帳
+ [Oculus Quest: Unrealエンジンのクイックスタート](https://developer.oculus.com/documentation/unreal/unreal-quick-start-guide-quest/?locale=ja_JP) - oculus FOR DEVELOPERS(Oculus公式サイト)
+ [Oculus と Unreal Engine を使用した VR 開発](https://www.unrealengine.com/ja/onlinelearning-courses/vr-development-with-oculus-and-unreal-engine?sessionInvalidated=true) - UNREAL ENGINE(UE公式サイト)
+ [Unreal Engine VR モード](https://docs.unrealengine.com/4.27/ja/BuildingWorlds/VRMode/) - UNREAL ENGINE
+ [「Oculus Link」のセットアップを徹底解説 注意点やケーブル選びも](https://www.moguravr.com/oculus-link-setup-explanation/) - MoguLive