This document is about: QUANTUM 3
SWITCH TO

設定ファイル

はじめに

Quantum製ゲームを作成/実行するために必要な設定ファイルは7つあります。

名前 説明
PhotonServerSettings Photon Cloud接続の詳細を格納します。
SessionConfig 決定論的なシミュレーションとサーバーの設定を格納します。
SimulationConfig Quantum ECSのレイヤーと、物理エンジンのようなコアシステムの設定を格納します。
RuntimeConfig 実際のゲーム/アプリケーションのデータを格納します。
RuntimePlayer 各プレイヤーのデータを格納します。
QuantumEditorSettings Unityプロジェクトの設定を格納します。
QuantumGameGizmoSettings Quantumシミュレーション中に表示されるUnityギズモの設定を格納します。

PhotonServerSettingsSessionConfigSimulationConfigQuantumEditorSettingsQuantumGameGizmoSettingsは、UnityプロジェクトのScriptableObjectに格納されます。RuntimeConfigRuntimePlayerは通常、実行時に追加されます。

QuantumメニューQuantum > Find Config > ..から、Unityプロジェクト中の設定アセットのグローバルインスタンスの場所に移動できます。

Find Quantum Configs Menu

PhotonServerSettings

Quantum 3はPhoton Realtime 5を使用して、Photon Cloudの接続と通信を行います。この設定には、接続を確立するために必要なすべての情報が格納されます。

Photon Realtimeについての詳細は、Photon Realtime イントロをご覧ください。

最重要設定はAppIdです。PhotonのAppIdの作成方法については、Quantum Asteroids チュートリアル - プロジェクトの準備をご覧ください。

Photon Server Settings
パラメーター名 説明
App Settings 詳細は、インラインコード説明か、Photon Realtime 5 API ドキュメントをご覧ください。
Player TTL In Seconds ルーム作成時に使用される、デフォルトのプレイヤーの生存時間です。詳細はRealtimeのドキュメントをご覧ください。
Empty Room TTL In Seconds ルーム作成時に設定される、デフォルトのルームの生存時間です。詳細はRealtimeのドキュメントをご覧ください。
Best Region Summary Key ベストリージョン接続(FixedRegion:null)時、PhotonはAppIdで利用可能な各リージョンへpingを送信します。結果はUnityのPlayerPrefsに保存され、次にアプリケーションを開始するまでこのキーが再利用されます。
Manage App Id PhotonのAppIdに関して、ダッシュボードのURLを開きます。
Best Region Cache ベストリージョンのキャッシュがPlayerPrefsから読み込まれます。
Reset Best Region Cache PlayerPrefsの中身を削除します。
Open Region Dashboard Photonのリージョンに関して、ダッシュボードのURLを開きます。
Load App Settings Cloudやローカルサーバーへ接続するためにAppSettingsを設定するボタンです。

SessionConfig

SessionConfigの別名は、DeterministicConfig/DeterministicSessionConfigです。

開発者はSessionConfigから、内部的な決定論的シミュレーションとプラグイン(Quantumサーバーコンポーネント)を調整できます。

各クライアントはSessionRunner.Argumentsの一部として、SessionConfigをサーバーに送信します。サーバーは最初に受信したものを選択するか、Webhookやカスタムプラグインを呼び出して値を上書きします。SessionConfigはシミュレーション開始前に、セッション内のすべてのクライアント間で同期されます。プロトコルの詳細は、オンライン時の設定シーケンス図セクションをご覧ください。

この設定には、チェックサムの生成も含まれています。

Session Config
パラメーター名 別名 単位 説明
Simulation Rate Update FPS Hz Quantumが1秒に何ティック実行されるか。
Lockstep Lockstep Simulation Boolean Quantumシミュレーションをロックステップモードで実行することで、ロールバックを行わないようにします。入力のInputDelayMin10以上にすることを推奨します。
Rollback Window Tick Count 各クライアントのローカルのリングバッファに何フレームを保持するか。Quantumがどれだけ未来を予測できるかを制御します。ロックステップモードでは使用されません。
Checksum Interval Tick Count 検証のために、フレーム状態のチェックサムをサーバーへ送信する頻度です(開発中に便利で、リリース時は0に設定します)。フレーム単位で定義します。
Checksum Cross Platform Determinism Boolean Quantumフレームのチェックサムが、異なるプラットフォーム間で決定論的になります。ただし、負荷が高いため、デバッグ中のみ使用するようにしてください。
Input Delta Compression Boolean 以前のティックに設定された入力をデルタ圧縮するかどうか。帯域幅を全体的に削減します。
Offset Min Input Delay Min ms プレイヤーの最小入力ディレイです。
Offset Max Input Delay Max ms プレイヤーの最大入力ディレイです。
Offset Ping Start Input Delay Ping Start ms Quantum開始時の入力ディレイに適用するPing値です。
Send Redundancy Input Redundancy Tick Count Quantumクライアントがどれだけ時間をずらして冗長な入力の再送を行うか。1 = 1フレーム待つ、2 = 2フレーム待つ
Input Repeat Max Distance Tick Count リピート入力について、何フレーム分をスキャンするか。5 = 前後5フレームをスキャン、10 = 前後10フレームをスキャン
Hard Tolerance Tick Count フレームの入力期限が切れるまで、サーバーが何フレーム待つか。受信しなかった入力は、リピート入力かnullに置換され、すべてのプレイヤーに送信されます。
Offset Correction Limit Min Time Correction Frames Tick Count 時間補正パッケージを受信した時に、クライアントのローカル時間とサーバー時間がどれだけ異なっていたら、クライアントがローカルクロックを調整するか。
Correction Send Rate Time Correction Rate Hz すべてのクライアント時間を同期するために、サーバーが時間補正パッケージを1秒間に何回送信するか。
Correction Frames Limit Min Offset Correction Diff Tick Count 現在の入力ディレイと現在リクエストされているオフセットが何フレームずれていたら、Quantumがローカルの入力オフセットを更新するか。
Room Wait Time Session Start Timeout s オンラインでシミュレーション開始がリクエストされた後、サーバーが他のプレイヤーをどれだけ待つかを制御する、人為的な待ち時間です。
Time Scale Minimum Time Scale Min % サーバーに適用される最小のタイムスケールです。
Time Scale Ping Start Time Scale Ping Min ms サーバーがタイムスケールをTime Scale Minimumへ下げ始めるPing値です。
Time Scale Ping End Time Scale Ping Max ms サーバーがTime Scale Minimumに到達する(最も遅い設定になる)Ping値です。
Player Count int シミュレーション初期化時のプレイヤー数です。このパラメーターはSessionRunner開始時にSessionRunner.Arguments.PlayerCountから上書きされるため、0のままにしておくことができます。
Input Fixed Size int 入力構造体のサイズです。これはセッション開始後に内部的に設定されます。これを計算するメソッドはQuantumGame.GetInputSerializedFixedSize()です。

SimulationConfig

SimulationConfigは、Quantum ECSレイヤーと、物理エンジンやナビゲーションのようなコアシステム内部で使用されるパラメーターを保持します。各値の詳細は、マニュアルのシステムの関連するセクションをご覧ください。

SimulationConfigはQuantumデータベースの一部で、複数のインスタンスがサポートされています。シミュレーションでどの設定を使用するかを選択するには、RuntimeConfigSimulationConfigを参照してください。

Quantum HubによるUnityプロジェクト初期化で、以下のファイルが作成されます。

  • QuantumUser/Resources/QuantumDefaultConfigs.assetは、SimulationConfigアセットと、デフォルトの設定アセット(PhysicsMaterialCharacterController2DConfigNavMeshAgentConfigなど)の参照をサブセットとして含みます。
Default Configs
  • QuantumUser/Game/SimulationConfig.User.csファイルは、SimulationConfigを拡張するために使用できる部分クラス定義を含みます。

C#

namespace Quantum {
  public partial class SimulationConfig : AssetObject {
    public int Foo;
  }
}
Simulation Config
パラメーター名 説明
Entities APIドキュメントをご覧ください。
Physics 「物理エンジン」ドキュメントをご覧ください。
Navigation 「ナビゲーション」ドキュメントをご覧ください。
Auto Load Scene From Map Quantum開始シーケンスでUnityシーンのロードをトリガーするオプションです。開始シーケンスをカスタマイズするなら、これは無効にして、独自シーンローディングに置き換えてください。「Previous Scene」はQuantumマップのシーン名を参照します。

例えば、デモメニューには、AutoLoadSceneFromMapが無効の場合に、Quantumシミュレーション開始前にシーンをロードするステップが存在します。
Thread Count 内部的に使用するスレッド数をオーバーライドします。デフォルトは2です。
Checksum Snapshot History Length 確定フレームのチェックサムをどれだけ保存するか。これは、チェックサムエラーが発生した場合に、フレームダンプを生成するために使用されます。Replay/Localモードでは使用されません。デフォルトは3です。
Checksum Error Dump Options デフォルトの設定で解析困難だった場合の、チェックサムダンプの追加オプションです。
Heap Tracking Mode デバッグモード中に、フレームヒープの割り当てをどの程度追跡するか。

開発時の推奨モードはDetectLeaksです。メモリリークをデバッグしている間は、TraceAllocationsモードを有効にできます(注意:トレースは非常に遅いです)。
Heap Page Shift メモリの1ページあたりの最大ヒープサイズを定義します。例えば、フレームクラスではQListなどの割り当てに使用されます。デフォルトは15です。

例: 2^15 = 32,768 bytes

TotalHeapSizeInBytes = (1 << HeapPageShift) * HeapPageCount
Heap Page Count メモリのヒープの最大ページ数を定義します。例えば、フレームクラスではQListなどの割り当てに使用されます。デフォルトは256です。

TotalHeapSizeInBytes = (1 << HeapPageShift) * HeapPageCount
Heap Extra Count セッションで追加で割り当てるヒープを設定します。シミュレーション自体で実際に必要な分以上の(予備)フレームを作成する必要がある場合に使用されます。デフォルトは0です。

RuntimeConfig

SimulationConfigとは対照的に、RuntimeConfigゲームごとに異なる情報を保持します。例えばデフォルトでは、ロードするマップと乱数のシードを定義します。設定を保存するためのアセットはありませんが、実行時にプレイヤーの選択(例:ゲームモード)に基づいて組み立てられます。

特定のRuntimeConfigを使用するには、セッション開始時にSessionRunner.Argumentsに値を代入してください。

C#

var map              = new AssetRef<Map>(QuantumUnityDB.GetGlobalAssetGuid("Photon/Quantum/Samples/SampleScenes/Resources/SampleMap"));
var simulationConfig = new AssetRef<SimulationConfig>(QuantumUnityDB.GetGlobalAssetGuid("QuantumUser/Resources/QuantumDefaultConfigs|DefaultConfigSimulation"));
var systemsConfig    = new AssetRef<SystemsConfig>(QuantumUnityDB.GetGlobalAssetGuid("Photon/QuantumUser/Resources/DefaultSystemsConfig"));

var sessionRunnerArguments = new SessionRunner.Arguments {
    RuntimeConfig = new RuntimeConfig() {
        Map              = map, 
        Seed             = DateTime.Now.Millisecond
        SimulationConfig = simulationConfig, 
        SystemsConfig    = systemsConfig },
    // ..
};

SessionConfigと同様に、RuntimeConfigは各クライアントからサーバーに送信されて、Webhookやカスタムサーバーにより検証可能で、Quantum開始シーケンス中にすべてのクライアントにその1つが配布されます。

SessionConfigとは異なり、バイナリ形式でシリアライズされてサーバーに送信されます。QuantumサーバーからのRuntimConfigのアップロードとダウンロードは、Zip圧縮されたJSONシリアライズをデフォルトで使用します。

QuantumのUnityプロジェクト初期化時に、QuantumUser/Game/RuntimeConfig.User.csスクリプトが作成され、そこからRuntimeConfigを拡張できます。

C#

namespace Quantum {
  public partial class RuntimeConfig {
    // 独自のフィールドを追加(プロパティは使用しないでください)
    public int Foo;

    // DumpUserData()を実装して、Dump()使用時に返されるデバッグ文字列に情報を追加する
    partial void DumpUserData(ref String dump) {
    }
  }
}

例えば、RuntimeConfigのコピーを作成することで、シリアライズのテストが行えます。

C#

var copy = RuntimeConfig.Copy(runtimeConfig, new QuantumUnityJsonSerializer());

QuantumRunnerLocalDebugスクリプトのように、ゲームオブジェクト上に設定を格納することもできます。

C#

public class QuantumRunnerLocalDebug : QuantumMonoBehaviour {
    public RuntimeConfig RuntimeConfig;
    // ..
}
パラメーター名 説明
Seed Frame.RNG以下のセッション乱数を初期化するシード
Map ゲームセッションに使用されるQuantumマップのアセット参照
SimulationConfig ゲームセッションに使用されるSimulationConfigのアセット参照
SystemsConfig Quantumシステム設定のアセット参照

設定が代入されていなければ、組み込みシステムのデフォルト選択がDeterministicSystemSetup.CreateSystems(RuntimeConfig, SimulationConfig, SystemsConfig)で使用されます。

使用されるシステムは、DeterministicSystemSetup.AddSystemsUser(System.Collections.Generic.ICollection{SystemBase}, RuntimeConfig, Quantum.SimulationConfig, Quantum.SystemsConfig)メソッドを使用して、コードによる前処理が行われます。

RuntimePlayer

RuntimeConfigと似ていて、RuntimePlayerは実行時のプレイヤーのプロパティを表します。

プレイヤーのデータは他の設定とは異なり、実際にゲームが開始された後(AddPlayer)に、各プレイヤーから個別に送信されます。詳細は、ドキュメントのプレイヤーオンラインセッションをご覧ください。

QuantumのUnityプロジェクト初期化時に、QuantumUser/Game/RuntimePlayer.User.csスクリプトが作成され、そこからRuntimePlayerを拡張できます。

C#

namespace Quantum {
  public partial class RuntimePlayer {
    // 独自のフィールドを追加(プロパティは使用しないでください)
    public int Foo;

    // DumpUserData()を実装して、Dump()使用時に返されるデバッグ文字列に情報を追加する
    partial void DumpUserData(ref String dump) {
    }
  }
}

RuntimeConfigと同様に、RuntimePlayerのデータはJSONシリアライズされて、Quantumサーバーとの送受信が行われます。

RuntimePlayerはデフォルトで2つのフィールドを持ち、プレイヤーの視覚表現とニックネームに使用できます。これはデモメニューでも使用されています。

C#

public partial class RuntimePlayer {
    // RuntimePlayerを使用して、プレイヤーのアバターのプロトタイプを選択する方法の一例
    public AssetRefEntityPrototype PlayerAvatar;
    // RuntimePlayerを使用して、プレイヤーのニックネームを代入する方法の一例
    public string PlayerNickname;
}

QuantumEditorSettings

QuantumEditorSettingsは、Unityとの連携で重要な情報を保持します。

Quantum HubによるUnityプロジェクト初期化で、デフォルト設定アセットのQuantumUser/Editor/QuantumEditorSettings.assetが作成されます。

Quantum Editor Settings
パラメーター名 説明
Asset Search Paths QuantumUnityDBがQuantumアセットを検索するために使用する場所です。これを変更した場合、手動ですべてのUnity(Quantum)アセットを再インポートする必要があります。
Default New Assets Location 新しいQuantumアセットが作成されるデフォルトのフォルダーです。
Use Quantum Unit DB Asset Postprocessor ポストプロセスによって、Quantumアセットとプレハブを複製して、新しいGUIDと正しいパスが設定されていることを確認します。これは特にバッチプロセスを遅くする可能性があり、ここから無効に切り替えることができます。
Use Quantum Toolbar Utilities 有効にすると、シーンローディングのドロップダウンが再生ボタンの隣に表示されます。
Quantum Toolbar Zone ツールバーを表示する場所です。変更後にドメインリロードが必要です。
Use Photon App Versions Postprocessor 有効にすると、デモメニューシーンをサポートするPhotonPrivateAppVersionのScriptableObjectがローカルに作成されます。
Entity Component Inspector Mode 有効にすると、エンティティコンポーネントがエンティティプロトタイプ内に表示されます。
FP Display Precision FPを表示する際に小数点以下何桁表示するか。デフォルトは5です。
Auto Build On Scene Save シーンを保存する際、自動的にベイクするか。
Auto Build On Playmode Changed 有効にすると、ゲーム再生時にMapDataが自動的にベイクされます。
Auto Build On Build 有効にすると、ビルド時にMapDataが自動的にベイクされます。
Auto Run Qtn CodeGen 有効にすると、quantum.code内の.qtnファイルが変更された時、即座にcodegenが実行されます。
Asset Guid Overrides GUIDオーバーライドが有効になっているQuantumアセットのリストです。このリストは自動的に追跡されます。
Quantum Debug (All Platforms) すべてのプラットフォームに対して、QUANTUM_DEBUGシンボルを設定して、QuantumのデバッグDLLを利用します。
Quantum Debug (Current Platform) 現在のプラットフォームに対して、QUANTUM_DEBUGシンボルを設定して、QuantumのデバッグDLLを利用します。

QuantumGameGizmoSettings

ギズモ設定は、Quantumのデバッグとギズモ描画・色・トグルについての情報を含みます。

Quantum HubによるUnityプロジェクト初期化で、デフォルト設定アセットのQuantumUser/Editor/QuantumGameGizmosSettings.assetが作成されます。

通常はQuantumGameGizmosSettingsScriptableObject.Global.Settingsから取得されるグローバル設定が使用されます。別の設定を使用したい場合は、実行時にQuantumRunner.GizmoSettingsに設定を代入してください。

Quantum Editor Settings

オンライン時の設定シーケンス図

Quantum接続プロトコルを通して、クライアントが設定ファイルを制御するフローは以下の通りです。

Online Config Sequence Diagram
オンライン時の設定シーケンス図
Back to top