本文へスキップ
バージョン: 3.6

APIを使用してメッシュをダウンロードする方法

メッシュダウンロードAPIを使用すると、実行時に任意のパブリックロケーションのメッシュをダウンロードして作成できます。 そのオプションのパラメーターは、このHow-Toで説明するいくつかの動作方法をカスタマイズする方法を提供する。

前提条件

ARDKをインストールしたUnityプロジェクトと、Location ARを使用したARシーンが必要です。 詳細については、ARDK 3のインストールおよびロケーションARを使用して現実世界の場所にコンテンツを配置する方法を参照してください。 このハウツーでは、プロジェクトに ARLocation が必要です。

ユニティで準備を整える

Mesh Downloading APIを使用する前に、Location Mesh Manager Componentとメッシュをダウンロードするスクリプトを追加する必要があります。

ロケーション・メッシュ・マネージャー**とメッシュ・ダウンロード・スクリプトを作成する:

  1. マネージャとスクリプトを保持するために GameObjects を追加する:

    1. Hierarchy**で、ARシーンを右クリックし、Create Emptyを選択して、新しいGameObjectLocationMeshManagerという名前を付けます。 このステップを繰り返しますが、2つ目のオブジェクトの名前を MeshDownloadHowTo とします。
  2. LocationMeshManager`を選択し、InspectorAdd Componentをクリックし、Location Mesh Managerを追加します。

    Adding a Location Mesh Manager
  3. MeshDownloadHowToを選択し、**Inspector**で、**Add Component**をクリックし、**New Script**を追加します。 MeshDownloadHowToと名付ける。

    Adding the Mesh Download How To script

ARロケーション・ペイロードを使用したメッシュのダウンロード

Location Mesh Managerの準備ができたら、APIを使ってメッシュをダウンロードし、実行時に位置を設定することができます。 この例では、ARLocation ペイロードを使用して、メッシュをその場所の現実世界の上に配置します。 これにより、メッシュが設定された GameObject が生成され、他のオブジェクトと同じように使用したり変更したりすることができます。 例えば、ユーザーがボタンを押したときにメッシュをダウンロードして表示させたり、衝突検出のために他の関数に渡したりすることができます。

まず、MeshDownloadHowTo.cs を開き、以下のコードを追加する:

クリックするとメッシュダウンロード機能が表示されます
using System.Threading.Tasks;

using Niantic.Lightship.AR.LocationAR;
using Niantic.Lightship.AR.PersistentAnchors;
using Niantic.Lightship.AR.Subsystems;

using UnityEngine;

public class MeshDownloadHowTo : MonoBehaviour
{
[SerializeField]
private LocationMeshManager _meshManager;

[SerializeField]
private ARLocationManager _arLocationManager;

private GameObject _downloadedMesh;
private bool _startedDownload;

private void Start()
{
_arLocationManager.locationTrackingStateChanged += OnLocationTrackingStateChanged;
}

private void OnLocationTrackingStateChanged(ARLocationTrackedEventArgs args)
{
if (args.Tracking && !_startedDownload)
{
_startedDownload = true;
_ = DownloadAndPositionMeshAsync(location: args.ARLocation);
}
}

private async Task DownloadAndPositionMeshAsync(ARLocation location)
{
var payload = location.Payload;

// メインスレッドをブロックしないように、メッシュのダウンロードを非同期で待つ
var go = await _meshManager.GetLocationMeshForPayloadAsync(payload.ToBase64());

// ARLocationの位置の子としてメッシュを設定し、シーンに配置する
go.transform.SetParent(location.transform, false);
_downloadedMesh = go;
}

private void OnDestroy()
{
if (_downloadedMesh)
{
Destroy(_downloadedMesh);
}
}
}
備考

ARLocationManagerARLocation を追跡するように設定されているシーンに、このスクリプトを追加します。 ARLocationManager が初めて ARLocation のトラッキングに成功すると、メッシュのダウンロードが始まります。 これはGeospatial Browserを通してダウンロードされたARLocationsにはすぐに役立つものではありません。 メッシュのダウンロードは、実行時にARLocationsのメッシュをダウンロードしたり、VPS Coverage APIを通じて発見されたメッシュをダウンロードするのに便利です。

ランタイムでメッシュを調整する

メッシュがダウンロードされたら、APIオプションを使用してメッシュを調整できます。 この例では、APIを使ってテクスチャメッシュを取得し、その透明度を明るくします。 ARLocation`ペイロードを使って配置することで、実行時に既存のパブリックロケーションの透過メッシュオーバーレイを作成することができます。

スクリプトを更新する前に、透明度をサポートするマテリアルを作成し、それを LocationMeshManager に追加します:

  1. ProjectウィンドウのAssetsディレクトリを右クリックし、Createメニューを開いてMaterial**を選択します。 新しい素材の名前を trans_light とする。

  2. trans_light`を選択し、InspectorRendering ModeTransparentに設定します。

    Making the light transparent material
  3. Hierarchy** で LocationMeshManager を選択し、Standard Material フィールドに trans_light を追加します。

    Adding the light transparent material

MeshDownloadHowTo.csを開き、DownloadAndPositionMeshAsync関数を以下のコードで更新します:

クリックすると更新されたメッシュダウンロード機能が表示されます
private async Task DownloadAndPositionMeshAsync(ARLocation location)
{
var payload = location.Payload;
// メッシュダウンロードにテクスチャオプションを使用する
var go = await _meshManager.GetLocationMeshForPayloadAsync(payload.ToBase64(), meshFormat.TEXTURED; // メッシュレンダリングを取得する:MeshDownloadRequestResponse.MeshAlgorithm.TEXTURED);
go.transform.SetParent(location.transform, false);

// メッシュレンダラを取得し、マテリアルの透明度を 0.5 に設定する
foreach (var meshRenderer in go.GetComponentsInChildren<MeshRenderer>())
{
var mat = meshRenderer.material;
if (mat != null)
{
var color = mat.color;
color.a = 0.5f;
meshRenderer.material.color = color;
}
}
_downloadedMesh = go;
}

詳細情報

  • 一般的な情報については、メッシュダウンロード機能ページを参照してください。
  • 詳細およびその他のオプションパラメータについては、Mesh Download API Referenceを参照してください。
  • Mesh Downloadingが実際に使用されている様子をご覧になるには、VPS Coverage APIサンプルをお試しください。