接続¶
ログインマップを調べることから探索を始めましょう。
[コンテンツブラウザ] を開きます。
Loginフォルダーの中にあるLoginLevelを開きます。
[Play] を押し、ログインメニューを起動します。
認証を有効にした場合には、このログインメニューでログインすることになります。このサンプルはそうなっていないので、代わりに好きなユーザー名を入力します。これがプレイヤーの名前になります。プレイヤー名に加えて、ホスト名とアプリケーションIDも追加する必要があります。ご自分のサーバーのホスト名(マスターホスト名と呼ばれています)はStrix Cloudのアプリケーションダッシュボードの [サーバー数] タブにあります。アプリケーションIDは [詳細情報] タブです。一度入力すると、ホスト名とアプリケーションIDは、次回ゲームを起動するまで保存されます。[ログイン] をクリックしてメインメニューに移動します。
メインメニューには、いくつかのクイック起動ボタンがあります。各ボタンは選択したレベルを起動しますが、ランダムなルームに参加するか、ルームが存在しない場合は作成します。これらのボタンを使用して、確認したいレベルに素早く戻ります。クイック起動ボタン以外に、オプションメニューでオプションを設定したり、ログインに戻ったり、サーバーブラウザーにアクセスしたりできます。このチュートリアルでは、サーバーブラウザーに移動しましょう。
サーバーブラウザーの画面には、現在のルームのリストといくつかのフィルター、そして [Join]、[Join Random]、[Create] という選択肢があります。現時点ではルームがないので、[Create] ボタンをクリックして作成しましょう。
ルームの作成ページにはオプションが少しあります。オプションはそのままにして、[Create] をクリックしましょう。すると、最初のマップに移動します。2人目のプレイヤーの画面では、サーバーブラウザーを再表示すると、新しく作ったルームがありそこに参加できるはずです。
マップで遊んでみる前に、Strixが最初のルームの検索と接続をどのように実行するかを見てみましょう。ゲームを停止し、最上位にあるMenuWidgetsフォルダーの中のLoginウィジェットを開きます。
このウィジェットのグラフを表示しましょう。ログインボタンを離すとユーザーの入力を入力変数に集めることが分かるでしょう。ゲーム内で最初に呼び出すべきStrixの関数はInitialize Strix Networkです。この関数はアプリケーションIDを受け取ります。しかし、プレイヤーはログインボタンを何回かクリックするかもしれないため、代わりにStop Strix Network関数から始めることにします。(Stop Strix Networkは、ネットワークが開始していないときには何もしません。)
この後、Is Master Server Connected関数でマスターサーバーと接続しているかどうかを確認し、接続されていない場合は接続を試みます。Strixの多くの関数はコールバックを受け取りますが、ここでは成功と失敗のコールバックを使います。接続すると次の画面に進み、そうでなければエラーを出力します。
Strixのネットワーク機能を使用するには、マスターサーバーに接続している必要があります。この接続をどこで行うかはあなた次第ですが、ユーザー名とパスワードを使用するでしょうから、ログイン画面が適切でしょう。Strixでは、ネットワークを初期化する際にHTTPアクセストークンを受け取ることができますが、これを使えばログイン機能を統合できます。認証の設定はStrix Cloudのページで行います。
メインメニューとオプションのウィジェットはStrixに関連していないため省略します。ServerBrowserRoomItemとRoomItemWidgetを開いてください。
これらのウィジェットは、サーバーブラウザーのルームアイテムを表します。ServerBrowserRoomItemには、そのアイテムに関するStrixのNodeRoom情報が含まれています。RoomItemWidgetにはアイテムの視覚的表現が含まれます。
これらのウィジェットには、サーバーブラウザーから得た情報が設定されます。それを見てみましょう。ServerBrowserウィジェットを開いてください。
ここにはいくつかのアイテムがあります。画面の上部にはルームのリストがあります。その下には、パスワードボックスがあり、ルームに参加するときにパスワードが必要なら入力できます。その右側にはドロップダウンがあり、[All]、[Unranked]、[Ranked] のいずれかでフィルターできます。それらの下に [Join]、[Join Random]、[Create] および [Refresh] の選択肢があります。
注釈
ランク戦はStrixの定義済みプロパティではなく、このサンプルでも対応していません。これは単に、ルームにカスタムプロパティを実装して結果をフィルターする方法の例を示すためのものです。
グラフを表示すると、このブラウザーのロジックを確認できます。少し複雑ですが、Strixの機能を使用して検索結果をフィルターし、特定のルームに接続する方法を示しています。ここでの処理手順は次の通り。
このメンバーのプロパティを作成します。
検索条件を作成します。
条件に一致するルームを検索し、そのデータをサーバーブラウザーに変換して、ユーザーに表示します。
ユーザーが選択したルームか、リストからランダムに選んだルームに参加します。
各ステップを順番に見ていきましょう。
Set initial properties(初期プロパティを設定する)セクションを見てください。ここでは、メンバープロパティといくつかのレベル名を設定します。Levelsという名前のStrix Property Mapがあります。これは、表示するレベル名と実際のレベル名の対応を格納しているだけです(Unrealのマップよりも少し分かりやすくなっています)。User Properties変数にnameというStringプロパティを設定していますが、これはログインメニューで入力したプレイヤーの名前です。(他のメンバープロパティについてはルームメンバーを参照してください。)
次に、Order search results by different fields(特定フィールドで検索結果を並べ替える)セクションを見てください。ここでは、返される結果の順序を決めています。見出しのボタンをクリックすると、Strixの関数を介して昇順か降順かという順序を作成し、Search Order変数を設定します。
また、Set Ranking as a condition to search for(ランク戦かどうかを検索条件に設定する)セクションもあります。ここでは、ランク戦のドロップダウンの値を取得してStrix Condition値を設定します。Strix ConditionはField Greater Thanなどの条件を指定する値を取ります。key1の値を参照していますが、これはルームがRanked(ランク戦)であるかどうかを示しています。これは任意に決めたものです。どのフィールドに何を設定するか、どうやってルームを検索するかはユーザー次第です。ただし、StrixにはmemberCountやnameなどの特定用途のフィールドも少しあります。ルームの概要セクションに利用可能な全てのフィールドのリストがあります。
Strixでは、検索条件を組み合わせて複雑なフィルターを作成できます。ノード作成メニューで「Field」と入力すると、利用可能なさまざまな条件が表示されます。
RoomItemWidgetのコンストラクションスクリプトは、保存されているNode Room Infoを受け取り、ウィジェットの関連する変数を設定します。カスタムプロパティマップ拡張を含む、利用可能な全てのプロパティが表示されています。
検索条件を更新したり、ブラウザーを更新したりするたびに、Search Node Room関数を呼び出して、現在の条件に一致する全てのルームを検索します。これは、選択した条件、順序、および結果の上限とオフセットを受け取ります。ここでは、一致する結果を単に全て入手するので、オフセットと上限は0に設定しています。検索が成功すると、コールバックが呼び出されて、Strix Node Room Info構造体のリストが渡されます。そこで、この配列をループしながら、ルームアイテムを作成してリストに追加し、ユーザーが利用可能なルームを見られるようにします。
注釈
Strixには検索関数が何種類かあります。ここではSearch Node Roomを使用していますが、これは、全てのルームサーバー上で見つかった全てのルームと、各ルームがあるルームサーバーの情報のリストを返します。その代わりに、ルームサーバーのみを検索したり、特定の1つのルームサーバー上のルームを検索したりもできます。検索に使用する関数は、ご自分のサーバーの構成や、ユーザーがルームに接続する方法によって異なります。
検索自体は分かりやすく簡単なのですが、ここでの処理は、データと視覚的な表現の間の変換を行う必要があるために複雑になっています。利用可能なルームのリストが手に入ってしまえば接続は簡単です。プレイヤーがリスト項目を選択すると、コールバックでRoom To Join変数をそのルームに設定します。プレイヤーが [Join] をクリックした場合はそのルームを使用します。[Join Random] の場合は、リストからランダムに選んだルームに接続します。
ルームに参加するには、Join Node Room関数を呼び出して、接続するルームのルーム情報と、あらかじめ設定しておいたメンバーのプロパティを渡します。さらに、このルームがパスワードで保護されている場合は、パスワードを渡すことができます。コールバックが成功すると、このルームのレベルを開くことができます。ルームは、ルーム情報のstringKeyを取得しLevelsマップを使って変換したものです。
注釈
以前と同様に、Join関数にはいくつかの形式があります。ここでは、ルームサーバーのルームに直接参加しています。しかし、ルームサーバーに接続してからルームに接続することもできます。繰り返しますが、どちらが最適な方法なのかは、サーバーのアーキテクチャとゲームデザインによって異なります。
最後に、接続するルームが実際に存在するようにしたいため、ルームを作成するウィジェットを見てみましょう。
このウィジェットには、ルームを設定するためのオプションがいくつかあります。名前、パスワード、レベル、およびランク戦のルームかどうかです。
グラフでルームの作成方法を確認できます。これには、ルームとメンバーのプロパティが必要です。ルームの作成関数は、関数を呼び出したメンバーをルームの最初のメンバーとして自動的に接続するため、メンバープロパティが必要です。
Create Room and User properties(ルームとユーザープロパティを作成する)セクションを見ると、いくつかのプロパティマップを作成してさまざまな値を設定していることが分かります。この中にはデフォルト値とカスタム値の両方が混在していますが、それぞれの用途に関する説明はこのドキュメントの別の場所で確認できます。
これらのプロパティを設定したなら、それを使用してルームを作成できます。Create Node Roomはランダムなノード(ルームサーバー)にルームを作成するため、先にルームサーバーに接続しておく必要はありません。呼び出されたコールバックが成功コールバックであれば、自動的に接続されているので、レベルを開きます。
Strixサーバーへの具体的な接続方法はユーザー次第です。ただし、以下に示す手順は常に実行することになるでしょう。
マスターサーバーに接続します。
検索条件を定義します。
ルームサーバーに接続してRoomのリストを検索するか、または、Node Roomのリストを検索します。
ルームの情報を使用してルームに参加します。
Strixの接続はバックエンドで機能します。Strix Unreal SDKは、これらの接続を使用してクライアント間でアクターを同期するアクターコンポーネントをいくつか提供します。また、接続から情報を取得したり、他のクライアントにメッセージを送信したりするためには、ブループリント関数も使用します。今から、これらのゲーム内機能について説明します。
注釈
いくつかの関数にチャネルIDというパラメーターがあることにお気付きかもしれません。これは、複数のルームに同時に接続するときに使用します。この件については後で取り上げます。今のところはデフォルト値の0を使用します。