設定ファイル
はじめに
Quantum製ゲームを作成/実行するために必要な設定ファイルは7つあります。
名前 | 説明 |
---|---|
PhotonServerSettings |
Photon Cloud接続の詳細を格納します。 |
SessionConfig |
決定論的なシミュレーションとサーバーの設定を格納します。 |
SimulationConfig |
Quantum ECSのレイヤーと、物理エンジンのようなコアシステムの設定を格納します。 |
RuntimeConfig |
実際のゲーム/アプリケーションのデータを格納します。 |
RuntimePlayer |
各プレイヤーのデータを格納します。 |
QuantumEditorSettings |
Unityプロジェクトの設定を格納します。 |
QuantumGameGizmoSettings |
Quantumシミュレーション中に表示されるUnityギズモの設定を格納します。 |
PhotonServerSettings
・SessionConfig
・SimulationConfig
・QuantumEditorSettings
・QuantumGameGizmoSettings
は、UnityプロジェクトのScriptableObject
に格納されます。RuntimeConfig
とRuntimePlayer
は通常、実行時に追加されます。
QuantumメニューQuantum > Find Config > ..
から、Unityプロジェクト中の設定アセットのグローバルインスタンスの場所に移動できます。

PhotonServerSettings
Quantum 3はPhoton Realtime 5を使用して、Photon Cloudの接続と通信を行います。この設定には、接続を確立するために必要なすべての情報が格納されます。
Photon Realtimeについての詳細は、Photon Realtime イントロをご覧ください。
最重要設定はAppIdです。PhotonのAppIdの作成方法については、Quantum Asteroids チュートリアル - プロジェクトの準備をご覧ください。

パラメーター名 | 説明 |
---|---|
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
はシミュレーション開始前に、セッション内のすべてのクライアント間で同期されます。プロトコルの詳細は、オンライン時の設定シーケンス図セクションをご覧ください。
この設定には、チェックサムの生成も含まれています。

パラメーター名 | 別名 | 単位 | 説明 |
---|---|---|---|
Simulation Rate |
Update FPS |
Hz | Quantumが1秒に何ティック実行されるか。 |
Lockstep |
Lockstep Simulation |
Boolean | Quantumシミュレーションをロックステップモードで実行することで、ロールバックを行わないようにします。入力のInputDelayMin は10 以上にすることを推奨します。 |
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データベースの一部で、複数のインスタンスがサポートされています。シミュレーションでどの設定を使用するかを選択するには、RuntimeConfig
でSimulationConfig
を参照してください。
Quantum HubによるUnityプロジェクト初期化で、以下のファイルが作成されます。
QuantumUser/Resources/QuantumDefaultConfigs.asset
は、SimulationConfig
アセットと、デフォルトの設定アセット(PhysicsMaterial
・CharacterController2DConfig
・NavMeshAgentConfig
など)の参照をサブセットとして含みます。

QuantumUser/Game/SimulationConfig.User.cs
ファイルは、SimulationConfig
を拡張するために使用できる部分クラス定義を含みます。
C#
namespace Quantum {
public partial class SimulationConfig : AssetObject {
public int Foo;
}
}

パラメーター名 | 説明 |
---|---|
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
が作成されます。

パラメーター名 | 説明 |
---|---|
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接続プロトコルを通して、クライアントが設定ファイルを制御するフローは以下の通りです。
