変更検知
概要
ネットワークプロパティの値が変更された場合に、任意のコードを実行したいケースがよくあります。
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>
の型は、ネットワークプロパティの型と一致させる必要があります。