Virtual Studio

ARDKによる開発体験をVirtual Studioで向上させる。

概要

Virtual Studioは、ARおよびネットワーク機能の実行に2つのメソッドを追加し、UnityにおけるARDKの使用体験を向上させます。どちらのメソッドも、アプリケーションのコード変更をテストする際の反復ループを一部取り除き、アプリのビルドとデバイスへのデプロイの時間を節約しながら開発を進められます。

  • リモート 機能では、Unityエディターのプレイモードだけでコードを実行でき、デバイスへの再デプロイなしでコードの反復が行えます。ARDKはこの際、 リモートデバッガーアプリ のインスタンスと通信してARDKコードをモバイルデバイス上で実行し、関係するデータをUnityに送り返します。

注釈

インターネット経由のリモートモード(USB経由のリモートモードではありません)は、ARDKリリース2.1時点で廃止されています。

  • モック 機能では、すべてのARおよびネットワーク機能がUnityエディター内にモックとして再現され、モバイルデバイスを使う必要がなくなります。シミュレートされた環境とモックマルチプレイヤーセットアップを使用することで、様々なARおよびネットワーク状況でコードのテストが可能です。

../../_images/iteration_loop.png

Virtual Studioを使用するためのコードの準備

ARDKの各コアインターフェース( IARSession 、IMultipeerNetworking、IARNetworking)は、プラットフォームの状態に応じ、ライブデバイスから実行するためのそれぞれのファクトリーを通じて、またはリモート、あるいはランタイムのモックを使って構築することが可能です。

using Niantic.ARDK.AR.Configuration;

// Example code to construct and run an AR session that can be run
// through Virtual Studio. There's no difference from creating one that
// runs on a mobile device — it's the same code.
void CreateAndRunARSession()
{
  var arSession = ARSessionFactory.Create();
  arSession.Run(ARWorldTrackingConfigurationFactory.Create());
}

各ファクトリーの Create メソッドは、最初の有用なランタイム環境オプションからそれぞれのオブジェクトを生成します。オプションがない場合、デフォルトで以下が試みられます:

  1. ライブデバイス - モバイルプラットフォーム(AndroidまたはiOS)に呼び出された場合、成功します。

  2. リモート - リモート接続ウィンドウの**Use Remote** のチェックボックスにチェックが入っている場合、成功します。

  3. モック - Unityエディターに呼び出された場合、成功します。

プラットフォーム - アグノスティック入力

ARDKではUnityのマウスとタッチ入力APIを統合するPlatformAgnosticInputと呼ばれるクロスプラットフォームクラスを利用できます。Unity内でのマウスの左(またはメイン)クリックは、モバイルデバイス上のタッチ入力と同じように認識されます。このクラスを使用すると、携帯電話やUnityエディター上でもアプリケーションのプレイが可能となります。

ヒットテスト

プレーンに対するヒットテストは、デバイス上でもバーチャルスタジオでも同じように実行できます(やり方は ヒットテストのページ を参照)。ですが、 ARHitTestResultType.ExistingPlaneUsingExtent を除くすべてのARHitTestResultTypeの値は、Virtual Studioのモックでもリモートモードでもサポートされていません。

Unityエディターにおけるライブデバイスネットワーク

ARスタックとは異なり、ARDKのネットワークスタックはMacOSプラットフォームでネイティブに動作可能です。そのためUnityエディターで使用でき、AndroidやiOSデバイス上と同じように機能します。

このネットワークスタックはWindowsプラットフォームでは使用できません。モックまたはリモートランタイム環境を使用したMultipeerNetworkingインスタンスのみが作成可能です。

using Niantic.ARDK;
using Niantic.ARDK.Networking;
using System.Text;

public bool _useLiveDeviceInEditor;

void CreateAndJoinNetworking()
{
  IMultipeerNetworking networking;

  if (_useLiveDeviceInEditor)
    networking = MultipeerNetworkingFactory.Create(RuntimeEnvironment.LiveDevice);
  else
    networking = MultipeerNetworkingFactory.Create(RuntimeEnvironment.Default);

  var sessionMetadata = Encoding.UTF8.GetBytes("ExampleSessionName");
  networking.Join(sessionMetadata);
}

ただし、異なるランタイム環境用に作られた複数のオブジェクトを同時に存在させることはできません。つまり、アプリケーションの同一インスタンス内で作られたARSession、MultipeerNetworking、ARNetworkingオブジェクトはすべて、同じ RuntimeEnvironment 用である必要があります。

次をご覧ください