既存のルームに参加する¶
既存のルームに参加するには、いくつかの方法があります。
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
を使用してマッチルームを作成しておき、この例を実行します。そうしないと、使用可能なルームがないため検索が失敗します。また、applicationId
とhost
の仮の値を、忘れずにStrix Cloudのアプリケーション情報タブにある実際の値に変更してください。