Quantumプロジェクト
Unitypackageの内容
Quantum 3 SDKは、unitypackage
ファイルで配布されています。これは大きくAssets/Photon
とAssets/QuantumUser
の2つに分かれていて、前者はQuantum SDK、後者はユーザーが変更可能なコードになります。
Quantumをインストールすると、以下のフォルダー構造が確認できます。
Assets
├───Photon
│ ├───PhotonLibs
│ ├───PhotonRealtime
│ ├───Quantum
│ ├───QuantumAsteroids
│ └───QuantumMenu
└───QuantumUser
├───Editor
│ ├───CodeGen
| └───Generated
├───Resources
├───Scenes
├───Simulation
│ └───Generated
└───View
└───Generated
アップグレードによって、Photon
以下のすべてのファイルは置き換えられますが、QuantumUser
は置き換えられません。
すべての決定論的なシミュレーションコードは必ず、QuantumUser/Simulation
以下か、Quantum.Simulation
アセンブリ参照に含まれている必要があります。
Quantumビュースクリプトを拡張するコード(例:部分メソッド)は、Quantum.Unity
/Quantum.Unity.Editor
のアセンブリ参照に含めることができます。
Assets/Photon
Assets/Photon
:このフォルダーには、Photon Quantumやその他のパッケージが含まれます。ここにあるファイルの変更は、アップグレード時に上書きされます。Assets/Photon/PhotonLibs (and PhotonRealtime)
:QuantumがCloudに接続/通信するために使用する、依存のPhotonライブラリが含まれます。Assets/Photon/Quantum/Assemblies
:Unity用のQuantumライブラリと、そのデバッグ版が含まれます。Assets/Photon/Quantum/Editor
:QuantumのUnityエディタースクリプトです。Quantum.Unity.Editor.dll
にコンパイルされます。Assets/Photon/Quantum/Editor/Assemblies
:QuantumのCodeGenライブラリが含まれます。Assets/Photon/Quantum/Editor/CodeGen
:QuantumのCodeGenスクリプトが含まれます。Quantum.CodeGen.Qtn.dll
にコンパイルされます。Assets/Photon/Quantum/Runtime
:QuantumのUnityランタイムスクリプトです。Quantum.Unity.dll
にコンパイルされます。Assets/Photon/Quantum/Simulation
:Quantumシミュレーションのコアスクリプトです。Quantum.Simulation.dll
にコンパイルされます。Assets/Photon/Quantum/Samples
:デモメニューシーンとGraphProfilerが含まれます。
Assets/QuantumUser
Assets/QuantumUser
:このフォルダー内のファイルは、アップグレードで上書きされることはなく、開発者の管理下にあります。Quantumやシミュレーションライブラリへコードを追加するには、アセンブリ定義参照を使用します。Assets/QuantumUser/Editor/CodeGen
:Qtn CodeGenを拡張するファイルが含まれます。Assets/QuantumUser/Editor/Generated
:生成されたUnityエディタースクリプトです。Assets/QuantumUser/Simulation
:実際のシミュレーションコードです。Assets/QuantumUser/Simulation/Generated
:生成されたQuantum C#コードです。Assets/QuantumUser/Resources
:ランタイムの設定ファイルです。Assets/QuantumUser/Scenes
:新しいQuantumシーン用のデフォルトフォルダーです。Assets/QuantumUser/View
:ビュースクリプトを置くデフォルトの場所です。Assets/QuantumUser/View/Generated
:生成されたQuantumプロトタイプスクリプトです。このフォルダー内のスクリプトは、Quantum.Unity.dll
を拡張します。
Quantumは以下4つのアセンブリに分割されています。
Quantum.Simulation
:シミュレーションコードが含まれます。ユーザーのシミュレーションコードは、AssemblyDefinitionReferences
を使用してこのアセンブリに追加する必要があります。Unity/Odinのプロパティ属性は自由に使用できますが、非決定論的なUnity APIの使用は全く推奨できません。このアセンブリのコードは、スタンドアロンの.csproj
として簡単に動作させることができます。Quantum.Unity
:Qunatumとの統合に特化したUnityのコードが含まれます。さらに、コンポーネントプロトタイプをラップするMonoBehaviour
がCodegenによって生成されます。Quantum.Unity.Editor
:Quantum.Simulation
とQuantum.Unity
のエディターコードが含まれます。Quantum.Unity.Editor.CodeGen
:Codegenとの統合コードが含まれます。これは他のQuantumアセンブリとは完全に独立しているため、コンパイルエラー時でも実行できます(セーフモードは終了する必要があります)。
Quantumの依存関係

Quantum Hub
Ctrl+H
を押すか、Quantumメニューから、Quantum Hubを開きます。
重要なQuantum設定ファイル(例:PhotonServerSettings
)が欠けている場合も、Hubウィンドウがポップアップするので、インストールボタンを押しましょう。
インストールプロセスでは、unitypackageに含まれない(Quantumバージョンのアップグレードによって上書きされない)ファイルが、ローカルにインストールされます。

Quantumメニューのインストール
Quantumメニューはアドオンで、Hubを使用してSDKと一緒にインストールできます。unitypackageはAsset/Photon/QuantumMenu/Quantum-Menu.unitypackage
にあります。
このインゲームメニューから、ランダムなオンラインマッチを開始したり、パーティーを作成したりすることができます。

カスタマイズ要素の詳細については、サンプルメニューのカスタマイズをご覧ください。
リリース/デバッグビルド
Quantumライブラリ(Quantum.Deterministic.dll
・Quantum.Engine.dll
・Quantum.Corium.dll
)は、リリース版/デバッグ版の両方があります。QUANTUM_DEBUG
グローバルスクリプト定義を使用して、Unityが正しいライブラリを認識できるようにしています。
デバッグとリリースの切り替えには、メニューを使用します。

注意点:定義はプラットフォームごとに設定する必要があるため、リリースビルド作成時にデバッグ版が無効になっていないプラットフォームがある可能性に気を付けてください。
デバッグビルドはリリースビルドに比べて著しくパフォーマンスが低下します。パフォーマンステストは、必ずQuantumリリースビルド(とUnity IL2CPP)を使用してください。詳細はプロファイリングセクションをご覧ください。
開発ビルドには、アサーション・例外・チェック・デバッグ出力など、開発に役立つものが含まれていますが、リリース設定では無効になります。以下がその例です。
- Quantumプロジェクトコードから呼び出される
Log.Debug()
/Log.Trace()
は、ログを出力しません。 Draw.Shape()
メソッドなどもすべて同様です。NavMeshAgentConfig.ShowDebugAvoidance
/ShowDebugSteering
は、ギズモを描画しません。- 物理などの低水準システム内のアサーションや例外は無効になります。
ロギング
Quantumが提供するQunatum.Log
静的クラスは、シミュレーションコードのログと、そのログの出力を生成します。
C#
namespace Quantum {
public unsafe class MyQuantumSystem : SystemMainThread
public override void Update(Frame frame) {
Log.Debug($"Updating MyQuantumSystem tick {frame.Number}");
}
}
}
Unity SDKにはQuantumUnityLogger
というラッパーがあり、RuntimeInitializeOnLoadMethod
/InitializeOnLoadMethod
時に静的に初期化されます(QuantumUnityLogger.Initialize()
参照)。
部分メソッドInitializePartial()
を使用して、この初期化をカスタマイズできます。
QuantumUnityLogger
クラスは、様々なカスタマイズフィールド(例:カラースキームの定義)を提供しています。
ログレベル
グローバルのログレベルはQuantum.Log.LogLevel
で制御されます。初期ログレベルを設定するには、以下のスクリプト定義を使用します。
QUANTUM_LOGLEVEL_TRACE
QUANTUM_LOGLEVEL_DEBUG
QUANTUM_LOGLEVEL_INFO
QUANTUM_LOGLEVEL_WARN
QUANTUM_LOGLEVEL_ERROR
これらはQuantumEditorSettings
インスペクターから切り替えられます。

前述の通り、デバッグビルドのLog.Trace()
/Log.Debug()
メッセージは、それぞれTRACE
/DEBUG
定義がある場合のみログが出力されます。Unityエディター上では、常にDEBUG
定義で実行されることに注意してください。
Photon Realtime ログ
Quantumで使用されるPhoton Realtimeライブラリ自体にもログレベルがあり、PhotonServerSettings
のPhoton.Realtime.Appsettings
から設定できます。
AppSettings.NetworkLogging
:PhotonPeer
と接続用のログレベルです。接続関連の問題のデバッグに便利です。AppSettings.ClientLogging
:RealtimeClient
とコールバック用のログレベルです。クライアント状態・使用中のサーバー・呼び出した命令に関する情報の取得に便利です。
LOG_WARNING
/LOG_INFO
/LOG_DEBUG
を定義しない限り、開発ビルド以外でERROR
未満のRealtimeログは出力されません。
シミュレーションのエクスポート
Quantumシミュレーションコードは、Unityに依存しないスタンドアロンのC#プロジェクトにエクスポートできます。プロジェクトはUnityプロジェクトフォルダー内に生成され、すべてのシミュレーションソースファイルとリンクし、Assets/Photon/Quantum/Editor/Dotnet/Quantum.Dotnet.Debug.zip
などから抽出された非UnityのQuantum依存コードを使用します。
Unityプロジェクトの
QuantumDotnetProjectSettings
アセットを選択し、どのシミュレーションソースコードを検索するかを定義します。- 手動で
IncludePaths
を追加するか、UnityアセットラベルQuantumDotNetInclude
でフォルダーをマークします。
- 手動で
Unityプロジェクトの
QuantumDotnetBuildSettings
アセットを選択し、DotNetプロジェクトをどのように生成/ビルドするかを制御します。

Show Folder After Generation
を有効にし、Generate Dotnet Project
を押します。- Unityプロジェクトフォルダーの相対パス
Project Base Path
に、プロジェクトが生成されます。
- Unityプロジェクトフォルダーの相対パス

エクスポートされたソリューション構造
生成されたソリューションには、以下の2つのプロジェクトが含まれます。
Lib
- デバッグ/リリース設定の、解凍済みの非UnityのQuantum依存コードですQuantum.Runner.Dotnet
- Quantumリプレイを実行できる軽量のコンソールランナーが含まれますQuantum.Simulation.Dotnet
- 非UnityのQuantumシミュレーションプロジェクトとコードが含まれます
コンソールランナーの使用
IDEでソリューションをビルドします。
ターミナルを開き、ビルドexe(
Quantum.Runner.exe
)があるフォルダーに移動します。次の引数を使用してexeを実行します。
bash
Quantum.Runner.exe --replay-path path/to/replay --lut-path path/to/lut --db-path path/to/db --checksum-path path/to/checksum
--replay-path
と--lut-path
引数は必須です。
--db-path
引数は、リプレイがDBを含む場合はオプションです。
--checksum-path
引数は完全なオプションです。
スタンドアロンアセットファイルを取得するには、Tools/Quantum/Export/AssetDatabase
メニューの下にあるAsset Database
メニューボタンを押してください。

LUTファイルを取得するには、UnityプロジェクトのAssets/Photon/Quantum/Resources/LUT
フォルダーにアクセスしてください。
.qtnファイルのシンタックスハイライト
DSL(.qtn
拡張子のファイル)でシンタックスハイライトを有効にするには、以下の各IDEガイドをご覧ください。
Visual Studio
Visual Studioでは、他のタイプ(例:C#)を関連付けることで、QTNファイルにシンタックスハイライトを追加できます。これはTools -> Options -> Text Editor -> File Extension
から実行できます。

Visual Studio Code
Visual Studioでは、他のタイプ(例:C#)を関連付けることで、QTNファイルにシンタックスハイライトを追加できます。
- 設定を開く(Ctrl+、macOSではCmd+)
- 「Files: Associations」を検索する
- 「*.qtn」から「csharp」へファイルの関連付けを追加する

JetBrains Rider
JetBrains Riderでは、新しいファイルタイプを定義することで、DSLファイル(.qtn
拡張子のファイル)にシンタックスハイライトを追加できます。
- ステップ1:
File -> Settings -> Editor -> File Types
に移動します。

- ステップ2:
Recognized File Types
カテゴリーで、右側の+
ボタンを押して新しいファイルタイプを追加します。

- ステップ3: 行コメント、ブロックコメントなどの設定を確認します。
- ステップ4: 以下のリストをキーワードレベル1に貼り付けます。
C#
#define
#pragma
abstract
any
array
asset
asset_ref
bitset
button
byte
component
dictionary
entity_ref
enum
event
fields
filter
flags
global
has
import
input
int
list
local
long
not
player_ref
remote
sbyte
set
short
signal
struct
synced
uint
ulong
union
use
ushort
using
- ステップ5: 以下のリストをキーワードレベル2に貼り付け、
Ok
を押します。
C#
(
)
*
:
;
<
=
>
?
[
]
{
}
- ステップ6:
File Name Patterns
カテゴリーで、右側の+
ボタンを押します。 - ステップ7: タイプのワイルドカードとして
*.qtn
を入力します。
