UnityのURP(Universal Render Pipeline)上でAR開発をする方法(AR Foundation 5.0)

こんにちは！！[Aster](https://twitter.com/Beehibiki)です！！！
URP(Universal Render Pipeline)を使ってAR開発をしたいと思い環境構築をしていました。
しかし今回
Unityのバージョンを2020.3.40f1・2021.3.40f1
ARfoundation 4 で
で環境構築をしようと試みたのですが、うまく行かず、
最終的にUnity2022.1.23f1 × ARFoundation5.0で動作確認ができましたので、その方法をまとめます。
もし、Unityのバージョンが2020,2021で動いた場合、ご連絡いただけると嬉しいです。

開発環境は以下の通りです。

:::note info
・Unity 2022.1.23f1
・AR Foundation 5.0.3
・Apple ARKit XR Plug-in 5.0.3
:::

# 環境構築
今回の流れとして
まずURPなしで、ARが動くか確認し、その後URPを入れるという流れで環境構築をしていこうと思います。

## AR Foundation 5.0
「AR Foundation」とはiOSやAndroidなどのマルチプラットフォームでARアプリを開発できるようにするためのフレームワークです。 iOSにはARKit、AndroidにはARCoreというAR開発ツールがあります。

今回[こちらの記事](https://note.com/npaka/n/n1f078c30eb40)を参考に環境構築をしました．AR Foundation 5.0.3として提供されているので、そちらを今回使用します。


現時点の最新版

https://docs.unity3d.com/Packages/com.unity.xr.arfoundation@5.0/manual/index.html

https://docs.unity3d.com/Packages/com.unity.xr.arfoundation@5.0/api/UnityEngine.XR.ARFoundation.html

# Unity のプロジェクトの準備

Unityのプロジェクトの準備の手順は、次のとおりです。

Unityを起動し、Unityのプロジェクトを「3D」で新規作成する。

![スクリーンショット 2022-11-19 23.31.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1340659/409d271c-b48f-57d3-c2bf-12a3caac94d1.png)

「Platform」で「iOS」を選択し、「Switch Platform」ボタンを押す。

![スクリーンショット 2022-11-19 23.38.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1340659/0c9a10f9-009c-b838-2de3-a69fb7345b7c.png)


メニュー「Window → Package Manager」で「Package Manager」を開く。

![スクリーンショット 2022-11-19 23.33.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1340659/3292dd98-7511-7df9-3ace-efa06148be3a.png)

「＋ → add package by name」を選択し、以下を指定し、Addを押す。


![スクリーンショット 2022-11-19 23.33.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1340659/8e30ebe7-794c-8704-12f9-9218e9bb6536.png)

出た欄に以下を入力しましょう.

```
・Name : com.unity.xr.arfoundation
・Version : 5.0.3
```
installが始まり、以下のように警告が出ますが、Yesを押すとUnityの再起動が始まります。

![スクリーンショット 2022-11-19 23.34.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1340659/bea2ee37-f011-afac-8c5c-da6e6e8da910.png)


## ARSessionとXROriginの準備
「AR Foundation」でARエクスペリエンスを実装するには、シーンに「ARSession」と「XROrigin」を追加する必要があります。
以下の3つのことを行いましょう
・Hierarchyウィンドウに配置されてる「Main Camera」を削除。
・ メニュー「GameObject → XR → AR Session」で「ARSession」を追加。
・メニュー「GameObject → XR → XR Origin」で「XROrigin」を追加。
ARfoundation4と違い,XROriginの中に「Camera Offset」および「Main Camera」を子に持ちます。


![スクリーンショット 2022-11-19 23.36.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1340659/872b891b-b734-452e-db9f-134c9bd10e13.png)

![スクリーンショット 2022-11-19 23.36.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1340659/6a5383b5-9a32-c7d2-12f3-6ccdda229d74.png)


「＋ → 3D Object → Cube」で立方体を「XROrigin」の子として追加し、位置とサイズを適当に指定。


# iOSでの実行
iOSでの実行手順は、次のとおりです。
AR Foundation5.0.3をimportした要領で，ARkitもimportします．

メニュー「Window → Package Manager」で「Package Manager」を開く。
「＋ → add package by name」を選択し、以下を指定し、Addを押す。

```
・Name : com.unity.xr.arkit
・Version : 5.0.3
```


iOSで動作できるように,メニュー「Edit → Project Settings → Player → Other Settings」で以下を設定しましょう。

![スクリーンショット 2022-11-19 23.25.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1340659/1dec47f2-21cd-3f80-153c-dcd8b351ab74.png)

すると,以下のように「Camera Usage Description」の欄が記入されます．

![スクリーンショット 2022-11-19 23.26.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1340659/dd7af9f8-1b31-2563-b14b-dde034c48506.png)


また、メニュー「Edit → Project Settings → XR Plug-in Management」で「Apple ARKit」をチェックします。

![スクリーンショット 2022-11-19 23.39.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1340659/24de17c4-6d48-6f53-f234-ad24dcce101c.png)

これですべての準備が整いました。以下のようにbuildと実行をし、URPなしでの動作確認をしましょう。

(1) メニュー「File → Build Settings」で「Scenes In Build」にシーンを追加し、「Build」ボタンを押す。
Xcodeのプロジェクトが生成されます。
(2) Xcodeのプロジェクトから、通常のiOSの開発方法と同様に、iOSアプリをビルドし、iOS端末にインストールして実行。
ARアプリ開始時の位置に立方体が配置されているので、カメラから立方体が確認できます．


これで3DシーンでのAR開発が完了しました．次にURPでのAR開発に移りましょう.


# Universal RPの導入

プロジェクトが新規作成され、Unity Editorが起動した後、パッケージマネージャーを起動し、Universal RPパッケージをインストールしましょう。
※該当項目が現れない場合、Unityレジストリを選択（パッケージ種類)

![スクリーンショット 2022-11-19 23.42.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1340659/f6f5f831-dfb6-f30c-658f-aa5092914a46.png)



これで、URPのインストール完了です。

次にURPの背帝をしていきます。
アセット＞作成＞レンダリング＞Universal Render Pipline＞Pipline Asset(Forword Renderer)　を選択決定します。

![スクリーンショット 2022-11-19 23.44.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1340659/e431086e-650c-026c-4684-873897253068.png)

名前を任意につけましょう(今回は ARUniversalRenderPipelineAssetとしました.)

![スクリーンショット 2022-11-19 23.44.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1340659/c320bff3-cba2-afb4-632a-264fded56890.png)


するとプロジェクトウィンドウに下記２つのファイルが作成される。

```
・ARUniversalRenderPipelineAsset
・ARUniversalRenderPipelineAsset_Renderer
```

![スクリーンショット 2022-11-20 0.05.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1340659/0aaafc99-f519-3661-3867-0f6c53b178d7.png)


ForwardRendererを選択したインスペクタで、ARBackgroundRendererFeatureをレンダラフィーチャのリストに追加してください。

![スクリーンショット 2022-11-19 23.45.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1340659/bfc3d945-ee4d-6b95-8992-ccf2c79c0659.png)

Pipeline Assetの作成と設定が終わったら、次にProject Settingを変更していきます。変更する箇所は以下の2点です。

```
①GraphicsのScriptable Render Pipeline Setting
②GraphicsのRendering
```
![スクリーンショット 2022-11-19 23.27.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1340659/26862fda-90cf-0b06-c313-9994ddd56eab.png)

![スクリーンショット 2022-11-19 23.28.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1340659/87167ed9-45f8-6a58-03fa-f4450f3ce53f.png)


ARCameraManager の Rendering Mode を "After Opqaue" に設定しましょう.

![スクリーンショット 2022-11-19 23.41.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1340659/5a779c06-dbe7-10cc-f340-e39ac206c75a.png)


3Dシーンの時生成したCubeのmaterialが外れているので，再度cubeを生成しましょう.

これで準備完了です．

以下のようにcubeが見れれば完了です．

![gif.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1340659/dabccaa7-f21e-27bb-b6d1-6c33a0aa2554.gif)


# まとめ
今回URP上でARfoundationを使えるようにしました。
これで、VFX Graphなども使えるようになったので、AR開発の幅が広がりました。
しかし、Unity2020,2021でできれば動かしたいので、動作確認出来たらご連絡お願いします。