既存のルームに参加する

既存のルームに参加するには、いくつかの方法があります。

JoinRandomRoom

最も簡単な方法は、StrixNetworkシングルトンでJoinRandomRoomメソッドを呼び出すことです。2つのオーバーロードがあります。指定する必要がある唯一の引数は、ルームメンバープロパティです。これは、ルームに参加した後で作成される、現在のクライアントを表すためのルームメンバーのプロパティです。

オーバーロードのうちの1つは、RoomMemberPropertiesオブジェクトを丸ごと受け取ります。

void JoinRandomRoom(RoomMemberProperties memberProperties, RoomJoinEventHandler handler, FailureEventHandler failureHandler, RequestConfig config = null)

もう1つは、新しいルームメンバーの名前のみを指定します。

void JoinRandomRoom(string playerName, RoomJoinEventHandler handler, FailureEventHandler failureHandler, RequestConfig config = null)

これらの方法の欠点は、名前から推測できるように、ルームがランダムに選択されることです。参加するルームを指定する方法はありません。JoinRandomRoomは、ゲーム内に一種類の均一なルームのみがあり、完全にランダムなマッチングを行う場合に使用します。

ルームに参加

ルームに参加するより汎用的な方法は、StrixNetworkシングルトンのJoinRoomを呼び出すことです。

void JoinRoom(string host, int port, string protocol, long roomId, string playerName, RoomJoinEventHandler handler, FailureEventHandler failureHandler, RequestConfig config = null)

これを行うには、あらかじめ、参加するルームのIDと、このルームが存在するルームサーバーのアドレスとポートを取得しておく必要があります。これは、検索機能を使用してルームを検索すれば取得できます。

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)
void SearchRoom(ICondition condition, Order order, int limit, int offset, RoomSearchEventHandler handler, FailureEventHandler failureHandler, RequestConfig config = null)
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)

検索機能の詳細については、「ルームの検索」を参照してください。

検索を行うと、結果としてRoomInfoのインスタンスのリストが得られます。これらの各インスタンスは、対応するルームに参加するために必要な全ての情報と、ルームのプロパティなどの追加の詳細情報を保持しています。次のフィールドが必要になります。

  • host

  • port

  • protocol

  • roomId

さらに汎用的なJoinRoomメソッドの変種もあり、RoomJoinArgsオブジェクトを受け取るようになっています。他とは異なり、これは、ルームがパスワードで保護されている場合にパスワードを提供できます。

void JoinRoom(RoomJoinArgs args, RoomJoinEventHandler handler, FailureEventHandler failureHandler, RequestConfig config = null)

また、外部認証サーバーのURLを指定することもできます。この詳細については、カスタム認証に関するページを参照してください。

メンバーのプロパティ

ルームに参加する際には、プレイヤーはメンバープロパティで自分自身を識別する必要があります。

必須メンバープロパティ:

名前

タイプ

説明

name

String

ルームメンバーの名前

コード例

public class StrixJoinRoomExample : 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.SearchJoinableRoom(
                    condition: null,                                            // 全てのルームを検索します
                    order: new Order("memberCount", OrderType.Ascending),       // 最もすいているルームが最初になるように並べます
                    limit: 10,                                                                     // 結果を10件のみ取得します
                    offset: 0,                                                                     // 結果を最初から取得します
                    handler: searchResults => {
                        var foundRooms = searchResults.roomInfoCollection;
                        Debug.Log(foundRooms.Count + " rooms found.");

                        // ルームが見つからなかった場合はエラーを出力します
                        if (foundRooms.Count == 0) {
                            Debug.LogError("No joinable rooms found.");
                            return;
                        }

                        // 見つかった最初のルームに参加します
                        var roomInfo = foundRooms.First();

                        strixNetwork.JoinRoom(
                            host: roomInfo.host,
                            port: roomInfo.port,
                            protocol: roomInfo.protocol,
                            roomId: roomInfo.roomId,
                            playerName: "My Player Name",
                            handler: __ => Debug.Log("Room joined."),
                            failureHandler: joinError => Debug.LogError("Join failed. Reason: " + joinError.cause)
                        );
                    },
                    failureHandler: searchError => Debug.LogError("Search failed. Reason: " + searchError.cause)
                );
            },
            errorEventHandler: connectError => Debug.LogError("Connection failed. Reason: " + connectError.cause)
        );
    }
}

注釈

この例を動かすには、マスターサーバーに有効なルームが登録されている必要がありますが、メンバーが残っていないルームは破棄されるため、少なくとも2つのクライアントが必要になります。別のゲームインスタンスからCreateRoomを使用してマッチルームを作成しておき、この例を実行します。そうしないと、使用可能なルームがないため検索が失敗します。また、applicationIdhostの仮の値を、忘れずにStrix Cloudのアプリケーション情報タブにある実際の値に変更してください。