モックモードでのプレイ
モック モードを使い、モバイルデバイスなしでテストを行う。
概要
モック モードでは、すべてのARおよびネットワーク機能がUnityエディター内にモックとして再現されるため、モバイルデバイスへのビルド作業が一切不要になります(それでも、実際のARデータを使用したアプリの動作確認のために、デバイスへのビルドや リモートモード の使用は定期的に必要になります)。
次の動画では、Unity上でVirtual Studioとモックモードを開始する方法をご確認いただけます:
注釈
動画で使用しているモッキングシステムはARDK 1.3で更新されています。モックモードの変更点の詳細については、その他の モックモードの動画 を参照してください。
モックAR環境
モックの ARSession はライブデバイスやリモート ARSession
と全く同じコードで構成、使用されます。よってこれらの機能を使うために新たなコードや別のコードを書く必要はありません。
モック環境の使用
Unityメニューから、** Lightship ** > ** ARDK ** > ** Virtual Studio ** ウィンドウを開き、Mockオプションを選択します。
ドロップダウンから Mock environment(モック環境) を選択します。Lightshipポータル から既製の環境プレハブをダウンロードできますが、自分でモック環境を作成することもできます(以下の「モック環境の作成」セクションを参照してください)。
プレイモードに入ると、環境はシーンに自動的にスポーンされます。モック環境を正しくレンダリングするには、
ARDK_MockWorld
と呼ばれるレイヤーが必要ですが、存在しない場合はプロジェクトに追加されます。
カメラの操作
移動と外観の速度は、Unityツールバーの Lightship > ARDK > Virtual Studio ウィンドウで構成できます。
モック環境の作成
新しいプレハブを作成し、
MockSceneConfiguration
コンポーネントをルートGameObjectに追加します。プレハブに3Dモデルを追加し、環境を作成します。
以下のステップに従って、ご使用の環境にAR情報を追加します。
Virtual StudioウィンドウのMock Scene(モックシーン)ドロップダウンの横にある更新ボタンを押すと、新しいプレハブを選択して使用できるようになります。
モック上の平面検知
プレハブ内のGameObjectに
MockPlaneAnchor
コンポーネントを追加します。コンポーネントの Center プロパティや Rotation プロパティを使用して、平面としてマークしている面にアンカー(Gizmoで確認できます)を配置します。
Set the Time to Discovery value to be the number of seconds it should take for the anchor to be detected, counting from after
IARSession.Run
is called.シーン内のすべての平面について、手順1と2を繰り返します。
例は、LivingRoomプレハブの Walls > Wall_Back または Furniture > PlaneAnchor オブジェクトを参照してください。
モック上の画像認識
プレハブに 空の GameObject を作成します。
作成したGameObjectに
MockImageAnchor
コンポーネントを追加します。画像を プロジェクト ビューウィンドウにドラッグして、Unityプロジェクトにインポートします。
コンポーネントの
Image
プロパティをインポートした画像に設定します。1. 画像が歪んで見える場合は、 テクスチャのインポート設定 <https://docs.unity3d.com/Manual/class-TextureImporter.html#advanced> の詳細セクションに移動し、Non-Power(2) の値をNone
に変更します。Apply(適用) をクリックし、新しい設定で画像を再インポートします。次に、プレハブのMockImageAnchor
コンポーネントを右クリックし、Update Display(表示を更新) オプションを選択します。2. この手順を行っても画像が歪んで見える場合は、MockImageAnchor
コンポーネントを右クリックして、Reset(リセット) オプションを選択し、Image
プロパティを再度設定します。Time to Discovery
の値を、アンカーが検知されるまでの秒数に設定します(IARSession.Run
の呼び出し後からカウント)。Name
の値を、アプリケーションのコードでARReferenceImage
を作成する際に使用した名前と同一名に設定します。
参考例: LivingRoomプレハブの Wall
> Wall_Back
CrowdImage
> オブジェクト。
モック上のセマンティック セグメンテーション
MeshRenderer
コンポーネントを含むGameObjectがある場合は、MockSemanticLabel
コンポーネントを追加します。コンポーネントの チャンネル 値を、そのGameObjectのメッシュが解釈されるセマンティックチャンネルに設定します。
セマンティックを追加するシーン内のすべてのメッシュに対して、手順1と2を繰り返します。
例については、ParkPondプレハブの Sky または Trees > Tree > Branches オブジェクトを参照してください。
ARのその他の機能
深度 : 深度対応のARセッションが実行されている場合は、モック環境に深度バッファが自動的に表示されます。
メッシング : 既製のメッシュファイルを読み込むには、
MockMesh
またはMockMeshSequence
を使用して、代わりのメッシュをシーンに追加します。メッシュファイルを生成するには、モバイルデバイスと、ARDK使用例のMeshSaverシーンを使用します。詳細については、 中級チュートリアル: Unityエディターのメッシュ を参照してください。 * モック環境のエディター内メッシュ(Unityのメッシュオブジェクトに合わせたARメッシュ)は、現在サポートされていません。
モックマルチプレイヤー
モックARと同様、モックネットワークの使用に際して追加のコードは必要ありません。一方で、ローカルプレイヤーと(複数の)モックプレイヤーのインタラクションをシミュレートするための追加のAPIも存在します。モックプレイヤーとその ARSession
、MultipeerNetworking、ARNetworkingインスタンスは、スクリプトまたはVirtual Studioのエディターウィンドウで作成、制御を行えます。
モックプレイヤーの設定
モックプレイヤーを作成するにはまず、 MockPlayConfiguration を作成します。これは各モックプレイヤーのプロパティを定義する ScriptableObject
です。
Unityエディターの**Project** ウィンドウで右クリックをしてコンテクストメニューを開き、Create> ARDK> MockPlayConfiguration と選択します。
Profile
配列のサイズを、プレイスルーで使用したい最大モックプレイヤー数に設定します。プレイヤーのプロパティを定義します:
Name
:Is Active
: プレイヤーを初期化すべき場合はtrue。アクティブでないプレイヤーはアプリケーションに影響を与えません。Using Network
: プレイヤーがIMultipeerNetworking
インスタンスを初期化すべき場合はtrueを設定Using AR
: プレイヤーがIARSession
インスタンスを初期化すべき場合はtrueを設定Using AR Networking
: プレイヤーがIARNetworking
インスタンスを初期化すべき場合はtrueを設定このプロパティをtrueに設定した場合、
Using Network
とUsing AR
もtrueでなければなりません。
モックプレイヤーが初期化した際にシーンにスポーンするプレハブを任意で追加します。これによってそのプレイヤーのARポーズを制御できます。
モックプレイヤーの初期化
スクリプトを一切使わないモックマルチプレイヤー体験を制御するには、Unityのツールバーの Lightship > ARDK> Virtual Studio ウィンドウを開きます。
ウィンドウを有効化するボックスにチェックを入れます(無効化すると、ゲームプレイに影響を与え得るウィンドウからのコードが一切実行されなくなります)。
併せて**ARDK**> Remote Connector ウィンドウの**Use Remote** ボックスも無効化されていることを確認してください。
使用する
MockPlayConfiguration
アセットを選択します。Check the **Use detected MultipeerNetworking session metadata ボックスにチェックを入れ、ローカルプレイヤーが使用したセッションメタデータでモックプレイヤーがネットワークセッションに接続されるようにします。
この機能を使うには、モックプレイヤーが有効化される 前に ローカルプレイヤーのネットワークが接続されなければなりません。
これを行わない場合、モックプレイヤーが使用すべきネットワークセッションメタデータを入力してください。それと同じセッションメタデータがローカルプレイヤーの接続に使用されるようになります。
Connect and Run All ボタンをクリックして作成し、すべての
ARSession
を実行し、選択されたMockPlayConfiguration
の定義に従い、モックプレイヤーが所有するすべてのMultipeerNetworking
セッションを接続します。このボタンはUnityエディターがプレイモードの時にしか使えません。
モックプレイヤーのスクリプト
スクリプトを行うことでモックプレイヤーをより精密に制御し、マルチプレイヤーのより複雑な状況のシミュレートとテストが行えます。
すべてのアクティブな MockPlayer
インスタンスを取得する方法:
using Niantic.ARDK.VirtualStudio; private MockPlayConfiguration _playConfiguration; public void AccessAllPlayers() { foreach (var profile in _playConfiguration.ActiveProfiles) { var player = profile.GetPlayer(); // do something with player } }
ここから MockPlayer APIを使用してモックプレイヤーのARDKオブジェクトにアクセスし、ローカルプレイヤーの場合と同様に制御できます。
たとえば下記に抜粋したコードでは、ネットワークセッションに複数の新プレイヤーが参加した際のアプリケーションの反応をテストできます。
using System.Collections; private IEnumerator ConnectWithDelay(MockPlayConfiguration playConfiguration, byte[] sessionMetadata) { foreach (var profile in playConfiguration.ActiveProfiles) { if (profile.UsingNetwork) { yield return new WaitForSeconds(2f); var player = profile.GetPlayer(); Debug.LogFormat("{0} is connecting.", player); player.Networking.Join(sessionMetadata); } } }
これらのAPIの他の使用例については、 ExampleMockPlaythrough
シーンにある Assets/ARDKExamples/VirtualStudio
内のARDK使用例プロジェクトをご参照ください。 ExamplePlayController.cs
スクリプトを使用した例をご覧いただけます。
モック上のローカライゼーション
デバイス上のARNetworkingセッションでは、共有セッション内のプレイヤーはARマップを見つけるために環境をスキャンしてローカライズを行います。モックセッションでのローカライゼーションには、いくつかの起動方法があります:
モック上のマップの検知
MockMapコンポーネントを
GameObject
に付けてください。マップの位置がGameObject
のものに合わせられます。TimeToDiscovery
の値を、マップが見つかるまでの秒数に設定します(IARSession.Run
の呼び出し後からカウント)。マップはローカルプレイヤーによってのみ検知されます。他のモックプレイヤーのピア状態を変更するには、下記の他の選択肢を使用してください。
スクリプトされたピア状態の変更
MockPlayer.SetPeerState(state) メソッドを使用して、ARNetworkingセッションに接続しているすべてのプレイヤーのPeerStateを変更できます。
Virtual Studioエディターウィンドウ>モック
プレイヤーがARNetworkingセッションに接続されると、ピア状態の変更に使用できるドロップダウンボックスが表示されます。