Quantumコンフィグ
イントロダクション
いくつかのQuantumコンフィグファイルには特定の役割と目的があります。
コンフィグファイルはUnityプロジェクトでそれぞれのフォルダに格納されており、ファイルの検索は時として面倒です。こちらの投稿でクイック検索ツールバーについて確認してください:Unity Window Config Shortcuts
コンフィグファイルの多くはUnityの「リソース」フォルダ内にあり、最終的にアプリのビルドにこのように(例としてDeterministicSessionConfigAsset.Instanceを参照)含まれます。一方、その他(RuntimeConfig、RuntimePlayer)はランタイム中にアセンブリされます。
Quantum開始シーケンス
以下の表ではどのコンフィグを誰がいつ使用するのかということが示されています。

コンフィグファイル
PhotonServerSettings
Assets/Photon Unity Networking/Resources/PhotonServerSettings.asset
バージョン1.2.4までのQuantumではカスタムPUNパッケージ(PhotonUnityNetworking v1.93)を使用してPhoton Cloudとの接続と通信を行っています。このコンフィグが表しているのは、クライアントの接続先(クラウド+リージョン、ローカルIPなど)です。
Photon Unity Networking V1インストラクション
また、有効なAppId(有効なQuantumプラグインを参照するもの)もこちらで設定されています。
このコンフィグのインスタンスで許可されているのは1つだけです。ローディングはPhotonNetworkクラスに高度に統合されています。PhotonNetwork.PhotonServerSettings
を参照してください。

DeterministicConfig
Assets/Quantum/Resouces/DeterministicConfig.asset
DeterministicConfigで、開発者は予測シミュレーションとプラグイン(QuantumRunnerサーバーコンポーネント)の内部をパラメータ化できます。各パラメータの詳細については、このコンフィグのインスペクター内でShow Help Info
に切り替えます。
デフォルトの方法ではこのアセットの1つのインスタンスのみが許可されていますが、QuantumRunner.StartParameters
にパスされる限り、ファイルの検索方法は重要ではありません。
このコンフィグファイルは、一度のセッションの全てのクライアント間で同期されます。各プレイヤーがローカルで独自のDeterministicConfigバージョンでシミュレーションを開始したとしても、サーバーによって、プラグインに最初に参加したプレイヤーのコンフィグファイルのインスタンスが配布されます。
このコンフィグ上のデータはチェックサム生成に含まれています。

SimulationConfig
Assets/Resources/DB/Configs/SimulationConfig.asset
このコンフィグファイルには、ECSレイヤと、物理やナビゲーションなどのコアシステム内で使用されるパラメータがあります。各値の詳細は、マニュアルで関連するシステムのセクションを参照してください。
SimulationConfigはQuantumデータベースの一部で、このコンフィグの多くのインスタンスがサポートされています。コンフィグアセットGUIDをRuntimeConfigに追加して、どのSimualtionConfigを使用するか選択します。
開発者はquantum_code/quantum.state/Core/SimulationConfig.cs
クラスを「拡張」(パーシャルクラスを作成)してより多くのデータを追加できます。

RuntimeConfig
静的設定データしかないSimulationConfigとは対照的に、RuntimeConfigには ゲームごとに異なる 情報があります。デフォルトでは、例えばどのマップを読み込むか、ランダムな開始シード値などを定義します。これは毎回ゲームを開始する際にスクラッチからアセンブリします。
開発者はquantum_code/quantum.state/RuntimeConfig.User.cs
にカスタムデータを追加できます(シリアライズ化方法を入力するのを忘れないでください)。
DeterministicConfigと同様に「ファイル」は、初めのプレイヤーがQuantumプラグインに接続し参加した後でその他のクライアント全員に配布されます。
このコンフィグを使用する便利な方法は、デフォルト値と例えば他のアセットファイルを指し示している特定のバランシングデータを含むアセットリンク(GUID)でRuntimeConfig (と、RuntimePlayer)のインスタンスを格納するMonoBehaviourを作成することです。プレイヤーがRuntimeコンフィグの一部であるゲームロビー内にいる場合、ゲームへの接続および開始前にプレイヤーのカスタムロードアウト(load out)で上書きされる可能性があります。QuantumRunnerLocalDebug.cs
もしくは下記のサンプルをご覧ください。

C#
using Quantum;
using UnityEngine;
public sealed class RuntimeSetup : MonoBehaviour
{
public static RuntimeSetup Instance { get; private set; }
public RuntimeConfig GameConfig { get { return _gameConfig; } }
public RuntimePlayer PlayerConfig { get { return _playerConfig; } }
[SerializeField] private RuntimeConfig _gameConfig;
[SerializeField] private RuntimePlayer _playerConfig;
private void Awake() {
Instance = this;
}
}
RuntimePlayer
RuntimeConfigと同様、RuntimePlayerも一人のプレイヤーの動的プロパティを表します(quantum_code/quantum.state/RuntimePlayer.User.cs)。
プレイヤーのデータは他のコンフィグとは異なる挙動をします。これは、実際にゲームが開始した後に個々のプレイヤーから個別に送信されるためです。OnGameStarted()
コールバックの間にSendPlayerData()
が実行されたことを確認してください。