유닛 멀티 플레이를 해보도록 하겠습니다. 열쇠 있는 방을 만들어 보도록 하겠습니다.
이번에 먼저 이전에 만든 방 리스트에 열쇠가 달린 방을 만들었다.
그리고 저번에 방 일람표를 자동으로 업데이트하지 않아서 수정을 해봤어요.
각종 오류 처리와 통신에서의 대응 등은 아직 입력하지 않았다.
지금 이런 느낌이에요.
열쇠가 있는 방에 대해서.
초대자만 방에 들어갈 수 있는 방법. 여기를 참고하면 쉽게 만들 수 있어요.
그냥 간단한 절차예요.
// 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;
}
}
당분간 여기까지.
Reference
이 문제에 관하여(유닛 멀티 플레이를 해보도록 하겠습니다. 열쇠 있는 방을 만들어 보도록 하겠습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/ayumegu/items/d7ac5bb0ccc279d57eb4텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)