🐒

AR 1日目 平面の床を認識してウサギ出してみた

2021/11/06に公開

読んでる書籍

ARKitとUnityで始めるARアプリ開発

書籍読んで感じてること

2018年に刊行されたARKitとUnityで始めるARアプリ開発と、現在のUnityが違いすぎて全然参考にならないので、大まかな流れを参考書で学び具体的な実装については自分で調べるしかなさそう。

フォルダ構成

Image from Gyazo
ARSession:ARのライフサイクルを制御するためのコンポーネント。作成されたら〇〇やって、更新されたら〇〇やって、削除した後には〇〇やってー、みたく各段階で制御する内容を記述するもの
ARSessionOrigin:現実空間からスキャンされたデータは、Session Spaceで管理される。管理された情報をUnityのシーンの中で、位置・方向・スケールをいじくるために必要。

参考(これみればいける)

【Unity】ARFoundation入門~機能解説から平面検知の実装まで~
【AR Foundation】平面上にモデルを置く

所々調べたところ

1)ARPlane:検知した平面を、デバイス上で可視化するのに必要
iPhone→カメラ→Unity→平面を検知→カメラ→iPhone(ここで可視化するために必要)

ドキュメントには、
Plane Plefabって?

When a plane is detected, the AR Plane Manager instantiates the Plane Prefab to represent the plane. The Plane Prefab can stay null, but the plane manager ensures the instantiated GameObject has an ARPlane component on it. The ARPlane component only contains data about the detected plane.

平面が検知されたら Plane Prefabをインスタンス化する。

インスタンス化するのはいいけど、検知と同時に表示するのかは謎。

Detection Modeって?

You can specify a detection mode, which can be horizontal, vertical, or both. Some platforms require extra work to perform vertical plane detection, so if you only need horizontal planes, you should disable vertical plane detection.

検出する平面の設定。垂直を検知したいのか、床を検知したいのか等

2)AR Raycast Managerコンポーネントって?
Ray(光線)と検出した平面とのぶつかった位置にモデルを配置する。中でもARRaycastManagerクラスのRaycastメソッドを使用する。

3)スクリプトをアタッチしたときに、自動的にAR Raycast Mangerコンポーネントもアタッチされるようにする理由.spawn.csファイルの

[RequireComponent(typeof(ARRaycastManager))]

今使ってるUnityだと初めから、attachされてるからバージョンの違いかも

Done

一応タップに応じてうさぎが表示されるようになった。
ただ、タップしたのは水色の丸あたりで出てきた場所が全然違うのなんでだろ。。。

Discussion