本日は昨日に引き続き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へ遷移することを確認できました。
本日は以上です。