This document is about: FUSION 2
SWITCH TO

변화 감지

개요

네트워크 속성을 사용할 때 일반적인 사용 사례는 네트워크 속성 값이 변경될 때마다 코드를 실행하는 것입니다.

Fusion은 여러 가지 변화 감지 방법을 제공합니다:

렌더에서의 변화 감지: 변화가 감지될 때 실행되는 코드가 게임 플레이 시뮬레이션에 영향을 주지 않고, 시각적 목적으로만 존재하는 경우가 많습니다. 예로는 health 네트워크 속성이 변경될 때마다 UI 체력 바를 업데이트하거나, color 네트워크 속성이 변경될 때마다 플레이어의 메시 렌더러 색상을 업데이트하는 경우가 포함됩니다.

FixedUpdateNetwork에서의 변화 감지: 호스트/서버 모드에서는 변화 감지가 게임 플레이에 영향을 줄 때 필요합니다. 예를 들어, stamina 네트워크 속성이 50 미만으로 떨어질 때마다 플레이어의 이동 속도가 50% 감소하는 경우입니다. 이러한 경우 FixedUpdateNetwork에서 변화 감지를 실행하면 클라이언트 측 예측이 서버의 시뮬레이션과 일치하고 올바른 롤백을 허용합니다.

커스텀 변화 감지: 변화 감지는 사용자 지정 간격에서 수동으로 실행될 수 있습니다. 이는 고급 사용 사례를 제외하고는 거의 필요하지 않습니다. 변화 감지를 덜 빈번하게 실행하면 CPU 성능을 약간 향상시킬 수 있습니다.

공유 모드에서는 대부분의 경우 렌더 기반 변화 감지를 사용하는 것으로 충분합니다.

OnChangedRender

OnChangedRender 속성은 렌더 기반 변화 감지를 처리하는 가장 쉬운 방법입니다.

네트워크 속성에서 변화를 감지하려면 해당 속성에 OnChangedRender 속성을 추가하세요. 이 속성은 메서드 이름을 매개변수로 사용합니다. 제공된 메서드는 동일한 NetworkBehaviour에서 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>를 호출할 때 사용되는 타입은 Networked Property의 타입과 일치해야 합니다.

ChangeDetector

ChangeDetectorOnChangedRender 속성보다 더 유연한 기능을 제공합니다. 이를 통해 FixedUpdateNetwork에서 또는 사용자 지정 간격에서 ChangeDetection을 실행할 수 있습니다.

ChangeDetector는 고급 사용 사례를 위한 것입니다. ChangeDetector에 대한 문서는 고급 매뉴얼의 Network Buffers 페이지의 ChangeDetector 섹션에서 확인할 수 있습니다.

Back to top