Application Loop
概要
Fusion Application Loop ではシーンの読み込みや接続の設定・切断、基本的なマッチメイキング機能など、Fusionで適切に動作するように、ゲームの外部ループをどのように構成するかを示しています。
具体的には、ゲームモードやマップ名などのモック属性を持つセッションを作成したり、参加したりすることができます。参加するユーザーにはセッションのリストを表示し、ゲームシーンを読み込む前にアバターを設定することができます。また、この例では、クライアントとホストの両方がセッションを終了し、イントロに戻ることを処理します。
始める前に
サンプルを実行するには、まず、PhotonEngine Dashboard で Fusion AppId を作成し、リアルタイム設定(Fusion メニューからアクセス可能)の App Id Fusion
欄に貼り付けます。次に、Launch
シーンを読み込んで、Play
を押します。
ダウンロード
バージョン | リリース日 | ダウンロード | ||
---|---|---|---|---|
1.1.6 | Apr 17, 2023 | Fusion Application Loop 1.1.6 Build 184 |
プレハブ
- App.prefab:メインのAppランチャーです。シングルトンであり、任意のシーンにドロップして、そのシーンからアプリケーションを起動できます(エディターで実行するときに便利です)。エディターから実行する場合、マッチメイキングプロセス全体をスキップするために、いくつかのプリセット値で自動的にセッションを作成する機能があります。
- Character.prefab:プレイヤーアバター。このプレハブのインスタンスは、各プレイヤーがマップに入るときに1つずつ生成されます。キャラクターは、マップがアンロードされるまでの間だけ生きています。
- Player.prefab:プレイヤーセッションのプロパティ。セッション開始時に各プレイヤーごとにこのプレハブのインスタンスが生成されます。プレイヤーはシーンのロード中も生存し、セッションが切断されるまで生存します。
- Session.prefab:セッションの共有プロパティです。セッション開始時に、このプレハブのインスタンスが1つ生成されます。
## シーン
0.Launch
- 起動シーンはビルド時にのみ使用され、App
シングルトンインスタンスのみを保持します。アプリのデバッグ(自動接続)設定で誤ってビルドしてしまわないように、ビルド用にこのインスタンスを設定します。1.Intro
- イントロシーンは、接続が確立される前のプレゲームUIを含んでいます。ここでは、トポロジー/クライアントモードとゲームタイプを選択します。また、参加するセッションを選択したり、新しいセッションを作成するためのUIも含まれています。接続が切れたり、シャットダウンした場合にアプリが戻るのもここです。2.Staging
- ネットワークセッションが確立されるとステージングシーンが読み込まれ、プレイヤーは自分のアバターを設定し、ホストに対してプレイする準備ができたことを通知することができます。アプリはプレイヤーがアバターを設定し、プレイする準備ができたことを示す必要があるときはいつでもここに戻ってくることができます。X.MapY
- これらのシーンは実際のゲームマップです。各ゲームマップはステージングエリアからのプレイヤーの設定に基づいてプレイヤーのアバターをインスタンス化し、読み込みが完了したらホストに知らせます。これにより、読み込みが遅いクライアントがあっても、すべてのクライアントで同時にゲームが開始されます。ホストは次のゲームシーンに移ることができ、すべてのクライアントは自由に切断することができます。GameOver
- GameOverシーンは基本的にプレイヤーにアバターがつかないただのマップです。マッチの結果を表示したり、プレイヤーをステージングエリアに戻すために使用することができます。
挙動
GameUI
、UIComponents
、Utility
フォルダーにあるコードは、このサンプルに特化したものではないので、ここでは説明しません。
App
このサンプルの主要なエントリポイントです。ゲームセッションを作成、破棄するためのメソッドと、アクティブなプレイヤーを追跡するためのメソッドがあります。主なFusionコールバックを実装しています。Character
ゲーム内のプレイヤーアバターで、プレイヤーキャラクターの基本的な動きを制御します。Map
は、実際のゲームシーンに存在するネットワークオブジェクトで、そのシーンでプレイヤーのアバターを生成する役割を担っています。MapLoader
Fusion のオブジェクトプロバイダの実装です。 ロード画面の表示から、読み込まれたネットワークオブジェクトのリストの収集まで、シーンのロードシーケンスを制御します。Session
最初のプレイヤーが接続されると、一つの Session オブジェクトが生成され、App
の親オブジェクトとなり、読み込み時に破壊されることを防ぎます。セッションはマップを読み込むためのロジックを制御し、アプリ(App.Instance.Session
)からアクセスすることができます。Player
各プレイヤーはセッションに参加するときに Player オブジェクトを取得し、これがセッションゲームオブジェクトの親になります。そうすることで、シーンのロードをまたいで存続させることができます。プレイヤーオブジェクトはゲーム内の視覚的な表現を持たず、すべてのクライアントと共有されるプレイヤー情報のカプセル化に過ぎません。