LoginSignup
4
1

More than 3 years have passed since last update.

ARCoreの力を使ってきのこの山をたけのこの里に変えてみた。

Last updated at Posted at 2020-07-16

たけのこの里が好き

今回はたけのこの里が好きなので、きのこの山が家にあった際にARを使って上からたけのこの里に変えるというARアプリの作成をしました。(きのこの山が嫌いなわけではないです)

参考にさせていただいた記事

環境

Windows 10
Unity2018.4.17f
ARCore-Unity-SDK(https://github.com/google-ar/arcore-unity-sdk/releases/tag/v1.9.0)
Huawei mate 20 lite

実装

まず初めにARCoreのgithubからダウンロードをしてきます。そして、SampleSceneにAssets/GoogleARCore/Prefabsに存在しているARCore Deviceを追加を行い以下の画像のようにします。
image.png

次に今回のARを表示するためのマーカーとなる画像をUnityにインポートを行います。そしてインポートした画像を右クリック=>Create=>Google ARCore=> AugmentedImageDatabaseをクリックします。(以下の画像)
image.png
これを行うとマーカーとしてデータベースに画像が保存されます。ここで大きさは0.1名前についてはkinokoとして登録しました。Qualityがマーカーとしてどれだけ適しているかを示しています。今回の画像は100となっているので、最高の値を出しています。
image.png
次にARCore Deviceを選択して、ARCoreSessionの中にあるSession Configのダブルクリックします。その中のAugumentedImage Databaseに一つ前に作成したデータベースのmarkerを登録します。
image.png
image.png

次に検出を行うコードを書きます。そして、ARCore下にGameObject(Manager)を作成して、次のスクリプトをアタッチします。(コードも参考にさせていただいた記事からお借りしました。)
image.png

using System.Collections;
using System.Collections.Generic;
using GoogleARCore;
using UnityEngine;
public class AugmentedImageSample : MonoBehaviour {

    private List<AugmentedImage> augmentedImageList = new List<AugmentedImage> ();
    [SerializeField] private GameObject ObjPrefab;
    private GameObject arObj = null;

    void Update () 
    {
        if (Session.Status != SessionStatus.Tracking) 
        {
            return; 
        }

        Session.GetTrackables<AugmentedImage> (augmentedImageList, TrackableQueryFilter.Updated);

        foreach (AugmentedImage image in augmentedImageList) 
        {
            if (image.TrackingState == TrackingState.Tracking) 
            {
                if (arObj == null) 
                {

                    Anchor anchor = image.CreateAnchor (image.CenterPose);
                    arObj = Instantiate (ObjPrefab, anchor.transform);

                }
                else 
                {

                    arObj.transform.position = image.CenterPose.position;
                    arObj.transform.rotation = image.CenterPose.rotation;
                }
            }

        }
    }
}

そして、Managerの選択してObj PrefabにARにおいて画像認識をした際に表示をさせたいものをセットします。今回の場合たけのこの里の画像を表示させます。まず初めにたけのこの里の画像をUnityにインポートします。そしてインポートした画像のTexture TypeをSprite(2D and UI)に変更を行います。
image.png
その後3D Object->Planeを作成してPrefab化を行い先ほど作成を行ったたけのこの里のTextureをアタッチします。
image.png

image.png
作成をされたPlaneのPrefabをManagerの選択してObj Prefabへとアタッチします。
image.png
これで、きのこの山を認識して上からたけのこの里へと書き換えるARのアプリを作成することが出来ます。

ビルドについて

まず、build settingsからSampleSceneをadd Sceneで追加を行いAndroidへとswitch platformを行います。
image.png
Player Setting は次のようになっています。ARCore Supportedを有効にします。
image.png
minimum API LevelはAndroid 7.0 Target API Levelは端末に合わせたものを選びました。
image.png

デモ動画

このように実際に認識を行なって上から表示を行うことが出来ます。

4
1
0

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
4
1