【AR Foundation】平面検出して箱を表示してみよう!UnityでARアプリ開発!

AR Foundationで平面検出
  • URLをコピーしました!

今回は、AR Foundationの平面検出機能を使い、タップした平面に箱を配置するということをしていきたいと思います!

学習に使った本はこちら!

¥4,000 (2022/11/06 14:56時点 | Amazon調べ)
クマじい

Amazon Kindle Unlimited でもUnityの本はいっぱいあるんじゃ!!

  • 技術書をたくさん読みたい!
  • 色々な技術を学びたい!
初回30日間無料体験があるので、どのような参考書があるか確認してみよう!

Kindle Unlimitedで技術書を読むならタブレットがあるとさらに便利ですよ!
10インチあるとより見やすいと思いますが、7インチでも十分見やすくなります!

前回の「ARで箱を表示してみよう!」の続きになりますので、まだ見ていない方はぜひ見てください!!

目次

平面を検出する

AR Plane Managerの配置

AR Plane Manegerが、今回の主役となる平面検出を担ってくれる機能です。
これをAR Session Originに追加することで、平面検出を可能にしてくれます。

まずは、前回の画面を表示してください!

前回作成した「AR Session Origin」を編集していきます!

「AR Session Origin」を選択し、Add Component>AR Plane Managerを追加します!

下の画像のようになっていれば、OKです!

「Plane Prefab」が、None(Game Object)になっていると思います。

このままの場合、平面の検出はしてくれますが、どこが平面として検出してくれているかわからない状態です。

今回は、平面を確認したいのでPlaneを追加したいと思います!

Planeを作成

Hierarchyで、右クリック>XR>AR Default Plane を選択します!

AR Default PlaneがHierarchyに配置されたと思います!

次に、Project>AssetsにPrefabsというフォルダを作成し、Prefabsフォルダに作成されたAR Default Planeをドラックします。

下の画像のように、AR Default Planeが青くなっていたらOKです!

次は、Hierarchyから「AR Default Plane」を一旦削除します。

削除ができたら、先ほどPrefabsフォルダに入れた「AR Default Plane」を、AR Session Origin>AR Plane Manager>Plane Prefabにドラックします!

最終的に、上の写真のようになっていればOKです!

これで平面検出ができるようになりました!

平面に箱を配置する

今はまだ、平面を検出できるようにしただけで、ただ平面にAR Default Planeが表示されるだけです。

次は、平面に箱を配置するということをやっていきたいと思います!
少々、理解が難しいことも含まれますが、とりあえずこうすればいいんだ!!って思っていただけるといいと思います。

AR Raycast Managerの配置

Raycastとは、光線だと認識してもらえればいいと思います!
光線と先ほどのAR Default Planeがぶつかる場所に箱を配置します。

詳しく知りたい方は、Unity公式ページのリンクを参照してみてください!!

AR Session Origin > Add Component > AR Raycast Manager を追加します!

下の写真のようになっていればOKです!

タップ位置を取得する

次からは、少しコーディングをしていきます。

まずは、Project>AssetsにScriptsフォルダを作成してください。

Scriptsフォルダを作成したら、そこにCreate>C# Scriptを選択し、C#ファイルを作成してください!
C#の名前は、任意に変更してください!(今回は、CubeGeneraterとしてます!)

できたら、下の写真のようになっていると思います!

作成されたC#ファイルを下のように編集します。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.XR.ARFoundation;
using UnityEngine.XR.ARSubsystems;

public class CubeGenerater : MonoBehaviour
{
    // 平面に生成するオブジェクト
    [SerializeField] GameObject CubeObject;

    // ARRaycastManager
    ARRaycastManager raycastManager;
    
    // RaycastとPlaneが衝突した情報を格納
    List<ARRaycastHit> hits = new List<ARRaycastHit>();


    // Start is called before the first frame update
    void Start()
    {
        // ARRaycastManager格納する
        raycastManager = GetComponent<ARRaycastManager>();
    }

    // Update is called once per frame
    void Update()
    {
        // 画面がタッチされたかチェック
        if(Input.touchCount > 0)
        {
            // タッチ情報を格納
            Touch touch = Input.GetTouch(0);

            // タッチした位置からRayを飛ばして、Planeにヒットした情報をhitsに格納する
            if(raycastManager.Raycast(touch.position, hits, TrackableType.Planes))
            {
                // Cubeを生成する
                Instantiate(CubeObject, hits[0].pose.position, Quaternion.identity);
            }
        }
    }
}

Visual Studioが標準で起動されると思います。Visual Studioで問題なければ、そのまま使ってもらえれば問題ないと思います。

もし、Visual Studio Codeを使用したい場合は、こちらを参考にしてください!

C#ファイルの編集が完了したら、一旦保存してUnityに戻ってください!

次に、AR Session Originに先ほど保存したC#ファイルをドラックしてください!
下の写真のようになればOKです!

このままでは、作成したスクリプトのCube ObjectがNone(Game Object)のままなので、Cubeを選択してあげる必要があります。

まず、CubeをAssets>Prefabsにドラックしてください!

Cubeも青くなったと思います。

青くなったらHierarchyから一旦、Cubeを削除します。

削除ができたら、Prefabsに入っているCubeをAR Session Origin>Cube Controller(名前は任意)>Cube Objectにドラックします!

これで完成です!!
ビルドして、実機で確認してみましょう!

実際に確認してみる!!

まずは、ビルドしましょう!!

Build Settings>Buildを選択し、生成された「Unity-iPhone.xcodeprojをXcodeで実行する流れです。わからなければ、前回を参考にしてみてください!

黄色の板みたいなものが、AR Default Planeと言っていたものです。

地面の一部を平面と認識してくれています。平面に向かってタップをすることで下の画像のように箱が配置されるはずです!

まとめ

今回は、ARで平面を検出し、検出した平面に箱を配置しました。
いくつか聞き慣れない単語は、出てきましたが作業的には簡単だったのではないでしょうか。

学習に使った本はこちら!

¥4,000 (2022/11/06 14:56時点 | Amazon調べ)
クマじい

Amazon Kindle Unlimited でもUnityの本はいっぱいあるんじゃ!!

  • 技術書をたくさん読みたい!
  • 色々な技術を学びたい!
初回30日間無料体験があるので、どのような参考書があるか確認してみよう!

Kindle Unlimitedで技術書を読むならタブレットがあるとさらに便利ですよ!
10インチあるとより見やすいと思いますが、7インチでも十分見やすくなります!

次回は、箱ではないものを表示してみようと思います!!

AR Foundationで平面検出

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!

この記事を書いた人

東京在住で20代のエンジニアです。
特に特技があるわけではありませんが、誰もが楽しくプログラミングができたらいいと思い、「teech lab.」を開設いたしました。

Enjoy Diaryという、ガジェットや雑貨を紹介しているブログもあります!
ぜひ、みてください!!

目次