夜風のMixedReality

xRと出会って変わった人生と出会った技術を書き残すためのGeekなHoloRangerの居場所

Unity iPhoneのARアプリで現実の床の上にオブジェクトを配置する

本日はUnity枠です。

今回はiPhoneのARアプリで現実の床の絵にオブジェクトを配置していきます。

〇環境

・Unity2022.3.21f1

〇床のメッシュの作成

iPhoneで空間メッシュを取得するにはARFoundationから提供されるARMeshMaangerコンポーネントを使用します。

このコンポーネントがアタッチされたオブジェクトをXROrignオブジェクトの子オブジェクトとして配置します。

またMeshPrefabには任意のMeshFilterおよびMeshRendererを持ったプレファブを作成し設定します。

ここで指定するプレファブのMeshRendererのマテリアルに指定したマテリアルが空間メッシュのマテリアルに使用されます。

〇床の検知とオブジェクトの配置

ARMeshManagerコンポーネントMeshPrefabに指定するプレファブにMeshColliderを設定しておくことで生成される空間メッシュにコライダーが設定されます。

ここでMeshPrefabオブジェクトのTagをfloorというものに変えました。

これによって生成される空間メッシュもfloorというTagが与えられます。

そのうえでメッシュ状にオブジェクトを配置するにはUpdate関数で次のような処理を実装します。

     if (Input.touchCount > 0 && Input.GetTouch(0).phase == TouchPhase.Began && isUpdate)
            {
                Vector2 touchPosition = Input.GetTouch(0).position;
                Ray ray = Camera.main.ScreenPointToRay(touchPosition);
                RaycastHit hit;
                    //画面をタップしたときfloorにレイを当てその位置をobjに適応
                    if (Physics.Raycast(ray, out hit))
                    {
                        if (hit.transform.tag == "floor")
                        {
                                obj.transform.position = hit.point;
                    }
                }
           }
            

ここではレイキャストを行い、ヒットしたオブジェクトのタグがfloorであった場合オブジェクトobjのポジションををhitした座標に適応するという処理です。

実機で動かすと次のようにきちんと動作をしていることが確認できます。

本日は以上です。