시작하기

값을 하나 들고, 그 값에 반응하고, 다른 behaviour와 공유하기까지.

업데이트 2026-09-07

설치

먼저 VCC(VRChat Creator Companion)를 통해 Unity 프로젝트에 observables 패키지를 추가합니다. 프로젝트의 vccproject.json을 열고 패키지를 추가하거나, VCC 인터페이스를 사용해 직접 설치하세요.

설치 후 패키지는 프로젝트에서 사용 가능하며 아래의 observables API를 사용하기 시작할 수 있습니다.

값 들고 있기

Observable<T>는 여느 필드와 다르지 않습니다. 선언한 자리에서 만들어 두면 누가 구독하기 전에 이미 존재합니다.

using Udonite.Observables;
using Udonite;
using UnityEngine;

public class Match : UdoniteBehaviour
{
    private Observable<int> score = new Observable<int>();

    public void Award()
    {
        score.Value = score.Value + 1;
    }
}

아직 아무 일도 일어나지 않습니다. 듣고 있는 쪽이 없으니까요.

반응하기

구독자는 값을 받는 평범한 메서드입니다.

public override void Start()
{
    score.Subscribe(OnScoreChanged, true);
}

private void OnScoreChanged(int value)
{
    label.text = value.ToString();
}

true는 알아 둘 만합니다. 이 핸들러만 지금 이 순간의 값으로 즉시 호출합니다. 늦게 합류한 behaviour가 따라잡는 방법입니다. 이게 없으면 핸들러는 다음 변경까지 기다리고, 첫 득점 뒤에 시작한 스코어보드는 두 번째 득점 전까지 아무것도 보여 주지 않습니다.

다른 behaviour와 공유하기

옵저버블은 객체이므로 다른 behaviour가 같은 것을 들 수 있습니다.

public class Announcer : UdoniteBehaviour
{
    public Match match;

    public override void Start()
    {
        match.Score.Subscribe(OnScoreChanged, true);
    }

    private void OnScoreChanged(int value) { /* ... */ }
}

Observable<int> 대신 ISubscribable<int>로 노출하면 아나운서는 구독은 하되 설정은 못 합니다.

public ISubscribable<int> Score => score;

동기화가 아니라 로컬입니다

옵저버블을 바꾸면 클라이언트의 구독자에게만 전달됩니다. 이 패키지에는 네트워크 기능이 없습니다.

값을 공유하려면 평소대로 동기화하고, 그 콜백에서 옵저버블을 움직이세요.

private Synced<int> syncedScore = new Synced<int>();

public override void Start()
{
    syncedScore.Subscribe(OnScoreArrived);
}

private void OnScoreArrived(int value)
{
    score.Value = value;
}

같은 값을 넣으면 아무에게도 알리지 않으므로, 점수가 그대로인 역직렬화는 비교 한 번으로 끝나고 콜백은 돌지 않습니다.

다음에 볼 것

알림 규칙은 알림 도중의 구독, 구독 해제, 쓰기를 다룹니다. Udon이 아예 거부하는 한 가지를 포함해서요.

문제가 발생했습니다 새로 고침