This document is about: FUSION 2
SWITCH TO

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つです。

  1. 自動:Unityでプロジェクトのコードの変更が検知された後に、IL Weavingプロセスが起動します
  2. 手動:非常に稀な状況ですが、手動でFusion IL Weaverを実行する必要がある場合、Tools/Fusion/Run Weaverメニューアイテムからプロセスを起動できます
Back to top