前提として、平面検知までができている状態で解説します。
まだの場合は以下の記事を参考に平面検知までの設定を済ませておいてください。
【Unity】AR Foundationの初期設定手順 | Seeds
UnityでAR Foundationを使うための初期設定手順を解説します。 AR Foundationパッケージのインポート プロジェクトを開いたら WindowからPackage Managerを開きます。 「Pa…
【Unity】AR Foundationで平面検知を行う | Seeds
前提として、「AR Session」と「XR Origin」が追加された状態から解説します。 まだの場合は以下の記事を参考に追加しておいてください。 平面検知を行うには? 平面検知を…
目次
平面をタップした時に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が表示されるようになります。
Comment