변수 복제

복제 편에서 설명했듯이 변수를 동기화하는 방법은 두 가지입니다.

참고

어떤 메서드를 이용하든 클래스는 StrixBehaviour에서 유래하며, StrixReplicator 요소는 스크립트가 연결되는 GameObject에 연결됩니다.

동기화 필드

이 변수를 클래스의 인스턴스 필드로 만들어 StrixSyncField 속성으로 표시해도 됩니다. StrixReplicator는 소유자 클라이언트의 원 개체에서 나온 표시된 필드의 값을 다른 클라이언트의 레플리카로 자동 동기화합니다. 필드는 직렬화가 가능해야 합니다.

[StrixSyncField]
public int MyValue = 10;

[StrixSyncField]
public int MySecondValue= 7;

이렇게 하면 개체 속 변수를 쉽게 동기화할 수 있지만, Strix Unity SDK는 리플렉션을 이용하여 이 필드들을 동기화합니다. 따라서 성능이 상대적으로 낮습니다.

On Serialization 메서드

리플렉션으로 필드의 값을 읽고 사용하는 대신 두 메서드, 즉 OnStrixSerializeOnStrixDeserialize를 오버라이드한 후 스트링이나 정수 키를 이용하여 값을 수동으로 읽고 써도 됩니다.

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 또는 스크립트가 비활성화되면 동기화는 일어나지 않습니다.