This document is about: FUSION 2-SHARED
SWITCH TO

変更検知

概要

ネットワークプロパティの値が変更された場合に、任意のコードを実行したいケースがよくあります。

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>の型は、ネットワークプロパティの型と一致させる必要があります。

Back to top