【Mac】UE4で開発したアプリをOculus Questへデプロイする

# はじめに

macOSでUE4を使ってOculus Questアプリを制作し、実機で動かすまでの方法が記載された記事があまり見当たらなかったので、書き記します。

今回は、UE4で新規プロジェクト(プロジェクトのカテゴリ：ゲーム)立ち上げからOculus Questへデプロイまでを順を追って説明していきたいと思います。
UE4.25以降をご使用の方は下の項目「【注意】 UE4.25以降をご使用の方へ」をお読み下さい。

やり方は基本Windowsの場合とほぼ変わりませんでした(後から気づいた) :sweat:

文字だけで説明していますが、不足や誤り等がありましたら教えて下さい。


# 当記事で取り扱わない事

- UE4のインストール
- ADBのインストール
- Oculus Questのセットアップ(前提：開発者モードがONになっている事)
- Javaのインストール



# 開発に必要なもの

- Oculus Quest本体
- コントローラー
- 本体付属の充電ケーブル

付属の充電ケーブルはType-Cですが、規格がUSB2.0の為、USB3.x系規格のものを別途購入することをおすすめします。
**付属の充電ケーブルでも開発可能です。(この事は他の記事では記されていない)**

Oculus Linkがありますが、コスパを考慮するなら[AnkerのUSB Type-C & Type-Aケーブル](https://www.amazon.co.jp/Anker-PowerLine-3-0%E3%82%B1%E3%83%BC%E3%83%96%E3%83%AB-Galaxy-%E3%80%81MacBook%E3%80%81Xperia/dp/B01MZIPYPY/ref=sr_1_11?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&keywords=oculus+link&qid=1580131254&sr=8-11)がおすすめです。



# 開発環境

- macOS Mojave 10.14.6
- Unreal Engine 4.24.1
- Java 8



# CodeWorks for Androidのインストール

> /Epic Games/UE_4.24/Engine/Extras/AndroidWorks/Mac/

上記パスにあります。UE4をダウンロードすると同封されてくるはずです。
CodeWorksForAndroid-1R7u1-osx.dmg を起動して手順に沿ってインストールしてください。

必ずしもCodeWorksForAndroid-1R7u1-osx.dmg のバージョンを使う必要はなく、お好みで使いたいエンジンのバージョンをダウンロードしても構いません。
**ただし、Android 4.4.2(API 19)は必須となります。**

詳しくは[UE4公式リファレンス](https://docs.unrealengine.com/ja/Platforms/Mobile/Android/GettingStarted/1/index.html)をご覧ください。


# 【注意】 UE4.25以降をご使用の方へ
UE4.24まではCodeWorksForAndroidをインストールするように指示されていましたが、UE4.25からはAndroid Studio を備えた Android Native Development Kit (NDK)を使用します。
詳しくは以下の公式サイトをご覧下さい。

[Unreal Engine に Android SDK および NDK を設定する](https://docs.unrealengine.com/ja/Platforms/Mobile/Android/Setup/AndroidStudio/index.html)


# UE4側

### 新規立ち上げ

使いたいバージョンの起動ボタンを押して、以下のように新規作成します。

- 新規プロジェクトのカテゴリ：ゲーム
- テンプレート選択：Blank (または バーチャルリアリティ)
- プロジェクト設定：ブループリント、ハイエンド、レイトレーシング無効、**モバイル/タブレット**、スターターコンテンツ無し
- 任意の保存場所、プロジェクトのフォルダとプロジェクト名

上記のように選択して「**プロジェクト作成**」を押せば完了。

テンプレート選択でバーチャルリアリティを選択すると、コントローラ関連やVRに必要なもの諸々を一式準備してくれる。

なお、スターターコンテンツを有りに設定すると、コンパイルに長時間付き合うことになるので使っていない。(テストプレイはできるが処理が重くなる為)


### Projectの設定を変更

まずは上部メニューにある「**現在のレベルを保存**」で現在のレベル(シーン)を任意の名前を付けて保存します。

上部メニューにある「**設定**」のプルダウンメニューを出して、「**プロジェクト設定**」をクリック。

左の一覧から「**プロジェクト**」の「**マップ&モード**」を選択。
「**デフォルトマップ**」の「**エディタのスタートアップマップ**」と「**ゲームのデフォルトマップ**」にプルダウンメニューから先ほど名前を付けて保存したレベルを設定します。

左の一覧から「**プロジェクト**」の「**対応プラットフォーム**」を選択して、「**Android**」にチェックマークをつけて下さい。

左の一覧から「**エンジン**」の「**インプット**」を選択して、「**モバイル**」内の「**デフォルトのタッチ インターフェース**」のプルダウンメニューから「**クリア**」をクリックして、「**なし**」の状態にしてください。

左の一覧から「**エンジン**」の「**レンダリング**」を選択して、「**モバイル**」内の「**モバイル HDR**」のチェックマークを外します。

左の一覧から「**プラットフォーム**」の「**Android**」を選択、「**APK Packaging**」の「**Configure Now**」をクリックします。

また、緑色に変化した左下にある「**Accept SDK License**」がグレーアウトされているか確認してください。
もし、されていない場合はLicenseを読んで承諾ボタンを押して下さい。

下にスクロールしていき、「**Google Play Services**」も同様に「**Configure Now**」をクリックして緑色にします。

「**APK Packaging**」内の「**最低限の SDK バージョン**」と「**ターゲット SDK バージョン**」の値を「**25**」に設定し、「**KitKat および上記のデバイスで全画面の没入モードを有効化**」と「**向上した仮想キーボードを有効化**」にチェックマークを入れます。

下にスクロールし、「**Advanced APK Packaging**」内の「**Oculus モバイル デバイス向けのパッケージ**」にプラスマークをクリックして、プルダウンメニューで「**Oculus Quest**」を選択。

すぐ下の「**配布APKからOculus署名ファイルを削除**」にチェックマークを入れます。

左の一覧から「**プラットフォーム**」の「**Android SDK**」を選択。
「**SDKConfig**」内の「**SDK API Level**」と「**NDK API Level**」に「**latest**」と入力。
「**Location of Android SDK**」、「**Location of Android NDK**」、「**Location of JAVA**」は自動でパスが通るので空欄でOK。

以下の[引用元](https://framesynthesis.jp/tech/unrealengine/android/)

> 空の場合は環境変数 ANDROID_HOME、NDKROOT、ANT_HOME、JAVA_HOME が参照されます（設定の項目をマウスオーバーすると確認できます）。

> CodeWorks for Android をインストールするとこれらの環境変数が自動的に設定され UE4 から参照されますので、通常はここの設定は空のままで構いません。
> Android ビルドができなくなった際はこのことを思い出してください。
> また、ビルドツールの Gradle も環境変数 GRADLE_HOME で参照されます。


メイン(プロジェクト)画面に戻り、Projectの上部メニュー「**設定**」プルダウンメニューから「**プラグイン**」をクリック。

左の一覧から「**Virtual Reality**」を選択、「**Oculus VR**」の「**Enabled**」にチェックマークを入れます。



# Oculus Quest側

### 有線でADBコマンドを使ってOculus QuestをMacにデバイス認識させる

初めてMacにOculusを充電ケーブルで接続した際にOculusの画面に接続の許可を聞かれるので「許可する」を選択。

ターミナル上で以下を実行。

```terminal
 $ adb start-server
 $ adb devices # 認識に成功すると以下が表示される
  List of devices attached
  * daemon not running. starting it now on port {ポート番号} *
  * daemon started successfully *
  {デバイスID}        device
```

認識できない場合は以下を順に実行。

```terminal
 $ adb kill-server
 $ adb start-server
 $ adb devices
```



# プロジェクトをビルドしてOculus Questへデプロイ

Projectの上部メニュー右端の「**>>**」クリックして「**起動オプション**」の「**デバイス**」欄内の「**Oculus Quest**」(または他の名前で表示されている)を選択するとプロジェクトのビルド開始、必要なものがダウンロードされ、自動でOculus Questへデプロイされます。
デプロイが完了するとOculus Questを装着してプレイすることができます。
デプロイしたアプリは、Oculus Questホーム画面内の「**ライブラリ**」の「**提供元不明のアプリ**」に入っていますので、オフラインでいつでもプレイすることが可能です。


![doordoor.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/372998/77f14cf8-c5c1-389c-88c1-04d5f5f8c57b.jpeg)


# ビルドが失敗する場合は

ビルドが失敗する場合、考えられるのは、「**プラットフォーム**」の「**Android SDK**」のパスが間違っていたり、バージョンが古かったりすることがほとんどです。
ログにはエラー内容の詳細が出てますので必要に応じて修正して下さい。



# 【番外編】 Oculus Questをリモートで接続する

番外編なので詳しいことは書きません。以下を参考にして下さい。

- [Oculus Go リモートでadb接続する](https://www.scriptlife.jp/contents/programming/2018/05/12/oculus-go-remote-adb/)
- [OculusGo Wi-FiのIPアドレスとMACアドレスを確認する](https://www.scriptlife.jp/contents/programming/2018/05/12/oculus-go-wifi/)

# 参考文献

かなりお世話になりました。有難うございます。

- [UE4 Oculus Go, Questの開発について](http://papersloth.hatenablog.com/entry/2019/06/17/233849)
- [UE4 で Android アプリをビルドするには](https://framesynthesis.jp/tech/unrealengine/android/)
- [サバ管屋がUnreal Engine 4でアプリケーションを開発してみる！～UE4セッティング編～](https://www.skyarch.net/blog/?p=16984)
- [CodeWorks for Android 1R7u1のインストール (英語)](https://docs.unrealengine.com/en-US/Platforms/Mobile/Android/InstallingAndroidCodeWorksAndroid/index.html)
- [Oculus公式UE4開発ドキュメント (英語)](https://developer.oculus.com/documentation/unreal/unreal-quick-start-guide-quest/)