はじめに
ミニゲームやミニマムなチームでの開発であれば、シングルシーンでもゲームを完成させる事ができるでしょう。しかしゲームやチームの規模が大きくなるにつれ、読み込み負荷の増加や作業の分担の観点から避けて通れなくなってくるのが、マルチシーン開発です。
編集については影響ありませんが、実行してPhotonに接続した時にはオンラインマルチゲーム特有の同期や読み込みの問題が出てきます。
本記事ではPhoton Fusionにおけるマルチシーン開発時の基本について、公式のサンプルプロジェクトを元に紹介します。
前提記事
Photon Fusionの基本的な解説は別記事で行っています。詳しく知りたい方は以下のリンクからご参照下さい。
Photon Fusion for Unityの導入手順とPUN2との機能比較
動作確認環境
Windows 10 Home 21H2
Unity 2020.3.27f1
Fusion SDK 1.1.1 F Build 512
Photon Fusionにおけるマルチシーン開発
マルチシーンとは
Unity5.3から追加された機能で、複数のシーンを読み込み・編集する機能です。主にUIやフィールドを分割し、読み込み負荷の軽減や作業分担のために活用されます。
必須要素
マルチシーンのPhoton Fusion対応に最低限必要といえる要素は一つだけで、それはホスト・サーバーが事前に必要なシーンをキャッシュしておくことです。
あとは必要な時にSceneManager.LoadSceneAsyncなどを実行すればロードすることができます。
しかしロードやアンロードを任意のタイミングで問題なく行うには、様々な実装が必要になります。各マシンでの状態の差異によってゲームの進行に問題が出ないように、シーンの必要性や更新のチェックをする、読み込みの許可拒否、クライアント・ホストで動作を切り分ける、などです。
公式が公開しているサンプルでは、こういった基本となる実装がなされているので紹介します。
サンプルについて
公式のサンプルプロジェクトは以下のページからダウンロードすることができます。
Fusion シーンの読み込み | Photon Engine ダウンロード
使用されているSDKのバージョンは1.1.1ですが、最新版(1.1.2、2022/09/01現在)にアップデートしても問題ありません。
ただし、現行のサンプル(ver1.1.1)はマルチピアモードと共有モード接続に対応していない点には注意が必要です。
サンプルの使い方
サンプルを動かすには以下の手順が必要です。
- 公式サイトのダッシュボードでAppIDを作成してコピーする
- Fusion>Fusion Hub>Fusion Setup>FusionAppIDにAppIDをペーストし認証する
- Project>Scenes>Mainのシーンを読み込み再生する
- Buttons Sample/Character Sampleボタンを押すと、それぞれのデモシーンが呼ばれる
- Photonに接続するのはシーンが呼ばれた後
- Buttons Sampleモード
- ボタンを押すと追加のシーンをロード・アンロードする
- Character Sampleモード
- キャラクターを特定の位置に移動させると追加のシーンをロード・アンロードする
- Allow client side management (Host only)オプション
- クライアントが任意のタイミングでシーンをロード・アンロード可能になる
サンプルの中身
シーンを管理するサンプルスクリプトはAssets>Scriptsにあります。主な機能は以下の通り。
CustomNetworkSceneManager.cs
- シーンの追加と削除
- NetworkLinkedList
- ホスト・サーバーが必要なシーンを事前にキャッシュしておく
- NetworkLinkedList
CustomSceneLoader.cs
- シーンをロードする
- SceneManager.LoadSceneAsync(シーンのロード)はここで実行される
CustomSceneLoaderBase.cs
- シーンの状態を監視する
- LateUpdateにて毎フレームチェック
- 必要に応じて読み込み・破棄メソッドが呼ばれる
おまけの機能
画面右のウィンドウをクリックするとログウィンドウが開き、UnityのConsoleウィンドウに近い情報を表示してくれます。
ビルドして動作確認することの多いオンラインマルチゲームでは非常に便利な機能です。