MENU

【Unity】AR Foundationで検知した平面をタップした時に3Dモデルを配置する

記事内に商品プロモーションが含まれる場合があります

前提として、平面検知までができている状態で解説します。

まだの場合は以下の記事を参考に平面検知までの設定を済ませておいてください。

目次

平面をタップした時に3Dモデルを配置するには?

ユーザーがタップした座標にAR Raycastを発射し、ヒットした平面を取得し、そこに3Dモデルを配置します。

AR Raycast Managerを追加する

AR Foundation での Raycast を行うには、AR Raycast Manager が必要なので追加しましょう。

「XR Origin → Add Component」で「AR Raycast Manager」を検索して追加します。

スクリプトの作成

AR Raycastを発射し、平面をタップしたら3Dモデルを配置するスクリプトを作成します。

ファイル名はなんでも良いですが、この例では「Raycast」という名前で作成します。

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

public class Raycast : MonoBehaviour
{
    // 配置するCubeのPrefab
    [SerializeField]
    private GameObject cubePrefab;

    // AR FoundationのRaycastを管理するマネージャー
    private ARRaycastManager arRaycastManager;

    // Raycastのヒット結果を格納するリスト
    private List<ARRaycastHit> hitResults = new List<ARRaycastHit>();


    void Start()
    {
        // AR Raycast Managerの取得
        arRaycastManager = GetComponent<ARRaycastManager>();
    }

    void Update()
    {
        // 画面がタッチされたかどうかを確認
        if (Input.touchCount > 0)
        {
            // 最初のタッチを取得
            Touch touch = Input.GetTouch(0);

            // タッチが始まった瞬間の処
            if (touch.phase == TouchPhase.Began)
            {
                // Rayと平面が交差した時の処理
                if (arRaycastManager.Raycast(touch.position, hitResults, TrackableType.PlaneWithinPolygon))
                {
                    // ヒットした位置と向きを取得し、Prefabとして用意されたCubeをその位置に生成
                    Pose hitPose = hitResults[0].pose;
                    Instantiate(cubePrefab,hitPose.position, hitPose.rotation);
                }
            }
        }
    }
}

スクリプトが作成できたら、XR Originにアタッチします。

最後にCubeをスクリプトの「Cube Prefab」にアタッチします。

実機で確認してみる

検知した平面をタップした時にCubeが表示されるようになります。

Unityが学べる書籍

Share

Comment

コメントする

目次