Unityゲーム開発スタジオ スタジオしまづ

初心者向けUnity講座・ 統計・機械学習関係についてつらつらと

【Unity AR】AR Foundation:オブジェクトの配置(iPhone実機テスト)

解説動画

youtu.be

AR Foundation

  • iOSセットアップを終わらせる

    • Unity2019.3をいれる(2019.2でも良さげ)
    • iOSモジュールをいれる
    • 3Dプロジェクトで開始
    • iOSプラットフォームにする
    • カンパニー名とプロダクト名を変える
    • Request AR kit supportをON
    • Camera Usage Descriptionに文字をいれる
    • ArchitectureをARM64に変更
    • Target minimun iOS Versionを11.0
    • PackageManagerを開く
    • AR Foundationいれる
    • ARKit XR Pluginいれる
    • AR Session Origin配置 ←TagでMainCameraにする
    • Main Cameraを削除
    • AR Session配置
      ----ここから------
  • AR Session OriginにAddComponent>AR Raycast Manager

  • AR Session OriginにAddComponent>AR Plane Manager
    Raycastで指定した位置にオブジェクトを置くコンポーネント。 画面タップ時に Raycastを行い、認識済みの平面に当たった場合、そこに1つ指定したオブジェクトを置く。 もし、既に作成済みオブジェクトが置いてある場合は、それを新たな位置に移動させる。
  • オブジェクトAR Default Planeを設置(XR>AR Defalut Plane)
  • Prefab化
  • AR Session OriginにPrefabを設定

  • Scriptを作成

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

public class SpawnObjectToPlane : MonoBehaviour
{
    public GameObject cubePrefab;
    GameObject spawnedObj; // 生成されたものCube
    ARRaycastManager arRaycastManager;

    List<ARRaycastHit> hits = new List<ARRaycastHit>();

    void Start()
    {
        arRaycastManager = GetComponent<ARRaycastManager>();
    }

    void Update()
    {
        // タップした場所に生成
        if (Input.touchCount > 0)
        {
            if (arRaycastManager.Raycast(Input.GetTouch(0).position, hits, TrackableType.PlaneWithinPolygon))
            {
                Pose hitPose = hits[0].pose;
                if (spawnedObj == null)
                {
                    spawnedObj = Instantiate(cubePrefab, hitPose.position, hitPose.rotation);
                }
                else
                {
                    spawnedObj.transform.position = hitPose.position;
                }
            }

        }
    }
}
  • 実機でテスト

補足

  • Cubeでかい!(CubeのScale(1,1,1)は1mn立方体となる)
  • コードの中にあったPoseって何?

    3D空間での位置と回転の表現 この構造は、主に3D空間でのデバイスの現在の「ポーズ」を記述するためにXRアプリケーションで使用されます。 Unity - Scripting API: Pose

参考文献

https://qiita.com/ippo/items/d9c046bb365e2666ffdc

Unityで始めるARKit入門 画像トラッキング編 - おもちゃラボ

Class ARRaycastManager | AR Foundation | 2.1.4

UnityでARKit3を動かすためにAR Foundationを使ってみる - Qiita

スタジオしまづから