【UE5】Unreal EngineでARKitを試してみる

UE5を使用してARコンテンツを作成する際の基本的な内容のメモです。
新規作成したBlankプロジェクトからiPhoneにアプリをビルドして、画面タップした場所にCubeを配置することを目標にしています。


# 環境
M2 MacBookAir / Ventura 13.6
iPhone 15 Pro / iOS 17.6.1
Unreal Engine 5.3.2

# プロジェクト作成
ARを使用するには新規プロジェクト作成時にHandheld ARを選択することも可能ですが、ここではBlankプロジェクトを使用します。スマホ向けなので、
- TargetをMobile
- Quality PresetをScalabe
に変更してCreateします。

![スクリーンショット 2024-09-15 9.02.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/85509/c540edf7-044d-010e-0fe1-581c234572bb.png)

# プロジェクトにARKitを追加

- 上部メニューからEdit > PluginsでPluginsウィンドウを開く
- ARKitを検索して、チェックマークを入れる
- プロジェクトを再起動するように求められるので再起動する

# プロジェクト設定

## ARとか関係なくiOS向けにビルドするための設定

- 上部メニューからEdit > Project SettingsでProject Settingsウィンドウを開く
- 左メニューでXcode Projectを選択して、Apple Dev Account Team ID, Bundle ID, iOS Provisioning Profileを設定する

![スクリーンショット 2024-09-15 9.24.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/85509/a6f14670-0d5d-fa44-1755-67e2f0b5545e.png)

この辺はややこしいのですが、Epic公式のYouTubeが参考になります。

https://youtu.be/GhxFg81GEK0?t=2079

## AR向けの設定

今回はiPhoneを横向きにして、カメラが左上にくる様にしたいのでその設定をします。Project Settingsの左メニューでiOSを選択してOrientationで、
- Supports Landscape Right Orientationのみチェックを入れる
- Preffered Landscape OrientationをLandLandscape(right home button)にする

![スクリーンショット 2024-09-15 10.10.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/85509/efc18f37-faa3-5367-c108-086ebca6e284.png)

# AR用のGameModeとPawnを作成する

- Content Browserで右クリック > Blueprint Classを選択 > 表示されたウィンドウでGame Mode Baseを選択して、作成されたBlueprintに適当な名前をつける
- 同様にContent Browserで右クリック > Blueprint Classを選択 > 表示されたウィンドウでPawnを選択して、作成されたBlueprintに適当な名前をつける
- 作成されたPawnを開いてDefaultSceneRootの下にCameraを配置する
- 作成したGameModeを開いてDefault Pawn Classに作成したPawnを設定する
![スクリーンショット 2024-09-15 13.33.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/85509/63d50c73-f6bc-d362-55fd-61d1a990bdce.png)
- 作成したGameModeを Project Settings > Maps & ModesのDefault Modesに設定する
![スクリーンショット 2024-09-15 15.00.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/85509/8a01e73c-9eeb-3d17-014f-a00d4f38d858.png)


# Session Configを作成する
- Content Browserで右クリック > Miscellaneous > DataAssetを選択

![スクリーンショット 2024-09-15 9.45.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/85509/1bdd32d6-0e8a-4dcb-5034-e03af648c385.png)

- 現れたウィンドウでARSession Configを選択して適当に名前をつける
![スクリーンショット 2024-09-15 9.46.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/85509/28aef7ae-f10b-0569-6a35-94514495033a.png)

### 水平面のみ検出する

デフォルトだと、水平面、垂直面の両方が検出されるように設定されています。ここでは水平面のみ検出したいので、先ほど作成したARSessionConfigを開いて、**Vertical Plane Detectionのチェックを外します。**

![スクリーンショット 2024-09-15 12.42.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/85509/b2acdd08-2921-9891-2e43-6421fb98e86c.png)


# Level Blueprintを編集

- 新規レベルを作成してLevel Blueprintを開く
- Begin PlayノードにStart AR Sessionを繋ぐ。ARSession Configには先ほど作成したMyARSessionConfigを設定する
![スクリーンショット 2024-09-15 10.00.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/85509/01935034-d6bc-cf06-bc60-0dcbd5880ae3.png)

※ ここまでの状態で実機ビルドすると、カメラへのアクセスが求められて許可するとカメラが起動するはずです。


## 検出された平面をデバッグ表示する

カメラが起動するだけではARが使用できているのかイマイチ分からないので、Level Blueprintを次のように組んで検出された平面をデバッグ表示します。

![スクリーンショット 2024-09-15 10.33.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/85509/cbf5676e-1e5c-fa36-210f-268a376fea67.png)


## 平面をタップしてCubeを配置する

- 配置されるCube用のブループリントを適当に作成する。メッシュが大きすぎると配置したCubeの中に入ってしまって、何も配置できていないように見えてしまうのでスケール等でいい感じの大きさにしておく
- 以下のようにLevel Blueprintを組む

![スクリーンショット 2024-09-15 12.59.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/85509/4c187935-4134-f728-e293-326701ec0fa9.png)