各種のIDと使用方法

StrixではさまざまなID(識別子/識別番号)を使用します。そのうちいくつかはStrixアプリケーションが使用するためのものですが、主にStrixが内部で使用するためのものもあります。このハウツーでは代表的なIDについて説明し、使用法の例を示します。

IDの説明

以下の一覧にStrix Unity SDKで利用できる主要な識別子を示します。

  • アプリケーションID(型: string

    • アプリケーションIDはアプリケーション(ゲームタイトル)を識別します。通常、StrixのゲームクライアントはアプリケーションIDを1つのみ扱います。

    • Strixサーバーとクライアントは、アプリケーションIDを用いて自分が正しい相手と通信していることを確認します。

      注釈

      アプリケーションIDはパスワードのようなものです。アプリケーションIDを世間に公開しないでください。

    • Strix Cloudを使用する場合は、アプリケーションIDが自動生成され、アプリケーションダッシュボードに提示されます。

    • Strix Unity SDKでは、アプリケーションIDはStrixNetworkシングルトンのapplicationIdプロパティにあります。

  • UID(型: UID

    • UIDunique identifier(一意識別子)を意味します。これはさまざまなオブジェクトを識別し、(単一のクラスターの範囲内では)ネットワーク上で一意的です。

      注釈

      UIDは「ユーザーID」ではありません。各ユーザー(プレイヤー)には自分のUIDが割り当たりますが、ユーザーとは無関係なオブジェクトを識別するUIDもあります。

    • UIDは単純な「値」ではありません。Strix Unity SDKでは、UID型は(名前が「I」から始まっていませんが)インターフェイスとして定義されており、これを実装する具象クラスがいくつかあります。クライアントアプリケーションでUIDオブジェクトを具象クラスにダウンキャストすること (また、ダウンキャストが必要になるようなことを試みること) はお勧めできません。

    • UIDを実装する全てのクラスは(当然ですが)、Equals(object)メソッドと、それと互換性のあるGetHashCode()メソッドを実装しています。また、UIDを実装するクラスのToString()メソッドは、UIDを実装する全てのクラスにまたがってUIDを識別する一意文字列を返すことを保証しています。

      スクリプトではUIDオブジェクトの等価性を判定することができますが、それ以上の操作を行うことは望ましくありません。

      注釈

      UID型はインターフェイスなので、この型に対する等価演算子(==)はオーバーロードされていません。2つのUIDオブジェクトを比較する際には、「==」や「!=」を使用してはいけません。

    • Strix Unity SDKでは、さまざまな状況でさまざまなオブジェクトのためのUIDを使用しています。

  • オブジェクトタイプ(型: int

    • オブジェクトタイプはStrixReplicatorがアッタッチされているゲームオブジェクトのタイプを識別します。

    • オブジェクトタイプの値は、該当するゲームオブジェクトのそれぞれに対して、開発中にUnityエディター内で割り当てが行われます。StrixReplicatorは、レプリカを作成する際にオブジェクトタイプを用いてオブジェクトを区別します。

    • StrixReplicatorがアタッチされているオブジェクトがプレハブである場合、そのプレハブからインスタンス化された全てのオブジェクトは同一のオブジェクトタイプになります。

    • オブジェクトタイプは主としてStrixが内部で使用します。StrixReplicatorコンポーネントのobjectTypeプロパティとして利用できます。

    • オブジェクトタイプはタイプIDとも呼ばれます。

  • ネットワークインスタンスID(型: long

    • ネットワークインスタンスIDStrixReplicatorがアッタッチされているゲームオブジェクトを識別しますが、レプリカをオリジナルと同一視します。

    • 同じオブジェクトのレプリカは全て、オリジナルのオブジェクトも含めて、同一のネットワークインスタンスIDを持ちます。他方、同じプレハブを2回インスタンス化した場合には、同じクライアント上に作成された2つのレプリカは異なるネットワークインスタンスIDを持ちます。両者は別のオブジェクトのレプリカだからです。

    • ネットワークインスタンスIDは主としてStrixが内部で使用します。StrixReplicatorコンポーネントのnetworkInstanceIdプロパティとして利用できます。

    • ネットワークインスタンスIDは、ネットワークオブジェクトIDや、単にネットワークIDとも呼ばれます。

    A single prefab instantiated twice and replicated
  • 主キー(型: long

    • 主キーはサーバーが同種のオブジェクトを識別する識別子です。異なる種類のオブジェクト同士の主キーは無関係です。これはデータベースのテーブルの主キーと似ています。主キーというものの役割は常に同じですが、主キーが何を識別するのかはテーブルによって異なるわけです。

    • 内部に主キーを持つようなStrixのオブジェクトが多数あります。主キーを持つ場合、それはGetPrimaryKeyという名前のメソッドによって参照できます。

    • オブジェクトによっては主キーを設定するSetPrimaryKeyメソッドを持っている場合もありますが、この関数はStrixの内部用途に限定したものです。ご自分でお書きになるスクリプトでは使用しないでください。

    • 主キーを参照する場合には、種類の異なる無関係なオブジェクトの主キーが偶然同じ値になる場合がある点に注意してください。2つの主キーを比較できるのは、両者が同じ種類であるときのみです。

      注釈

      この点はUIDと異なります。異なる種類のものの2つの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を返します。