ルームの検索¶
一般的に、マッチメイキング機能を備えたゲームは、参加する特定のマッチを検索する機能をプレイヤーに提供します。Strixでは、これはいくつかの検索メソッドによって提供されています。
検索メソッド¶
ルームを検索するSearchRoom
メソッドの基本形には引数が7つあります。
void SearchRoom(ICondition condition, Order order, int limit, int offset, RoomSearchEventHandler handler, FailureEventHandler failureHandler, RequestConfig config = null)
SearchRoom
のオーバーロードには、条件と結果の順序を省略したものが2種あります。これらは使いやすさのために追加してあります。
void SearchRoom(int limit, int offset, RoomSearchEventHandler handler, FailureEventHandler failureHandler, RequestConfig config = null)
void SearchRoom(ICondition condition, int limit, int offset, RoomSearchEventHandler handler, FailureEventHandler failureHandler, RequestConfig config = null)
また、メンバーが参加する余地のあるルームのみを検索することに特化したメソッドも2つあります(これらは名前が異なります)。
void SearchJoinableRoom(int limit, int offset, RoomSearchEventHandler handler, FailureEventHandler failureHandler, RequestConfig config = null)
void SearchJoinableRoom(ICondition condition, Order order, int limit, int offset, RoomSearchEventHandler handler, FailureEventHandler failureHandler, RequestConfig config = null)
注釈
ルームが1つもない場合には、検索関数は正常に完了し成功ハンドラーが呼び出されますが、見つかったルームの一覧として空のコレクションが渡されます。
検索条件を指定し、どのルームも条件を満たさなかった場合も同様です。
検索条件¶
Strixの検索機能の中には、検索結果を絞り込むためにcondition
という名前の引数を持っているものがあります。
これを利用するために、専用のAPIを使用して複雑な検索クエリを作成できます。ConditionBuilder
クラスが、クエリを構築するためのシンプルなインターフェイスを提供します。
まず、ConditionBuilder.Builder()
を呼び出します。全ての条件はフィールドで始まるため、ビルダーでFieldメソッドを呼び出してフィールドの名前を指定します。
ConditionBuilder.Builder()
.Field("capacity")
次に、何らかの条件節を追加する必要があります。これらの条件のほとんどは、何らかの固定値か別のフィールドを受け入れます。
例えば、次の方法でcapacityが4に等しいかどうかを調べることができます。
ConditionBuilder.Builder()
.Field("capacity")
.EqualTo(4)
または、capacityがmemberCountと等しいかどうかを確認することもできます。
ConditionBuilder.Builder()
.Field("capacity")
.EqualTo(new Field("memberCount"))
その後、And()
やOr()
メソッドを使用してさらに条件節を追加するか、Build()
メソッドを使用して条件を完成させます。
注釈
文字列に作用する全ての条件節では、大文字と小文字を区別します。
検索順序¶
Strixの検索関数の中にはorder
という引数を持つものがあります。これは、検索結果の並び順を指定します(OrderType.Ascending
は昇順、OrderType.Descending
は降順です)。
Order order = new Order("MyField", OrderType.Ascending);
// 降順の場合は
order.SetOrderType(OrderType.Descending);
fieldName
は並べ替えに用いるフィールドの名前、orderType
は並び順です。
コード例¶
using SoftGear.Strix.Client.Core.Model.Manager.Filter.Builder;
using SoftGear.Strix.Unity.Runtime;
using UnityEngine;
public class StrixSearchRoomExample : MonoBehaviour
{
void Start()
{
var strixNetwork = StrixNetwork.instance;
// これは仮の値です。実際のアプリケーションIDに変更してください
// Strix Cloudのアプリケーション情報タブにあります: https://www.strixcloud.net/app/applist
strixNetwork.applicationId = "00000000-0000-0000-0000-000000000000";
// まずマスターサーバーに接続します
strixNetwork.ConnectMasterServer(
// これは仮の値です。実際のマスターホスト名に変更してください。
// Strix Cloudのアプリケーション情報タブにあります: https://www.strixcloud.net/app/applist
host: "000000000000000000000000.game.strixcloud.net",
connectEventHandler: _ => {
Debug.Log("Connection established.");
// マスターサーバーに接続した後でルームを作成できます
strixNetwork.CreateRoom(
new RoomProperties { name = "My Game Room" },
new RoomMemberProperties { name = "My Player Name" },
handler: __ => {
Debug.Log("Room 1 created.");
// ルームを作成したので、名前で見つけることができるかどうか試してみましょう
strixNetwork.SearchRoom(
condition: ConditionBuilder.Builder().Field("name").EqualTo("My Game Room").Build(), // 「My Game Room」という名前のすべての部屋を検索します
limit: 10, // 結果を10件のみ取得します
offset: 0, // 結果を先頭から取得します
handler: searchResults => {
Debug.Log(searchResults.roomInfoCollection.Count + " rooms found.");
// 検索が終わったら、見つかった全てのルームに関する情報を出力します
foreach (var roomInfo in searchResults.roomInfoCollection)
Debug.Log("Room ID: " + roomInfo.id
+ "\nHost: " + roomInfo.host
+ "\nMember count: " + roomInfo.memberCount
+ "\nCapacity: " + roomInfo.capacity
);
},
failureHandler: searchError => Debug.LogError("Search failed. Reason: " + searchError.cause));
},
failureHandler: createRoomError => Debug.LogError("Could not create room. Reason: " + createRoomError.cause)
);
},
errorEventHandler: connectError => Debug.LogError("Connection failed. Reason: " + connectError.cause)
);
}
}
注釈
applicationId
とhost
の仮の値を、忘れずにStrix Cloudのアプリケーション情報タブにある実際の値に変更してください。