Observables
값이 바뀌면 구독자에게 알려 줍니다. 점수와 그것을 보여주는 것들이, 일일이 찔러야 하는 목록 없이 발을 맞춥니다.
점수가 바뀌면 스코어보드를 다시 그립니다. 문이 열리면 세 가지가 반응합니다. 손으로 쓰면 필드 하나, 세터 하나, 찔러야 할 것들의 목록 하나, 그리고 누군가 하나를 빼먹는 순간 생기는 버그 하나가 됩니다.
Udonite Observables는 그 패턴을 평범한 C#으로 한 번만 써 둔 것입니다.
using Udonite.Observables;
public class Scoreboard : UdoniteBehaviour
{
public TextMeshProUGUI label;
private Observable<int> score = new Observable<int>();
public override void Start()
{
score.Subscribe(OnScoreChanged, true);
score.Value = 10;
}
private void OnScoreChanged(int value)
{
label.text = value.ToString();
}
}
같은 값을 다시 넣으면 아무에게도 알리지 않습니다. 그게 이 타입의 핵심입니다. 매 프레임 대입하는 behaviour는 콜백 한 바퀴가 아니라 비교 한 번으로 끝나고, 라벨을 다시 그리는 구독자가 바뀌지도 않은 라벨을 다시 그릴 일이 없습니다.
무엇이 들어 있나
| 타입 | 알리는 시점 |
|---|---|
Observable<T> |
값이 다른 값으로 설정될 때 |
ObservableList<T> |
요소가 추가, 제거, 교체되거나 전부 비워질 때 |
ObservableDictionary<TKey, TValue> |
키가 다른 값으로 설정되거나, 제거되거나, 전부 비워질 때 |
ISubscribable<T>는 읽기 쪽입니다. 이 타입으로 노출한 필드는 구독할 수는 있어도 쓸 수는 없습니다. 점수를 읽는 것과 점수를 바꿔도 되는 것의 차이입니다. 컬렉션들은 자기 자신에 대해 이 인터페이스를 구현하므로 셋 다 같은 방식으로 구독합니다.
다음에 볼 것
시작하기는 빈 behaviour에서 시작해 두 behaviour가 반응하는 값까지 갑니다.
레퍼런스는 세 타입의 모든 멤버와 각각이 무엇을 알리는지입니다.
알림 규칙은 월드를 올리기 전에 읽어 둘 만한 부분입니다. 알림 도중에 구독하거나, 구독을 해제하거나, 값을 되쓰면 어떻게 되는지, 그리고 그중 무엇을 Udon이 애초에 허용하지 않는지 다룹니다.