지속성
플레이어의 진행 상황 저장을 열여섯 가지 메서드가 아니라 두 개의 동사로. 타이밍 함정도 대신 처리합니다.
VRChat은 방문과 방문 사이에 플레이어에 대한 것을 기억할 수 있습니다. 그것을 위해 주어지는 API는 타입마다 메서드가 갈라진 키-값 저장소입니다. SetInt, GetInt, TryGetInt가 있고, 같은 세 개가 열여섯 가지 타입마다 다시 있습니다.
거기에는 조용히 어긋나는 것이 셋 있습니다.
어떤 메서드가 그 키를 썼는지 기억해야 합니다. SetInt로 쓴 "level"을 GetString으로 읽어도 아무 불평이 없습니다. 빈 문자열이 돌아오고 그대로 진행됩니다.
아무도 쓰지 않은 키에 대해 GetInt는 0을 돌려줍니다. 저장된 0도 똑같이 생겼습니다. 새 플레이어에게 시작 자금을 주는 상점은 처음 온 사람과 다 써버린 사람을 구별할 수 없습니다.
Start 시점에는 저장 데이터가 아직 없습니다. 플레이어가 들어온 조금 뒤에 도착합니다. 일찍 읽으면 오류가 아니라 기본값이 오므로, 복원할 것이 없는 에디터에서는 완벽하게 동작하고, 진행 상황을 가진 진짜 플레이어를 처음 온 사람처럼 맞이합니다.
이 패키지는 두 개의 동사와 하나의 기반 클래스입니다.
public class Shop : SaveBehaviour
{
private int coins;
public override void OnSaveReady()
{
coins = Save.Get("coins", 100);
}
public void Buy(int price)
{
coins = coins - price;
Save.Set("coins", coins);
}
}
나머지는 값이 정합니다. Save.Set("name", "ada")는 문자열을, Save.Set("coins", 5)는 정수를 저장하며, 어느 쪽인지 당신이 지목하지 않아도 됩니다. 읽을 때는 "아무것도 저장되어 있지 않을 때의 값"을 함께 줍니다. 그것은 TryGet 아래의 if에 썼을 바로 그 값이고, 그것을 반드시 쓰게 하는 것이 "한 번도 저장되지 않음"과 "0으로 저장됨"을 갈라놓습니다.
OnSaveReady는 읽는 것이 의미를 갖는 유일한 순간에 실행됩니다. 불러오기를 Start가 아니라 거기에 두면 순서를 기억할 필요가 사라집니다.
들어 있는 것
Save |
Set과 Get. VRChat이 저장하는 모든 타입에 대해 |
SaveBehaviour |
데이터가 진짜가 된 순간에 실행되는 OnSaveReady |
PlayerObjects |
어떤 플레이어의 것인 사본을 찾기 |
Storage |
그 플레이어의 용량을 월드가 얼마나 썼는지 |