여러 가지 ID 이용하는 방법

Strix는 여러 가지 ID를 이용합니다. 그중에는 Strix 애플리케이션에서 사용하는 것도 있고 주로 Strix에서 내부적으로 사용하는 것도 있습니다. 이 가이드 문서에서는 그중에서 주요 ID와 활용 사례를 설명합니다.

ID 설명

다음은 Strix Unity SDK에서 사용할 수 있는 주요 ID를 요약한 목록입니다.

  • 애플리케이션 ID(타입: string)

    • 애플리케이션 ID는 애플리케이션(게임 타이틀)을 표시합니다. 대개 Strix 게임 클라이언트는 한 애플리케이션 ID만 관리합니다.

    • Strix 서버와 클라이언트는 애플리케이션 ID를 이용하여 대화 대상이 되는 동료를 확인합니다.

      참고

      애플리케이션 ID는 비밀번호와 같은 것입니다. 애플리케이션 ID를 공개해서는 안 됩니다.

    • Strix Cloud를 이용할 때는 애플리케이션 ID가 자동으로 생성되어 애플리케이션 대시보드에 표시됩니다.

    • Strix Unity SDK에서는 애플리케이션 ID를 StrixNetwork 싱글톤의 applicationId 속성으로 이용할 수 있습니다.

  • UID(타입: UID)

    • UIDunique identifier의 약자입니다. 여러 가지 개체를 표시하며, 네트워크에서(클러스터 도메인 안에서) 중복되지 않습니다.

      참고

      UID는 user id의 약자가 아닙니다. 사용자(플레이어)마다 UID가 따로 있으나, UID가 사용자와 무관한 개체를 나타내기도 합니다.

    • UID는 단순한 이 아닙니다. Strix Unity SDK에서 UID 타입은 인터페이스(이름이 “I”로 시작하지는 않지만)로 정의되며 그것을 구현하는 클래스도 몇 가지나 됩니다. UID 개체를 클라우드 애플리케이션의 한 클래스로 격하하는 것은 (또는 격하하려고 하는 것은) 바람직하지 않습니다.

    • 모든 UID 구현 클래스는 호환되는 GetHashCode() 메서드로 Equals(object) 메서드를 (자연스럽게) 구현합니다. 또한, UID 구현 시 ToString() 메서드는 UID 구현 클래스 중에서 반드시 UID를 나타내는 고유한 스트링을 리턴합니다.

      스크립트는 특정 UID 개체의 동등성을 확인할 수 있으나, 그 이상은 하지 않는 것이 좋습니다.

      참고

      UID 타입은 인터페이스이므로 동등성 연산자 (==)는 그것 때문에 오버로드되지 않습니다. 두 UID 개체를 비교할 때 == 또는 !=는 사용할 수 없습니다.

    • UID는 Strix Unity SDK에서 여러 맥락과 여러 개체에 사용할 수 있습니다.

  • 개체 타입 (타입: int)

    • 개체 타입은 StrixReplicator가 연결되어 있는 게임 개체의 한 타입입니다.

    • 개발 중에 Unity Editor에서 게임 개체마다 개체 타입 값이 하나씩 할당됩니다. StrixReplicator는 레플리카를 만들 때 개체 타입을 이용하여 개체를 구별합니다.

    • StrixReplicator가 연결되는 개체가 프리팹일 경우, 그 프리팹에서 인스턴스화되는 개체는 모두 개체 타입이 같습니다.

    • 개체 타입은 주로 Strix 내부용입니다. StrixReplicator 요소의 objectType 속성으로 이용할 수 있습니다.

    • 개체 타입은 타입 ID라고도 합니다.

  • 네트워크 인스턴스 ID(타입: long)

    • 네트워크 인스턴스 IDStrixReplicator 요소가 연결되는 게임 개체 인스턴스로 레플리카와 오리지널을 같게 하는 역할을 합니다.

    • 한 개체의 레플리카는 그 오리지널을 포함하여 모두 네트워크 인스턴스 ID가 같습니다. 반대로, 같은 프리팹을 두 번 인스턴스화하면 한 클라이언트에서 만들어진 두 레플리카는 네트워크 인스턴스 ID가 다릅니다. 서로 다른 두 개체의 레플리카이기 때문입니다.

    • 네트워크 인스턴스 ID는 주로 Strix 내부용입니다. StrixReplicator 요소의 networkInstanceId 속성으로 이용할 수 있습니다.

    • 네트워크 인스턴스 ID는 네트워크 개체 ID라고도 하며, 줄여서 네트워크 ID로 부르기도 합니다.

    A single prefab instantiated twice and replicated
  • 기본 키(타입: long)

    • 기본 키는 서버가 개체를 식별할 때 이용하는 식별자입니다. 개체별 기본 키는 서로 관련이 없습니다. 마치 데이터베이스 표의 기본 키와 같습니다. 기본 키의 역할은 같지만 표마다 그것이 식별하는 대상은 다르기 때문입니다.

    • Strix 개체 중에는 안에 기본 키가 있는 것도 많으며, 그 기본 키는 대개 GetPrimaryKey라는 메서드로 이용할 수 있습니다.

    • 기본 키를 설정하는 SetPrimaryKey라고 하는 메서드가 있는 개체도 있습니다. 그러나 그런 개체는 Strix 내부용이며 스크립트에 사용할 수 없습니다.

    • 기본 키를 이용할 경우, 서로 무관한 두 개체의 기본 키가 우연히 같을 수 있음을 유념해야 합니다. 두 기본 키는 서로 같은 종일 때만 비교가 가능합니다.

      참고

      이 점은 UID와 다릅니다. 종이 다른 두 개체의 UID는 절대로 서로 같지 않습니다.

  • 방 ID(타입: long)

    • 방 ID는 한 방 서버 안에서 방을 표시하는 역할을 합니다. 그 방 서버에서는 사실상 방 개체의 기본 키가 되는 것입니다.

    • 방 서버가 다르면 방의 ID는 서로 관련이 없으며, 우연히 값이 서로 같을 수 있습니다.

RoomJoinNotified에서 입장한 멤버 식별하기

새 멤버가 방에 입장하면 RoomJoinNotified 이벤트가 일어나며, 이벤트 핸들러가 호출됩니다.

이 핸들러는 다음과 같은 시그니처를 갖습니다.

void RoomJoinNotificationEventHandler(
  NotificationEventArgs<RoomJoinNotification<CustomizableMatchRoom>> notification)

notification 인수에서 다음과 같이 여러 가지 ID를 가져올 수 있습니다.

  • notification.Data.GetPrimaryKey()는 새 멤버가 입장한 방, 즉 현재 클라이언트가 있는 방의 기본 키를 리턴합니다.

  • notification.Data.GetNewlyJoinedMember().GetPrimaryKey()는 방에 들어온 멤버의 기본 키를 리턴합니다.

  • notification.Data.GetNewlyJoinedMember().GetUid()는 방에 들어온 멤버의 UID를 리턴합니다.