您的位置:首页 > 理论基础 > 计算机网络

使用Photon引擎进行unity网络游戏开发(三)——网络游戏大厅及房间

2018-01-23 16:24 531 查看

使用Photon引擎进行unity网络游戏开发(三)——网络游戏大厅及房间

PhotonPUNUnity网络游戏开发

连接到Photon

ConnectUsingSettings 设置你的客户端的游戏版本并使用一个由PUN设置向导写入的配置文件,该配置文件保存在PhotonServerSettings里面。

PhotonNetwork.ConnectUsingSettings("1.0");


游戏大厅

进入游戏大厅:

MasterServer会管理多个游戏大厅,当客户端连接至MasterServer后,需要选择一个游戏大厅进入

方法一:设置PhotonServerSetting中的Auto Join Lobby选项进入默认游戏大厅



方法二:覆写OnConnectedToMaster()方法,指定游戏大厅进入

/// <summary>
/// 进入大厅回调
/// </summary>
public override void OnJoinedLobby()
{
Debug.Log("欢迎 " + PhotonNetwork.player.NickName);
UserMessageText.text = "欢迎 " + PhotonNetwork.player.NickName;
}


游戏房间

创建游戏房间

通过CreateRoom方法我们可以创建游戏房间,其中RoomOption类可以帮助我们设置房间的一些属性,如房间中的人数,房间大厅中是否可见等

PhotonNetwork.CreateRoom(roomName.text, roomOptions, TypedLobby.Default);

    public void ClickConfirmCreateRoomButton()
{
RoomOptions roomOptions = new RoomOptions();
RectTransform toggleRectTransform = MaxPlayerToggle.GetComponent<RectTransform>();
int childCount = toggleRectTransform.childCount;
for (int i = 0; i < childCount; i++)
{
if (toggleRectTransform.GetChild(i).GetComponent<Toggle>().isOn)
{
roomOptions.MaxPlayers = maxPlayerNum[i];
break;
}
}

RoomInfo[] roomInfos = PhotonNetwork.GetRoomList();
bool isRoomNameReapeat = false;

foreach (RoomInfo roomInfo in roomInfos)
{
if (roomName.text == roomInfo.Name)
{
isRoomNameReapeat = true;
}
}

if (isRoomNameReapeat)
roommNameHint.text = "房间名称重复!";
else
{
PhotonNetwork.CreateRoom(roomName.text, roomOptions, TypedLobby.Default);CreateRoomPanel.SetActive(false);
roomLoadingPanel.SetActive(true);
}
}


加入游戏房间

随机加入房间

PhotonNetwork.JoinRandomRoom();


加入特定的房间

PhotonNetwork.JoinRoom(roomName);


显示和更新房间列表

通过Photon提供的OnReceivedRoomListUpdate()回调函数,我们可以处理房间内大厅更新时的逻辑,例如更新UI中显示的房间列表。

/// <summary>
/// 覆写回调函数,当房间更新时调用
/// 更新游戏大厅中的房间列表信息
/// </summary>
public override void OnReceivedRoomListUpdate()
{
roomInfo=PhotonNetwork.GetRoomList();
...
ShowRoomMessage();
}
private void ShowRoomMessage()
{
//通过roomInfo信息来显示房间信息
...
}


常用回调函数

/// <summary>
/// 进入大厅回调
/// </summary>
public override void OnJoinedLobby()

/// <summary>
/// 连接失败回调
/// </summary>
/// <param name="cause"></param>
public override void OnConnectionFail(DisconnectCause cause)

//进入游戏房间回调函数
public override void OnJoinedRoom()

//客户端连接到masterserver时调用,加入默认游戏大厅
//等同于Photonseversetting中勾选Auto join lobby
public override void OnConnectedToMaster()

/// <summary>
/// 当房间列表更新时调用
/// </summary>
public override void OnReceivedRoomListUpdate()

//当加入房间失败时调用
public override void OnPhotonJoinRoomFailed(object[] codeAndMsg)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: