見出し画像

Niantic Lightship ARDK のメッシュ機能を使用する

Niantic社が提供しているスマホ用のARアプリケーション開発キット、Lightship ARDKを使用し、メッシュ生成を行う方法について説明します。(上記のようなアプリを開発します。)

Niantic Lightship ARDKとは?

『 Ingress 』、『 Pokémon GO 』、『Pikmin Bloom』などでも使用しているNiantic社が提供するARアプリケーション開発キットになります。マルチプレイヤー、深度、物理、オクルージョン、セマンティックセグメンテーションなどの機能が提供されています。

開発環境と動作確認したデバイス

Unity Editor 2019.4 を使用してます。

今回、テストで使用したデバイスはiPhone 12 Proになります。

1. Niantic Lightship ARDK ダウンロード

以下から入手してください。今回、使用しているバージョンはv1.1.0になります。入手する際、Niantic Lightshipのアカウント登録が必要です。

2. Niantic Lightship ARDK インポート

UnityEditor のメニューにあるAssets → Import Package → Custom Package...を選び、ダウンロードした ardk-1.1.0.unitypackage をインポートします。

3. 新規でSceneを作成とMain Cameraの削除

新規でSceneを作成後、Main Cameraを削除します。

4. ARSceneManagerをヒエラルキーに追加

画像1

5. ARMeshをヒエラルキーに追加

スクリーンショット 2022-02-15 18.27.13

Project上でARMeshを見つけヒエラルキーにドラッグ&ドロップします。

6. Mesh Prefabの変更

スクリーンショット 2022-02-15 18.54.02

ARMesh にあるARMeshManager の Mesh Prefab を MeshColliderChunk に変更します。

7. Cube Prefabの作成

スクリーンショット 2022-02-15 18.59.50

Cubeを作成します。スケールは全て0.1に変更を行い。Rigidbodyを追加します。作成したCubeをPrefabにします。

8. Cube スクリプトの作成

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Cube : MonoBehaviour
{
   // Start is called before the first frame update
   void Start()
   {
   }

   // Update is called once per frame
   void Update()
   {
       
   }

   public void Shoot(Vector3 dir)
   {
       GetComponent<Rigidbody>().AddForce(dir);
       Destroy(gameObject, 10.0f);
   }
}

上記のスクリプトをPrefab化したCubeに追加します。

9. Playerの作成

スクリーンショット 2022-02-15 19.03.50

ARSceneCamera配下にGameObjectを作成。名前をPlayerに変更。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Niantic.ARDK.Utilities;

public class Player : MonoBehaviour
{
   [SerializeField]
   private GameObject Cube;

   [SerializeField]
   private float force = 200f;

   // Start is called before the first frame update
   void Start()
   {
       
   }

   // Update is called once per frame
   void Update()
   {   
       if (Input.touchCount > 0)
       {
           var touch = PlatformAgnosticInput.GetTouch(0);
           if (touch.phase == TouchPhase.Began)
           {
               GameObject obj =
                   Instantiate(Cube, transform.position, transform.rotation) as GameObject;
               obj.GetComponent<Cube>().Shoot(obj.transform.forward * force);
           }
       }
   }
}

上記のスクリプトをPlayerに追加。

スクリーンショット 2022-02-15 19.08.41

CubeにPrefabにしたCubeを設定します。

10. ビルド&実行

画像7

起動すると周辺のメッシュが生成されます。タップするとCubeが発射されます。Cubeとメッシュとの衝突判定も確認できます。

参考

最後に

Niantic Lightship ARDK のブログ記事

この記事以外にNiantic Lightship ARDKのブログ記事を投稿しています。

OnePlanet XR

OnePlanet XR はAR/MR技術に専門特化したコンサルティングサービスです。豊富な実績を元に、AR/MR技術を活用した新たな事業の立ち上げ支援や、社内業務のデジタル化/DX推進など、貴社の必要とするイノベーションを実現いたします。

ご相談から受け付けております。ご興味ございましたら弊社までお問い合わせください。

OnePlanet Tech Magazine

様々な技術記事を定期的に投稿しています。