ロビーの作り方

ロビーは、ゲームへの参加を待っている間、プレイヤーが入るルームです。Strix Unity SDKでルームを作成するには、CreateRoom()メソッドを使用します。次のコードは、ロビーとして役立つプロパティをいくつか持つルームを作成する方法を示しています。

StrixNetwork.instance.CreateRoom(
    new RoomProperties {
        name = "New Room",
        capacity = 4,
        key1 = 0            // 平均スキルレベルを 0 に初期化しておく
    },
    new RoomMemberProperties {
        name = "Player name",
        properties = new Dictionary<string, object>() {
            { "state", 0 }  // 初期状態は "Not Ready"
        }
    },
    args => {
        Debug.Log("CreateRoom succeeded");
    },
    args => {
        Debug.Log("CreateRoom failed. error = " + args.cause);
    }
);

この例でのロビーの重要なプロパティは、key1stateです。

key1は、ルームメンバーの平均スキルレベルです。stateは、特定のメンバーの準備状態を保持します(準備ができていない場合は0、準備ができている場合は1)。

注釈

どんな値を使用することもできますが、カスタムプロパティは検索できないことに注意してください。この情報をルームの外の誰かが利用できるようにする場合は、keyの値のうち1つを使用するといいでしょう。

ルームを作成する前に、マスターサーバーへの接続を確立する必要があります。ルームの作成に成功すると、クライアントは作成されたルームに自動的に参加します。最初のクライアントには、ルームオーナーの権限が与えられます。つまり、ルームの情報を更新したり、他のメンバーをキックしたりする権限です。

ルームメンバーは、自分がゲームを始める準備ができたら、そのstateを「準備完了」に設定するようにします。例えば:

// ルームメンバーの状態を変更します: 0は「準備中」、1は「準備完了」
StrixNetwork.instance.SetRoomMember(
    StrixNetwork.instance.selfRoomMember.GetPrimaryKey(),
    new Dictionary<string, object>() {
        { "properties", new Dictionary<string, object>() {
            { "state", state }
        } }
    },
    args => {
        Debug.Log("SetRoomMember succeeded");
    },
    args => {
        Debug.Log("SetRoomMember failed. error = " + args.cause);
    }
);

ここで、selfRoomMemberは、サーバーに接続されている現在のクライアントを表すCustomizableMatchRoomMemberインスタンスです。これはルームに参加すると初期化されます。この例では、ルームのメンバーは0と1を状態プロパティとして受け入れることができます。実際のアプリケーションでは、他の値を使うことも、別のプロパティ名を使用することもできます。

注釈

SetRoomMemberメソッドは、引数として受け取ったディクショナリの内容に基づいてメンバープロパティの値を更新するようサーバーに要求します。このディクショナリ内で指定されていないプロパティは変更されません。これはカスタムプロパティについても同様です。カスタムプロパティとは、外側のディクショナリの"properties"キーの値として格納されているものです。つまり、複数のカスタムプロパティがあったとしても、上のコード例では、state以外のカスタムプロパティの値は変化しません。

ゲームを開始する前に、オーナーを含む全てのメンバーの準備ができるまで待つことをお勧めします(詳細については、全てのメンバーの準備が整うまで待つ方法を参照してください)。

ゲームを始めるには、他のメンバーがルームに参加する必要があります。メンバーは、JoinRoom()メソッドを使用してルームに参加できます。

StrixNetwork.instance.JoinRoom(
    new RoomJoinArgs {
        host = "127.0.0.1",
        port = 9123,
        protocol = "TCP",
        roomId = 1
    },
    args => {
        Debug.Log("JoinRoom succeeded");
    },
    args => {
        Debug.Log("JoinRoom failed. error = " + args.cause);
    }
);