変更検知
概要
ネットワークプロパティの値が変更された場合に、任意のコードを実行したいケースがよくあります。
OnChangedRender
OnChangedRender属性は、最も簡単にRenderベースの変更検知を処理する方法です。
ネットワークプロパティにOnChangedRender属性を追加すると、変更が検知できるようになります。属性にはメソッド名を渡しますが、メソッドはNetworkBehaiourのvoidを返す関数である必要があります。
重要: クライアント上でオブジェクトが最初にスポーンした時にはOnChangedRenderは呼び出されません。オブジェクトを初期化する場合は、override Spawnedメソッド内で変更メソッドを呼び出すか、オブジェクトを手動で初期化してください。
例:
C#
public class Example : NetworkBehaviour
{
[Networked, OnChangedRender(nameof(OnColorChanged))]
public Color NetworkedColor { get; set; }
public Material material;
public void OnColorChanged()
{
material.color = NetworkedColor;
}
}
ハードコードされたメソッド名のかわりに、
nameof(OnColorChanged)からメソッド名を属性に渡します。これによって、メソッド名をリファクタリングした場合でも、属性に渡されるメソッド名が自動的に更新されます。変更前の値
変更前の値にアクセスすることも可能です。
C#
[Networked]
[OnChangedRender(nameof(CounterChanged))]
public int Counter { get; set; }
void CounterChanged(NetworkBehaviourBuffer previous)
{
var prevValue = GetPropertyReader<int>(nameof(Counter)).Read(previous);
Log.Info($"counter changed: {Counter}, prev: {prevValue}");
}
GetPropertyReader<T>の型は、ネットワークプロパティの型と一致させる必要があります。