유닛 멀티 플레이를 해보도록 하겠습니다. 열쇠 있는 방을 만들어 보도록 하겠습니다.

19356 단어 PhotonUnity
저번의 후속.
이번에 먼저 이전에 만든 방 리스트에 열쇠가 달린 방을 만들었다.
그리고 저번에 방 일람표를 자동으로 업데이트하지 않아서 수정을 해봤어요.
각종 오류 처리와 통신에서의 대응 등은 아직 입력하지 않았다.
지금 이런 느낌이에요.

열쇠가 있는 방에 대해서.
초대자만 방에 들어갈 수 있는 방법. 여기를 참고하면 쉽게 만들 수 있어요.
그냥 간단한 절차예요.
// photon接続
PhotonNetwork.ConnectUsingSettings ("0.1");
// ロビーに入ると呼ばれる
public void OnJoinedLobby(){
   Debug.LogWarning("ロビーに入りました");
}
// ユーザーの名前が確定したら名前をセットする
PhotonNetwork.playerName = nameInputField.text;
// 部屋が更新されたりで呼ばれる
public void OnReceivedRoomListUpdate()
{
    // 呼ばれた時にルームのリストを保持
    roomData = PhotonNetwork.GetRoomList();
    // ルーム一覧ウィンドウが開いていたら通知
    if(roomList.gameObject.activeSelf) roomList.UpdateRoom();
}
// 現在のルームのデータを返す
public RoomInfo[] GetRoomList()
{
    return roomData;
}
// ルーム一覧表示箇所
public void UpdateRoom()
{
    if(scrollTran.childCount > 0)
    {
        foreach(Transform tran in scrollTran)
        {
            Destroy(tran.gameObject);
        }
    }
    RoomInfo[] roomList = NetworkManager.Instance.GetRoomList();

    GameObject roomObj = null;
    foreach (RoomInfo room in roomList) {

        roomObj = Instantiate(Resources.Load(CommonConst.ROOM_ITEM)) as GameObject;
        roomObj.transform.SetParent(scrollTran);
        roomObj.transform.SetLocalPositionZ(0);
        roomObj.transform.localScale = Vector3.one;
        roomObj.GetComponent<RoomItem>().SetData(room);
    }
}
    // 部屋を作る パスワードが入力された場合は部屋名 + "_" + パスワードで部屋を作成 
    public void CreateRoom(string roomName, int playerCount, string password)
    {
        string roomNameStr = roomName;
        if(!string.IsNullOrEmpty(password)) roomNameStr += "_" + password;
        Debug.LogWarning("部屋作成" + roomNameStr);
        PhotonNetwork.CreateRoom (
            roomNameStr,    // ユニークな部屋名
            new RoomOptions() {maxPlayers = 10},
            null);
    }
    // ルームのデータ表示箇所 文字列に_がある場合はsplitして名前の部分だけを表示し、鍵のアイコン表示
    public void SetData(RoomInfo roomData)
    {
        this.roomData = roomData;
        string roomName = roomData.name;
        string[] strList = roomName.Split("_"[0]);
        roomNameLabel.text = strList[0];
        if(strList.Length > 1 && !string.IsNullOrEmpty(strList[1]))
        {
            isLock = true;
            lockObj.SetActive(true);
        }
        playerCountLabel.text = roomData.playerCount + "/" + roomData.maxPlayers;
        if(roomData.playerCount == roomData.maxPlayers)
        {
            joinBtnText.text = "満室";
            joinBtnImg.color = gray;
        }
    }

사용자 정의 속성 추가


응, 그러면 랜덤으로 방에 들어갈 때 자물쇠가 달린 방에 열쇠를 넣어서 수정했어.
룸을 만들 때 사용자 정의 속성이 추가되고 랜덤으로 로그인할 때 매개변수를 조건으로 사용할 수 있습니다.
using Hashtable = ExitGames.Client.Photon.Hashtable; // これをしないとコンパイルが通らなかった・・・。

    public void CreateRoom(string roomName, int playerCount, string password)
    {
        string roomNameStr = roomName;
        bool isLock = false;
        if(!string.IsNullOrEmpty(password))
        {
            isLock = true;
            roomNameStr += "_" + password;
        }
        RoomOptions roomOptions = new RoomOptions();
        roomOptions.isVisible = true;
        roomOptions.isOpen = true;
        roomOptions.customRoomProperties = new Hashtable() {
            { "isLock", isLock }, // 鍵がかかっているかどうか
            { "status", (int)RoomState.WAIT }, // 今後使う部屋の状態 wait:待機 play:遊び中
            { "round",   0 }, // なんとなくいれてみた
        };
        roomOptions.customRoomPropertiesForLobby = new string[] {
            "isLock",
            "status",
            "round",
        };
        PhotonNetwork.CreateRoom(roomNameStr, roomOptions, null);
    }

    // 適当に部屋に入る
    public void RandomEnter()
    {
        // 鍵が付いていない部屋に入る
        Hashtable expectedCustomRoomProperties = new Hashtable() { { "isLock", false } };
        PhotonNetwork.JoinRandomRoom(expectedCustomRoomProperties, 0); // 第二引数は部屋のmaxプレイヤー数、0は最大プレイヤー数なんでもとなる
    }

    // 部屋の表示(カスタムプロパティを取得してisLockで鍵の判定をするように修正)
    public void SetData(RoomInfo roomData)
    {
        this.roomData = roomData;
        string roomName = roomData.name;
        string[] strList = roomName.Split("_"[0]);
        roomNameLabel.text = strList[0];
        if((bool)roomData.customProperties["isLock"])
        {
            isLock = true;
            lockObj.SetActive(true);
        }
        playerCountLabel.text = roomData.playerCount + "/" + roomData.maxPlayers;
        if(roomData.playerCount == roomData.maxPlayers)
        {
            joinBtnText.text = "満室";
            joinBtnImg.color = gray;
        }
    }
당분간 여기까지.

좋은 웹페이지 즐겨찾기