本日は昨日に引き続きAzure RemoteRenderingを勉強していきます。
昨日はAzure RemoteRenderingの遷移状態に関して学びました。
Azure RemoteRenderingではコストが高いため、いくつかの状態遷移を行いながらユーザー自身にセッションへのアクセスを決めさせる必要があります。
この状態遷移は [NotSet]→[NotInitialized(初期化されていない)]→[NotAuthorized(非承認)]→[NoSession(セッション無し)]→[ConnectingToExistingRemoteSession(既存のリモートセッションへの接続)]→[ ConnectingToNewRemoteSession(新しいリモートセッションへの接続)]→[RemoteSessionReady(リモートセッションの準備)]→[ConnectingToRuntime(ランタイムへの接続)]→[RuntimeConnected(ランタイム接続)]の順で進行しリモートレンダリングに接続します。
昨日は[NotAuthorized(非承認)]までの進行を見ました。
今回は第二段階としてセッションへの接続を行います。
〇
ステートマシーン(状態遷移)では[NotAuthorized(非承認)]の後、ConnectingToNewRemoteSessionもしくはConnectingToExistingRemoteSessionのいずれかの状態へ遷移します。
これは既存のセッションへ接続するか、新規でセッションを開始するかということになります。
この状態に移るとOnSessionStatusChangedイベントが発火されます。

これにより状態がRemoteSessionReady(リモートセッションへの準備)へと移行します。
①セッションへ接続するためにJoinRemoteSession、StopRemoteSessionの中身を書き加えます。
/// <summary>
/// 現在のセッションへ参加を行うもしくは新しいセッションを開始
/// </summary>
public async void JoinRemoteSession()
{
//すでにセッションがある場合はそれを使用、ない場合は新たなセッションの作成
RenderingSessionProperties joinResult;
if (await IsSessionAvailable(LastUsedSessionID))
{
CurrentCoordinatorState = RemoteRenderingState.ConnectingToExistingRemoteSession;
joinResult = await ARRSessionService.OpenSession(LastUsedSessionID);
}
else
{
CurrentCoordinatorState = RemoteRenderingState.ConnectingToNewRemoteSession;
joinResult = await ARRSessionService.StartSession(new RenderingSessionCreationOptions(renderingSessionVmSize, (int)maxLeaseHours, (int)maxLeaseMinutes));
}
if (joinResult.Status == RenderingSessionStatus.Ready || joinResult.Status == RenderingSessionStatus.Starting)
{
LastUsedSessionID = joinResult.Id;
}
else
{
//The session should be ready or starting, if it's not, something went wrong
await ARRSessionService.StopSession();
if(LastUsedSessionID == SessionIDOverride)
SessionIDOverride = "";
CurrentCoordinatorState = RemoteRenderingState.NoSession;
}
}
public void StopRemoteSession()
{
if (ARRSessionService.CurrentActiveSession != null)
{
ARRSessionService.CurrentActiveSession.StopAsync();
}
}
StopRemoteSessionはAzure RemoteRenderingのセッションを終了する際に使用します。
この状態でシーンを実行することでセッションへの遷移が行われ、Unityのシーンを停止することでConnectingToNewRemoteSessionへ遷移することを確認できました。

本日は以上です。