IL Weaving
概要
ネットワークコードの記述をシンプルに保つため、ピア間で同期されるネットワークプロパティやバッファの内部的な処理は、すべてPhoton Fusionによって管理されます。これは、コンパイルプロセスで生成される中間コードを直接書き換えることで実現されており「IL Weaving」と呼ばれています。
IL(中間言語)Weavingプロセスは、コンパイル済みILコードのプログラムの修正を含み、追加の機能や振る舞いを注入します。このコンテキストにおいて、NetworkBehaviourのネットワークプロパティのネットワーク処理・値の圧縮/展開・検証・それ以外の重要な処理・ネットワークバッファの読み取り/書き込みなどのコードが、Fusion IL Weaverによってコンパイル時に追加されます。
このプロセスにより、ネットワークプロパティは通常のプロパティと同じように振る舞いながら、正しく値を同期する機能が有効になり、ネットワークロジックは透過的にコードに統合されます。
Fusion IL Weavingのもう1つの役割は、プロジェクト内のすべてのRPCメソッドの解析/処理です。ピア間でデータを送受信する処理をフックすることで、メソッドを意図した通りに動作させます。
セットアップと実行
NetworkProjectConfigアセット(Photon Fusionの大半の設定を行う場所)のWeaver Settingsセクションでは、以下の設定が可能です。
- Assemblies to Weave:アセンブリのリストで、その中にある- NetworkBehaviour実装のすべてのネットワークプロパティが、Fusionによって検査・処理されます。- NetworkBehaviourを含まないアセンブリを除外すると、コンパイル後処理時間を短縮できます。
- UseSerializableDictionary:ネットワークプロパティの初期値の格納に- Fusion.SerializableDictionaryを使用します。無効にすると、IL Weaverは- System.Generic.Dictionaryを使用します。- System.Generic.DictionaryはUnityではシリアライズ不可能ですが、独自のシリアライズシステム(例えばOdinなど)に対応します。
- NullChecksForNetworkedPropertis:有効にすると、IL Weaverは、各- NetworkBehaviourのすべてのネットワークプロパティに、自身の- NetworkObjectがアタッチされているかを検証するチェックを追加します。
- CheckRpcAttributeUsage:有効にすると、IL Weaverは、- RpcAttributeに対応していない型が使用されていないかをチェックします。すべての型がスキャンされるため、IL Weavingの時間が増加します。
- CheckNetworkedPropertiesBeingEmpty:有効にすると、IL Weaverは、ネットワークプロパティのgetter/setterが空になっているかをチェックします。
IL Weavingプロセスが実行される主な状況は、以下の2つです。
- 自動:Unityでプロジェクトのコードの変更が検知された後に、IL Weavingプロセスが起動します
- 手動:非常に稀な状況ですが、手動でFusion IL Weaverを実行する必要がある場合、Tools/Fusion/Run Weaverメニューアイテムからプロセスを起動できます