各種のIDと使用方法

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

IDの説明

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

  • アプリケーションID(型: String構造体)

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

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

      注釈

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

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

    • Strix Unreal SDKでは、サーバーのアプリケーションIDに一致するものを、ゲームプログラムがInitialize Strix Network関数により提示します。

  • UID(型: 抽象クラスUID

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

      注釈

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

    • Strix Unreal SDKでは、UIDは主にStrix内部で使用します。ブループリントスクリプトがUIDを扱うことはめったにありません。しかし、StrixのC++ APIを通じて下位層の機能を使用する場合は、UIDを目にする機会が増えるかもしれません。

  • タイプID(型: Integer

    • タイプIDはStrixReplicatorがアッタッチされているアクターのタイプを識別します。

    • タイプIDの値は、該当するアクターのそれぞれに対して、開発中にUnrealエディター内で割り当てが行われます。

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

    • 詳しくはタイプIDを参照してください。

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

  • ネットワークオブジェクトID(型: 下記参照)

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

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

    • ネットワークオブジェクトIDは主にStrixが内部的に使用しますが、ブループリントスクリプト内でアクターの識別子として使用することもできます。これは、特にRPC呼び出しを行う際に便利です。(ネットワークオブジェクト関数 を参照してください。)

    • ネットワークオブジェクトIDは主としてStrixが内部で使用し、本来のデータ型は64ビット整数(Integer64)型です。しかし、ネットワークオブジェクトIDをブループリントスクリプトで扱う際には、そのデータ型はStrix Network Id構造体です。この構造体には、ブループリントで扱えるStringIdというメンバーがあり、ここにIDの文字列表現を保持しています。(必要であれば、C++を使用すると本来のint64型の値にもアクセスできます。)

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

    A single Actor instantiated twice and replicated
  • 主キー(型: 下記参照)

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

    • Strix Unreal SDKでは、以下のような重要なオブジェクトの主キーを、Idという名前のメンバーを通じて利用可能にしています。

      • ノード(ルームサーバー)を表すStrix Node構造体

      • ルームを表すStrix Room構造体

      • NodeRoomを表すStrix Node Room構造体

      • ルームメンバーを表すStrix Room Member構造体

      主キーは、検索を行う際に用いる条件や順序でprimaryKeyという名前のプロパティとしても利用できます。

    • 主キーは内部的には64ビット整数(Integer64)型のデータ型です。しかし、ブループリントスクリプトでIdメンバー変数として扱う場合には、データ型がInteger(32ビット整数)になります。

    • 内部では、Strixは上記以外のいくつかのオブジェクトにも主キーを割り当てており、下位層APIで利用できるC++のGetPrimaryKeyメンバー関数を利用してアクセスできます。オブジェクトによっては主キーを設定するSetPrimaryKeyメンバー関数を持っている場合もありますが、この関数はStrixの内部用途に限定したものです。下位層のC++ APIを利用する場合も、これらの関数を使用しないでください。

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

  • ルームID(型: 下記参照)

    • ルームIDは単一のルームサーバーにあるルームを識別します。これは実際には、ルームサーバー上に存在するルームオブジェクトの主キーです。

    • 異なるルームサーバー上にあるルームのルームIDには関係がなく、偶然同じ値になる場合があります。

    • ルームIDは内部では64ビット整数(Integer64)ですが、Room Idメンバー変数はIntegerです。

  • チャネルID(型: Integer

    • チャネルIDはルームサーバーとの間の通信路(コネクション)を識別します。

    • ここに示した他のIDと異なり、チャネルIDの実際の値はStrixが決めるわけではありません。ゲームで使用するそれぞれのチャネルに対して、スクリプトがチャネルIDの値を定義します。

      例えば、次のように定義することができます。

      • チャネルID 0はアクターの複製と同期に使用

      • チャネルID 1はマッチング中に一時的に使用

      • チャネルID 2は常時利用できるギルドテキストチャットに使用

      注釈

      チャネルIDとしては、0、1、2といった比較的小さな値を使用することをお勧めします。その方が2000000000のような大きな値よりも少しだけ効率が良いからです。しかし、値が連続している必要はありません。例えば、しばらくの間0、2、5を使用し、その後2は使用を停止して4と10の使用を開始する(そして1、3、6~9は使用しない)、といった使い方でも問題ありません。