【Unity AR】AR Foundation:オブジェクトの配置(iPhone実機テスト)
解説動画
AR Foundation
iOSセットアップを終わらせる
- Unity2019.3をいれる(2019.2でも良さげ)
- iOSモジュールをいれる
- 3Dプロジェクトで開始
- iOSプラットフォームにする
- カンパニー名とプロダクト名を変える
- Request AR kit supportをON
- Camera Usage Descriptionに文字をいれる
- ArchitectureをARM64に変更
- Target minimun iOS Versionを11.0
- PackageManagerを開く
- AR Foundationいれる
- ARKit XR Pluginいれる
- AR Session Origin配置 ←TagでMainCameraにする
- Main Cameraを削除
- AR Session配置
----ここから------
AR Session OriginにAddComponent>AR Raycast Manager
- AR Session OriginにAddComponent>AR Plane Manager
Raycastで指定した位置にオブジェクトを置くコンポーネント。 画面タップ時に Raycastを行い、認識済みの平面に当たった場合、そこに1つ指定したオブジェクトを置く。 もし、既に作成済みオブジェクトが置いてある場合は、それを新たな位置に移動させる。 - オブジェクトAR Default Planeを設置(XR>AR Defalut Plane)
- Prefab化
AR Session OriginにPrefabを設定
Scriptを作成
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.XR.ARFoundation; using UnityEngine.XR.ARSubsystems; public class SpawnObjectToPlane : MonoBehaviour { public GameObject cubePrefab; GameObject spawnedObj; // 生成されたものCube ARRaycastManager arRaycastManager; List<ARRaycastHit> hits = new List<ARRaycastHit>(); void Start() { arRaycastManager = GetComponent<ARRaycastManager>(); } void Update() { // タップした場所に生成 if (Input.touchCount > 0) { if (arRaycastManager.Raycast(Input.GetTouch(0).position, hits, TrackableType.PlaneWithinPolygon)) { Pose hitPose = hits[0].pose; if (spawnedObj == null) { spawnedObj = Instantiate(cubePrefab, hitPose.position, hitPose.rotation); } else { spawnedObj.transform.position = hitPose.position; } } } } }
- 実機でテスト
補足
- Cubeでかい!(CubeのScale(1,1,1)は1mn立方体となる)
- コードの中にあったPoseって何?
3D空間での位置と回転の表現 この構造は、主に3D空間でのデバイスの現在の「ポーズ」を記述するためにXRアプリケーションで使用されます。 Unity - Scripting API: Pose
参考文献
https://qiita.com/ippo/items/d9c046bb365e2666ffdc
Unityで始めるARKit入門 画像トラッキング編 - おもちゃラボ
Class ARRaycastManager | AR Foundation | 2.1.4
UnityでARKit3を動かすためにAR Foundationを使ってみる - Qiita
スタジオしまづから
しまづと一緒に開発を楽しみたいという方は以下のオンラインサロンもぜひ! community.camp-fire.jp
新サービス:スタジオしまづの限定動画が見放題&オンラインサロンの加入特典 | スタジオしまづアカデミア