Network Project Config
概要
Network Project Configは、Photon Fusionを導入したプロジェクトに影響を与える様々な情報やパラメーターを保持するアセットです。
- バージョン
- モード
- デフォルトのプレイヤー数
- ネットワーク状況のテスト
- 暗号化
- プレハブ情報の表示
このアセットはAssets/Photon/Fusion/Resources/NetworkProjectConfig.fusionにあります。UnityエディターのトップメニューのTools > Fusion > NetworkProjectConfigからアクセスすることもできます。アセットを変更した後は適用する必要があるため、下部の「Apply」ボタンを押すか、変更を保存する確認ダイアログを承認してください。

Fusion Version
このセクションでは、現在使用中のFusionのバージョンが表示されます。ドロップダウンを展開すると、Fusionが使用しているダイナミックリンクライブラリ(DLL)の詳細が表示されます。
Physics
Fusion 2.1.x以降から、Physics Forecastを有効にすることで、Rigidbodyに対するNetworkTransformの外挿が可能になります。これによって、オブジェクトにローカル時間を適用して、すべてのクライアント上でスムーズなインタラクションを行うことができます。
Miscellaneous
このセクションでは、Fusionのプロジェクトに関する補助的なパラメーターを設定できます。
Enqueue Incomplete Synchronous Spawns:有効にすると、未完了の同期スポーン(Addressablesなど)は、例外をスローするかわりに、キューに追加されます。これはFusion.NetworkSpawnStatus.Queuedを返し、次のフレームでオブジェクトのスポーンを試みます。Fusion 1.xからの移行時に、有効にすると便利です。Invoke Render In Batch Mode:有効にすると、Unityのバッチモード再生時にFusion.SimulationBehaviour.Renderコールバックが呼び出されます。バッチモードで実行するには、Unityのコマンドライン引数に-batchmodeを渡します。バッチモードで動作するヘッドレスサーバーを使用する場合は、無効にすると便利です。詳細はUnityのバッチモードをご覧ください。Network Id Is Object Name:有効にすると、新規にスポーンしたオブジェクトの名前にネットワークIDが追加され、[Network Id] Original Object Nameのようになります。Hide Network Object Inactivity Guard:NetworkObjectが一度もアクティブにならずに破棄された場合に発生する問題を回避するため、NetworkObjectInactivityGuardという名前のゲームオブジェクトがNetworkObjectのOnDestroyを監視します。このオプションを有効にすると、NetworkObjectInactivityGuardはヒエラルキーに表示されません。
Allow Client Server Modes in WebGL:共有モードにはホストモードのようなWebGLの制限がないため、この設定は使用しません。
Simulation
備考:共有モードでは、ティックレート/送信レートの設定値の上限が32になっています!Fusion 2では、両方の値が固定(それぞれ32/16)で変更できませんでしたが、Fusion 2.1以降では制限範囲内で調整できるようになりました。
Client & Server Tick Rate:クライアント/サーバーが更新されるティックレートです。以前は選択肢が限定されていましたが、Fusion 2.1以降では8~256の間で任意の値が設定できるようになりました。Client Send Rate:クライアントがサーバーへデータを送信する頻度で、1~8の範囲で表されます。1の場合は毎ティック、2の場合は2ティックに1回データが送信されることを意味します。利用可能な値(結果的な送信レート)は、選択したティックレートで割り切れるものに限定されます。Server Send Rate:サーバーがクライアントへデータを送信する頻度です。この値には、Client Send Rateと同じオプションと制限が適用されます。
Input Receive Buffer Settingsによって、クライアントがサーバーへどれだけ早く入力を送信するかを制御できます。
Max Late Inputs:クライアントは、この値のジッターを除いたすべてのパケットをカバーできるだけの十分な余裕をもって、入力を早めに送信します。これは本質的にジッターに対するカットオフです。- この値が3%の場合、クライアントはジッター値の97パーセンタイル(最悪の3%を除外)を使用して、送信の早さを決定します。
Redundant Inputs:クライアントは、この数の入力パケットが連続して失われた場合でも、入力が時間通りに到着するだけ十分に早く入力を送信します。これは本質的にMax Late Inputsのパーセンテージ値に対する乗数です。Input Receive Buffer Delay Added:クライアントは、この値に相当するミリ秒/ティックの分だけ、さらに入力を早めに送信します。
Input Delay Settingsによって、入力の送信に対してクライアントのローカル時間をどれだけ遅らせるかを制御できます。
Minimum Input Delay:プレイヤーの入力遅延は、少なくともこの値(ミリ秒/ティック)の分だけ遅れます。Clients Can Add Input Delay To Limit Resims:有効にすると、予測ティック数がClient Max Resims Per Frameを下回るだけの十分な入力遅延を追加します。Client Max Resims Per Frame:1フレーム内で発生する最大予測ティック数です。これが、クライアントが予測できる範囲の上限となります。
Input delayは、Server Mode/Host Modeのみでサポートされます。
State Receive Buffer Settingsによって、スナップショット受信に対してクライアントのローカル時間をどれだけ遅らせるかを制御できます。
Max Late Snapshots:クライアントは、この値のジッターを除いたすべての時間をカバーできるだけ十分な余裕をもって、スナップショット補間を遅延させます。これは本質的にジッターに対するカットオフです。- この値が3%の場合、クライアントはジッター値の97パーセンタイル(最悪の3%を除外)を使用して、遅延時間を決定します。
Redundant Snapshots:クライアントは、この数のスナップショットのパケットが連続して失われた場合でも、スムーズな状態が維持されるだけ十分に長くスナップショット補間を遅延させます。これは本質的にMax Late Snapshotsのパーセンテージ値に対する乗数です。State Receive Buffer Delay Added:クライアントは、この値に相当するミリ秒/ティックの分だけ、さらにスナップショット補間を遅延させます。
さらなる詳細は、時間の同期をご覧ください。
Encryption
FusionのプロジェクトのEncryption(暗号化)の有効/無効を切り替えます。Photon App SettingsのEncryption Modeを合わせて更新する必要があることに注意してください。
詳細は接続の暗号化をご覧ください。
Network Conditions
この設定で、異なるネットワーク状況(遅延やパケットロス)をシミュレーションしたりテストしたりすることが可能です。
Enabled:有効にすると、以下のオプションが表示されますDelay Shape:遅延の波形パターンを設定しますNoiseSineSquareTriangleSawReverse Saw
Delay Min:最小の遅延秒数(0~0.5)Delay Max:最大の遅延秒数(0~0.5)Delay Period:遅延の周期の秒数Delay Threshold:波形パターンの値がしきい値(0~1)未満になると、遅延はDelay MinになるAdditional Jitter:波形パターンから遅延の値が決定された後、その値にランダムな値(0~設定値)が追加されるLoss Chance Shape:ロスの波形パターンを設定します(選択肢はDelay Shapeと同じです)Loss Chance Min:パケットロス率の最小値(0(0%)~1(100%))Loss Chance Max:パケットロス率の最大値(0(0%)~1(100%))Loss Chance Threshold:波形パターンの値がしきい値(0~1)未満になると、パケットロス率はLoss Chance MinになるLoss Chance Period:パケットロス率の周期の秒数Additional Loss:波形パターンからパケットロス率の値が決定された後、その値にランダムな値(0~正規化された設定値)が追加される
遅延とロスの設定は、値を秒数とパーセンテージで決定すること以外はほぼ同じで、パケットロス率は0%から100%でシミュレーションされます。
Heap
Fusionで使用するメモリの事前割り当て量を定義して、メモリ管理を最適化し、パフォーマンスを向上できます。
Page Shift:各Heap Pageのサイズ(1KB~256KB)を指定します。メモリ割り当ての粒度に影響し、サイズに比例してメモリ割り当て量は増加します。Page Count:ヒープの初期ページ数(16~4096)を指定します。初期の合計メモリ割り当て量に影響します。
Weaver Settings
Fusion IL Weaverに影響する設定で、低レベルなネットコードを生成してAssembly-CSharp.dllに注入するために使用されます。
Assemblies to Weave:IL Weaver対象にするアセンブリのリストで、大文字小文字は区別しません。デフォルトで、以下が含まれます。Fusion.UnityAssemble-CSharpAssembly-CSharp-firstpassFusion.Addons.Physics(プロジェクトでFusionの物理システムを使用する場合)
Use Serialized Dictionary:有効にすると、ネットワークプロパティの初期値の格納にFusion.SerializableDictionaryを使用します。無効にすると、IL WeaverはSystem.Generic.Dictionaryを使用します。System.Generic.DictionaryはUnityではシリアライズ不可能ですが、Odinなどの独自のシリアライズシステムに対応します。Null Checks for Networked Properties:有効にすると、IL Weaverは、ネットワークプロパティを持つFusion.NetworkBehaviourがFusion.NetworkObjectに紐付けられているかのチェックを追加します。Check Rpc Attribute Usage:有効にすると、IL Weaverは、Fusion.RpcAttributeに対応していない型が使用されていないかをチェックします。例えば、Fusion.RpcAttributeがUnity.MonoBehaviourのメソッドに追加されていた場合、ログに「RPCはFusion.NetworkBehaviour/Fusion.SimulationBehaviourにのみ追加できる」旨の警告が表示されます。すべての型をスキャンする必要があるため、IL Weavingとコンパイル時間が増加します。詳細はRPCをご覧ください。Check Networked Properties Being Empty:有効にすると、不適切なFusion.NetworkedAttributeでプロパティを定義した時に、警告が表示されるようになります。以下のように、プロパティのgetter/setterは空にする必要があります。
C#
[Networked]
public int NetworkedProperty {get; set;}
詳細はネットワークプロパティをご覧ください。
Prefabs
プレハブをアンロードする挙動を設定できます。
Unload Prefab On Releasing Last Instance:有効にすると、インスタンスがすべて解放された時に、プレハブがアンロードされますUnload Prefabs On Shutdown:有効にすると、シャットダウン時にすべてのプレハブがアンロードされます
プレハブのアンロードは、メモリ使用量の最適化目的では不要ですが、必要に応じて再ロードしたい場合には有効です。
Auto-Generated
自動生成された情報が表示されるセクションです。
Show Network Prefabs Inspector:プロジェクト内で、Fusion.NetworkObjectコンポーネントが付いている(Fusion.NetworkObject.IsSpawnableが有効になっている)プレハブを確認できるウインドウが開きます。Prefabs:プロジェクト内の、NetworkObjectプレハブがリストされているドロップダウンリストです。このリストを直接更新することはできませんが、実行時にFusion.NetworkPrefabTable.TryAddSourceから、追加のプレハブを登録できます。Behaviour Meta:プロジェクト内の、すべてのFusion.SimulationBehaviourのメタ情報(実行順など)を含むリストです。
Network Prefabs Inspector
前述した通り、Network Prefabs Inspectorでは、Fusion.NetworkObjectコンポーネントが付いている(Fusion.NetworkObject.IsSpawnableが有効になっている)プレハブを詳細に確認できます。

ウインドウのメインツールバーには、以下の機能があります。
Refresh:リストをリフレッシュし、新しいプレハブが追加された場合はリストが更新されますSync Selection:有効にすると、Unityで選択したプレハブアセットが、ウインドウでハイライトされますLoaded Only:有効にすると、ロード済みのプレハブのみが表示されます
ウインドウの各行は異なるプレハブを表し、各列は以下を表します。
State:プレハブがロード済みかどうかを示しますType:プレハブの種類(ロード方法)を示しますR:ResourcesフォルダにあるプレハブですSL:Resourcesフォルダ外にある静的なプレハブですA:Addressableでロードされるプレハブです
PrefabId:Fusionによってプレハブに割り当てられたIDですPath:プレハブのファイルパスです