변수 복제¶
복제 편에서 설명했듯이 변수를 동기화하는 방법은 두 가지입니다.
참고
어떤 메서드를 이용하든 클래스는 StrixBehaviour
에서 유래하며, StrixReplicator
요소는 스크립트가 연결되는 GameObject
에 연결됩니다.
동기화 필드¶
이 변수를 클래스의 인스턴스 필드로 만들어 StrixSyncField
속성으로 표시해도 됩니다. StrixReplicator
는 소유자 클라이언트의 원 개체에서 나온 표시된 필드의 값을 다른 클라이언트의 레플리카로 자동 동기화합니다. 필드는 직렬화가 가능해야 합니다.
[StrixSyncField]
public int MyValue = 10;
[StrixSyncField]
public int MySecondValue= 7;
이렇게 하면 개체 속 변수를 쉽게 동기화할 수 있지만, Strix Unity SDK는 리플렉션을 이용하여 이 필드들을 동기화합니다. 따라서 성능이 상대적으로 낮습니다.
On Serialization 메서드¶
리플렉션으로 필드의 값을 읽고 사용하는 대신 두 메서드, 즉 OnStrixSerialize
와 OnStrixDeserialize
를 오버라이드한 후 스트링이나 정수 키를 이용하여 값을 수동으로 읽고 써도 됩니다.
public int MyValue = 10;
public int MySecondValue = 7;
public override void OnStrixSerialize(StrixSerializationProperties properties)
{
base.OnStrixSerialize(properties);
properties.Set("MyValue", MyValue);
properties.Set(-1, MySecondValue);
}
public override void OnStrixDeserialize(StrixSerializationProperties properties)
{
base.OnStrixDeserialize(properties);
properties.Get("MyValue", ref MyValue);
properties.Get(-1, ref MySecondValue);
}
참고
StrixSerializationProperties
의 속성 키는 복제된 속성의 식별자 역할을 합니다.
각 속성에는 (스트링, 정수를 불문하고) 고유한 키 값을 부여하여 표시해야 합니다. 두 속성에 한 키를 이용하면 (클래스가 달라도 같은 GameObject
에 연결한다면) 변수 동기화는 원하는 대로 일어나지 않고 Strix Unity SDK에서 예외가 발생합니다.
정수 키를 이용할 경우, 키는 음수(0보다 작은 값)여야 합니다. STRIX가 자체 목적으로 양의 정수 키를 내부에서 이용하기 때문입니다.
애니메이션 전송 속도¶
두 경우 모두 sendRate
의 값에 따라 일정한 간격으로 동기화가 자동 호출됩니다. sendRate
의 값은 초당 동기화가 몇 회 일어나는지를 표시한 것입니다. 또, GameObject 또는 스크립트가 비활성화되면 동기화는 일어나지 않습니다.