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
メニューアイテムからプロセスを起動できます