NextSnowballFight:マルチプレイヤーARDK機能の使用法を実演し、同じ場所で行われるネットワークマルチプレイヤーセッションを実行します。ここでは最大4人のプレイヤーを同一の座標空間にローカライズし、一緒にプレイします。概要プレイヤーはまず、新しいマルチプレイヤーセッションをホストするか、またはホストの提供するセッションコードを使って既存のマルチプレイヤーに参加するかを選択します。セッションとの接続が完了すると、プレイヤーはビジュアルランドマークのスキャンを行って使用デバイスの位置をローカライズするよう促されます。name”および接続状態を記載したプレイヤーリストが表示されます。すべてのプレイヤーの準備が整ったらホストがマッチを開始します。画面上部に45秒のゲームタイマーとプレイヤーの累積スコアが表示されます。スコアは敵ホタルに雪玉を当てるたびに100点加算されます。制限時間が終了すると、各プレーヤーにスコア一覧が表示され、勝者を確認できます。仮想オブジェクトのオクルージョンに用いる深度オクルージョン効果を提供します。ARDKネットワークセッションの管理に用いるヘルパー利便性機能。デモのデバッグ機能を管理ステートMiscステートStateHostOrJoinホストするのか既存のSnowballFightセッションに参加するのかをプレイヤーにたずねるGUIを提示しますStateWarningUIがARの使用に関する警告を表示しています。アプリの実行につき1回だけ、ユーザーが初めてARSessionに入る前に表示されます。セッションをホスト中のプレイヤー専用StateHostInstructionsマルチプレイヤーSnowballFightマッチをホストする方法について説明を表示します。このステートでホストがStartボタンを押すとステートが終了し、ARNetworkingHelper.InitAndHostへの呼び出しを用いてARNetworkingManagerが有効化されます。このメソッドはランダムなセッションコードを生成し、ARNetworkingManagerを有効化します。ARNetworkingManagerはUnityのライフサイクルを使用して管理され、セットワークセッションおよびARセッションの作成を制御します。StateConnectingへ移行します。作成されたセッションコードをホストに見せます。他に接続プレイヤーがいない状態でホストがセッションを開始しようとすると、シングルプレイヤーセッションを作成することになると警告します。既存セッションに参加するプレイヤー専用StateJoinSessionセッションコードを入力して既存セッションに参加できるよう、プレイヤーにテキスト入力欄を提示します。Gameボタンを押すとステートが終了し、ARNetworkingHelper.InitAndJoinへの呼び出しを用いてARNetworkingManagerが有効化されます。ARNetworkingManagerはUnityのライフサイクルを使用して管理されるため、これによってネットワークセッションおよびARセッションが作成されます。StateConnectingへ移行します。既存のSnowballFightセッションに参加およびローカライズする方法の説明を表示します。ゲーム前ステートStateConnectingプレイヤーのデバイスがネットワークセッションに接続する間、UIグラフィックを表示します。プレイヤーが接続に失敗するとアプリケーションがタイムアウトエラーを表示し、シーンをリスタートさせて再試行できるようにします。プレイヤーがセッションに接続するには、ホストから参加の承認を得る必要があります。ホストピアの承認はARNetworkingHelper.OnPeerAdded()のホストが送信するピア・ツー・ピアメッセージによって処理されます。これによりホストは、4人のプレイヤーのみがマッチに参加するようにできます。セッションへの参加を選択したプレイヤーが誤ったコードを入力した場合、そのプレイヤーは自分のセッションのホストになります。この状態が検知されると、そのプレイヤーには「無効なコード」エラーが表示され、シーンをリスタートさせて再試行できるようになります。GameObjectをネットワークスポーンし、これがセッションのネットワークステートを管理します。ホストはこのプレイヤーに名前をアサインし、この名前はプレイヤーデータに保存されます。StateLocalizingこのステートは各デバイスを共有座標システムへとローカライズするプロセスを実行し、アニメーション付きの説明が入ります。プレイヤーがホストの場合、セッションをローカライズするためのビジュアルランドマーク(共有の物理アンカー)を探します。参加者の場合、ホストがローカライズに使用したのと同じビジュアルランドマークと視点を用いて捜索とローカライズを行わなければなりません。ローカライズプロセスの間、ARFeaturePointヘルパーを用いて特徴点の粒子が表示されます。これには特徴の大きなエリアにプレイヤーを導いてローカライズを補助する意味があります。「ローカライズ成功」の短いメッセージを表示するUIStateWaitingStateSessionCreatedまたはStateLocalizationCompleteの後で、ホストと参加者の両方がこのステートを使用します。現在のプレイヤー(ホストおよび参加者)のダイナミックリストを含むGUIを表示します。各プレイヤーの隣には、ローカライズが完了してゲームを開始できる常態になっているかどうかのインジケーターがあります。プレイヤーがホストで、さらにプレイヤーリストの唯一のプレイヤーである場合、次のステートはStateSoloConfirmになります。それ以外の場合はStateCountdownになります。StateCountdownマッチ開始前にアニメーション付きの3秒間のカウントダウンを表示します。SnowballFightを含む複数のシーンで使用されています。ゲームステートStateFightSnowballFightの主要ゲームステート。プレイヤーが敵ホタルや他のプレイヤーに雪玉を投げます。このステートは敵のスポーンロジックを開始させます。プレイヤーの現在地および判明しているARPlanesに基づき、適切な敵のスポーン地点を選択および提案するメソッドが各PlayerBehaviourによって定期的に実行されます。この値はそのプレイヤーのPlayerDataのローカルインスタンスに設定され、セッション全体で共有されます。ホストは提案されたスポーン地点を使用し、EnemyManagerを用いて敵を配置します。このステートはプレイヤーのNetworkedSnowballMakerも起動し、3Dの雪玉を保持/投げるためのUIボタンを表示させます。雪玉はネットワークスポーンを使用して作成されるため、すべてのピア間で共有されます。あるローカルプレイヤーが雪玉を投げると、SnowballBehaviourから送られたメッセージを用いてSnowballBehaviorが投擲データのシリアライズと送信を行い、SnowballBehaviour.OnTossDataValueChanged()を用いて各プレイヤーのデバイス上で雪玉のすべての物理演算をローカルに実行できるようにします。敵の衝突検知ロジックはローカルに処理されます。敵の被弾を検知したインスタンスは、そのEnemyBehaviourのisAliveメンバーをfalseに設定します。この値の変化はすべてのピアに伝えられ、それぞれが敵の撃退演出をローカルに実行できるようにします。ローカルプレイヤーが敵に攻撃を当てると、PlayerBehaviour.OnSnowballHitEnemy()を用いて自分のスコアを増加させます。プレイヤーのスコアはネットワーク化され、すべてのプレイヤーがデータにアクセスできるようになります。ステートはgameTimeAndScoreGUIのタイマーが切れるまで待機します。StateGameOverUIに降順のプレイヤースコア一覧、リスタートの選択肢、またはマップへ戻る選択肢が表示されます。リスタートする場合、アプリケーションはStateWaitingに戻り、既存のARNetworkingセッションを使い続けます。エディター専用のモックサポートARDKアプリケーションをエディターで開発する際、デバイスへのビルドが常に求められることを避けるため、Unityエディター内で機能するARアセットのモックバージョンを使用すると便利です。GameObjectにアタッチされます。このオブジェクトにはMockSceneConfigurationコンポーネントがあり、Unityエディター外ではこれによってそのオブジェクトは破壊されます。VirtualStudioインテグレーション。Unityエディターでの実行時、ローカルプレイヤーは必ずセッションのホストになります。接続するモックセッションをリッスンし、ARVoyageMockPlayConfigurationで指定されたとおりにモックピアを作成するARMockPeerHelper。各ARMockPeerはPlayerBehaviourのスポーンを処理し、キーボードコマンドをリッスンして他のプレイヤーがいるマルチプレイヤーマッチの簡単なシミュレーションを実行します。