ルームからの退出と削除

ルームの使用を終えた場合、例えば対戦を終えたり、気が変わってマッチングを中止したりした場合には、ルームから退出します。それによりルームが削除されることもあります。

ルームから退出する

今いるルームから退出するには、StrixNetworkシングルトンのLeaveRoomメソッドを呼び出します。

public void LeaveRoom(RoomLeaveEventHandler handler, FailureEventHandler failureHandler, RequestConfig config = null)

注釈

ルームからの退出は、ルームサーバーからの切断とは異なります。ルームサーバーからの切断も必要であれば、別途行う必要があります。しかし通常は、そのような切断操作は不要です。別のルームサーバーに接続しようとすると、既存の接続は自動的に切断されるからです。

ルームを削除

使用されなくなったルームは自動的に削除されます。「使用されない」という条件の内容はルームオーナー移譲のサーバーオプションによって異なります。

  • ルームオーナー移譲が無効になっている場合、ルームが使用されなくなったと見なされて削除されるのは、ルームオーナーがルームを退出したときです(そのルームに他のメンバーがいても関係ありません)。

  • ルームオーナー移譲が有効になっている場合、ルームが使用されなくなったと見なされて削除されるのは、最後のメンバーがルームを退出したときです。

StrixNetworkシングルトンのDeleteRoomメソッドを使用して手動でルームを削除することもできます。

void DeleteRoom(long roomId, RoomDeleteEventHandler handler, FailureEventHandler failureHandler, RequestConfig config = null)

Strix Unity SDKの現在のバージョンでは、複数のルームに同時に参加することはできません。これは、roomId引数が現在いるルームのIDでなければならないことを意味します。このIDを取得するには、次を呼び出します。

StrixNetwork.instance.room.GetPrimaryKey();

コード例

using SoftGear.Strix.Unity.Runtime;
using UnityEngine;

public class StrixDeleteRoomExample : 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 Dictionary<string, object> {
                        { "name", "My Game Room" },
                        { "capacity", 20 }
                    },
                    playerName: "My Player Name",
                    handler: createRoomResult => {
                        Debug.Log("Room created.");

                        strixNetwork.DeleteRoom(
                            roomId: strixNetwork.room.GetPrimaryKey(),
                            handler: deleteRoomResult => Debug.Log("Room deleted: " + (strixNetwork.room == null)),
                            failureHandler: deleteRoomError => Debug.LogError("Could not delete room. Reason: " + deleteRoomError.cause)
                        );
                    },
                    failureHandler: createRoomError => Debug.LogError("Could not create room. Reason: " + createRoomError.cause)
                );
            },
            errorEventHandler: connectError => Debug.LogError("Connection failed. Reason: " + connectError.cause)
        );
    }
}

注釈

applicationIdhostの仮の値を、忘れずにStrix Cloudのアプリケーション情報タブにある実際の値に変更してください。