はじめに
どうも、土鍋です。
開発でAR Foundationを使うことになったのですが、Unity6で若干UIや設定が変わったのでメモ的に記事を書きました。
AR Foundationのセットアップ
AR Foundationのインポート
Package ManagerでUnity Registryで「AR Foundation」を検索し、インポート。

XR Plugin設定の変更
XR Plug-in Managementから自分のビルドしたいプラットフォームのProvider plug-inを選んでください。
※私はAndroidなのでAR Coreを選択。

Project Validationですべての項目をFixしてください。

URPの設定変更
このままビルドするとうまくARが機能しないので、AR用のRenderFeatureを追加する必要があります。
ProjectSettingsのQualityからどのRenderPipelineAssetを使用しているか確認してください。
※ビルドする対象の設定を確認してください。

使用しているRenderPipelineAssetのUniversal Render Dataを選択。

Add Render FeatureでAR Background Render Featureを追加。

これで問題なくARが機能します。
平面にキャラクターを配置するアプリ
シーンのセットアップ
ここからは実際にARアプリを作ってみます。
ヒエラルキーから
XR > AR Session
XR > XR Origin
この2つを追加してください。

平面検知
XR OriginにAR Plane Managerを追加。

検出結果を表示するには
XR > AR Default Plane
を出して、それをPrefab化し、
AR Plane ManagerのPlane Prefabにセット。
これで平面検知ができるようになった。
タップした場所にオブジェクト配置
XR OriginにAR Raycast Managerを追加。
タップした場所に配置して、スワイプで向きを調整できるようにします。
using System.Collections.Generic; using UnityEngine; using UnityEngine.XR.ARFoundation; public class ARCharacterSpawn : MonoBehaviour { [SerializeField] private ARRaycastManager arRaycastManager = null; [SerializeField] private Transform characterTransform; private Vector2 _beforePosition; private Vector2 _nowPosition; private float _rotateSpeed = 5f; private void Update() { if (Input.touchCount <= 0) return; var touch = Input.GetTouch(0); switch (touch.phase) { case TouchPhase.Began: _beforePosition = touch.position; break; case TouchPhase.Moved: { // スワイプでキャラクター回転 _nowPosition = touch.position; if (_nowPosition.x - _beforePosition.x != 0) { var horizontalAngle = (_nowPosition.x - _beforePosition.x) * _rotateSpeed * Time.deltaTime; characterTransform.transform.Rotate(0, horizontalAngle, 0, Space.World); } break; } case TouchPhase.Ended: { // 指を離した場所に配置 var hitResults = new List<ARRaycastHit>(); if (arRaycastManager.Raycast(touch.position, hitResults)) { characterTransform.position = hitResults[0].pose.position; } break; } } } }
完成
