Unity × Immersal SDKの精度調査！

# はじめに
普段、<font color="red">IT企業で働いてますプログラマー芸人のジンバ<font color="black">と申します！
前回、Unity × Immersal SDKでVPSを用いたARアプリを実装するための環境手順を説明しました！

https://qiita.com/Jimba_Geinin/items/3adbf646397c3563c2fe

今回はこのARアプリで現実空間にオブジェクトを置いた時の精度を確認します！

# 準備
前回、こちらのポスターの形状をマッピングしました！
![image6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3574599/a809efee-f2e0-848c-db9b-ec131adf04de.png)

Unityにマッピングデータを入れるとこのようにポスターと地面の形状が分かります。

![スクリーンショット 2024-10-16 21.23.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3574599/20d5c572-e4e1-4abf-76fa-ca7b9273fb0c.png)



このようにオブジェクトを配置してみました！

![スクリーンショット 2024-10-16 21.03.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3574599/2011fdca-09eb-c8a3-d167-60a96be25a85.png)

・ポスターに沿って円形のオブジェクト
・地面に立つように円筒のオブジェクト

現地で正確な位置に表示されるのか！

# いざ現地へ！

良い感じにポスターの沿ってますねー！ちゃんと回り込んでも位置は変わらずでした！

<img width="400" alt="ファイル名" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3574599/7a14dbfe-474e-9cff-622a-b3bd035cc0f6.png">

地面との接地もOKです！

<img width="400" alt="ファイル名" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3574599/3602efff-aaad-4c6d-f328-c1dcc418d42f.png">

オクルージョン(手前にある物体が後ろにある物体を隠す状態﻿)も出来ています！

![スクリーンショット 2024-10-16 21.38.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3574599/1c5e6885-e3a2-d849-75ac-1c73ea1ada6b.png)

## アニメーションは注意が必要
以下のような柵の真ん中に
![S__132562957_0.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3574599/74bd3a60-539e-4862-ab5d-010beae5af5d.jpeg)

矢印を表示させます！
![スクリーンショット 2025-02-24 16.59.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3574599/654a98ab-a464-4627-89f3-57d712ad2c18.png)

<font color="red">赤矢印<font color="black">：何もアニメーションなし

<font color="blue">青矢印<font color="black">：以下のような位置を変えるスクリプトを付ける

```cs
using System;
using System.Numerics;
using UnityEngine;

public class SimpleHarmonicMotion : MonoBehaviour
{
    public float amplitude =  1f; // 振幅
    public float frequency = 1f; // 周波数

    private UnityEngine.Vector3 startPosition;

    void Start()
    {
        startPosition = transform.position; // 初期位置を保存
    }

    void Update()
    {
        // 単振動の計算
        float displacement = amplitude * Mathf.Sin(Time.time * frequency * 2.0f * Mathf.PI);
        transform.position = startPosition + new UnityEngine.Vector3(0, displacement, 0);
    }
}
```

<font color="green">緑矢印<font color="black">：位置を動かすAnimationを設定

![スクリーンショット 2025-02-24 17.04.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3574599/5d679170-aec9-414d-9eae-27a6e143786d.png)

### 現地に行くと...

![S__132562954_0.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3574599/a4eac5b0-4e75-4972-b201-a80b0930b7d7.jpeg)

<font color="red">赤矢印<font color="black">：表示されアニメーションなし

<font color="blue">青矢印<font color="black">：表示されない！

<font color="green">緑矢印<font color="black">：表示されアニメーションあり

スクリプトから位置を動かそうとすると表示がおかしくなります！これはどこでやっても同じだったので<b>「アニメーションをつけたいときはAnimatorから行う」</b>ことを注意してください！


# 結果
かなり精度良かったですね！
・銅像などの装飾
・観光スポットのガイド
などに使えそうです！
ただしアニメーションをつけたいときはAnimatorから行うことに注意してください！

# 告知
ご覧いただきありがとうございました！
<font color="red"><b>普段、IT企業で働いてます「プログラマー芸人」ジンバです！</b><font color="black">
YouTubeもご覧くださいー！↓

https://youtu.be/4sfvz4kov84

![初テレビ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3574599/dbffa7f4-70ac-e1ef-4f7f-1ab18a6c9d04.png)