LoginSignup
7
4

More than 3 years have passed since last update.

UnityでAR Foundationでユニティちゃんを表示してみた

Last updated at Posted at 2020-12-22

本記事はサムザップ サムザップ Advent Calendar 2020 #2 の12/23の記事です。
昨日の記事は@ohbashunsukeさんの『【Unity】新規ゲームのUI開発で気をつけた39のTips後編。』でした

今回は、以前から興味があったUnity AR Foundationを触ってみたいと思います

Unity AR Foundationとは

Unityが開発しているマルチプラットフォームのAR開発フレームワークです。
特徴としては、ARKitとARCoreのマルチプラットフォームARを簡単に作ることができます。
https://docs.unity3d.com/Packages/com.unity.xr.arfoundation@2.1/manual/index.html

主な機能は
- World tracking : 物理空間でのデバイスの位置と方向を追跡。
- Plane detection : 水平および垂直面の検出。
- Point cloud : 特徴点の検出。
- Reference point : デバイスが追跡する任意の位置と方向の検出。
- Light estimation : 物理空間の光源と輝度の推定。
- Face tracking : 人間の顔の検出。
- Image tracking : 2D画像の検出。
- Object tracking : 3Dオブジェクトの検出。

開発環境

  • MacBook Pro Catalina10.15.7
  • Unity 2019.4.16f1
  • XCode 12.xx

準備

簡単なARアプリを作成してみよう

1.サンプル用のプロジェクトを作成する 今回はARFoundationSampleとします
スクリーンショット 2020-12-22 2.25.48.png

2.window>Package ManagerにてARFoundationをインストールする
スクリーンショット 2020-12-22 2.29.55.png
同じようにXR Pluginなどもインストールします。

・AR Foundation 2.2.10
・AR Subsystems
・ARCore XR Plugin(Androidで必要)
・ARKit XR Plugin 2.1.0(iOSで必要)
・ARKit Face Tracking(iOSで必要)

スクリーンショット 2020-12-22 2.33.00.png

3.Main Camera 、DirectionalLightを削除して、代わりにAR Cameraを導入します。

4.GameObjectをヒエラルキーに追加して、
GameObject > XR > AR Aession Originと
GameObject > XR > AR Session
を追加してください

AR Aessionとは?

ARエクスペリエンスのライフサイクルを制御するオブジェクト

AR Aession Originとは?

ARアプリ開始時の端末の位置の原点となるオブジェクトです。
このオブジェクトの子ノードとして、AR空間内のカメラや3Dオブジェクトを配置します。

スクリーンショット 2020-12-21 17.39.55.png

5.先ほどDownloadしておいたUnityChan_1_2_1.unitypackageをimoportする
とりあえず気にせずに全て追加する
スクリーンショット 2020-12-21 21.42.38.png

6.一旦ビルドしてみると以下のようなエラーが出るので
System.Security.Policyのクラスを利用していないため、using節からSystem.Security.Policyを削除しておいてください
スクリーンショット 2020-12-21 21.42.16.png

7.サンプルシーンにいるUnityChanをヒエアルキーに追加する
スクリーンショット 2020-12-21 23.36.47.png

8.UnityChanをunpack Prefabしてプレハブ化してください
スクリーンショット 2020-12-21 23.37.34.png

9.ヒエアルキーからフォルダにドラッグアンドドロップする
スクリーンショット 2020-12-21 23.39.56.png

10.Unitychanを置くために、AR Session Origin >Inspector>Add ComponentでARRaycast Managerを追加する。
スクリーンショット 2020-12-21 23.46.07.png

11.AR空間のタッチした位置に3Dオブジェクトを配置する機能を追加してみます
今回は、ARManager.csというスクリプトを作成します

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

[RequireComponent(typeof(ARRaycastManager))]
public class ARManager : MonoBehaviour
{
    //配置したいオブジェクト
    [SerializeField]
    GameObject modelPrefab;
    private ARRaycastManager raycastManager;
    private List<ARRaycastHit> raycastHitList = new List<ARRaycastHit>();

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

    void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {
            if (raycastManager.Raycast(Input.GetTouch(0).position, raycastHitList))
            {
                Instantiate(modelPrefab, raycastHitList[0].pose.position, Quaternion.identity);
            }
        }
    }
}

12.作成したスクリプトをAR Session Origin オブジェクトにアタッチする。
スクリーンショット 2020-12-21 23.46.07.png

13.手順9で作成したUnitychanのprefabをアタッチする。
スクリーンショット 2020-12-22 0.04.44.png

ビルド

iOS向けにビルドする。
※今回手持ちのAndroid端末でARCoreのバージョンに対応していなかったのでAndroidは今回割愛させていただきます。

(1) メニュー「File → Build Setting → Player Settings」を選択。
(2)「Player」の「Other Settings」で以下の設定を行う。

・Camera Usage Description : AR機能にカメラを使います。
・Target minimum iOS Version : 12.0
・Architecture : ARM64

スクリーンショット 2020-12-23 3.21.30.png

実機で確認してみよう

こんな感じで表示させることができました。
Screen Shot 2020-12-23 at 3.29.13.png

実際はアニメーションさせて、動いたり、ダンスしたりなどモーションが欲しいところですが、そこまで知識がないので今回は単純に表示させるところでこの記事を終わりたいと思います。

まとめ

今回AR Foundationを使うことで、コードをほぼ書かずとしても簡単にAR空間上にモデル表示させることができました。
まだまだAR Foundationには顔認識などいろいろ機能があるのでまた別の機会に触ってみたいと思います。

明日は @m-nakayama さんの番です。

なお、このコンテンツは、『ユニティちゃんライセンス』で提供されています
imageLicenseLogo.png

7
4
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
4