各種の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
)UIDはunique 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(型: 下記参照)
ネットワークオブジェクトIDはStrixReplicatorがアッタッチされているアクターを識別しますが、レプリカをオリジナルと同一視します。
同じアクターのレプリカは全て、オリジナルのアクターも含めて、同一のネットワークオブジェクトIDを持ちます。他方、同じアクターを2回インスタンス化した場合には、同じクライアント上に作成された2つのレプリカは異なるネットワークオブジェクトIDを持ちます。両者は別のオブジェクトのレプリカだからです。
ネットワークオブジェクトIDは主にStrixが内部的に使用しますが、ブループリントスクリプト内でアクターの識別子として使用することもできます。これは、特にRPC呼び出しを行う際に便利です。(ネットワークオブジェクト関数 を参照してください。)
ネットワークオブジェクトIDは主としてStrixが内部で使用し、本来のデータ型は64ビット整数(Integer64)型です。しかし、ネットワークオブジェクトIDをブループリントスクリプトで扱う際には、そのデータ型はStrix Network Id構造体です。この構造体には、ブループリントで扱えるStringIdというメンバーがあり、ここにIDの文字列表現を保持しています。(必要であれば、C++を使用すると本来のint64型の値にもアクセスできます。)
ネットワークオブジェクトIDは、ネットワークインスタンスIDや、単にネットワークIDとも呼ばれます。
主キー(型: 下記参照)
主キーはサーバーが同種のオブジェクトを識別する識別子です。異なる種類のオブジェクト同士の主キーは無関係です。これはデータベースのテーブルの主キーと似ています。主キーというものの役割は常に同じですが、主キーが何を識別するのかはテーブルによって異なるわけです。
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は使用しない)、といった使い方でも問題ありません。