🟥 目标
- 完成游戏场景的搭建、
- 完成PUN根据当前人数,加载对应人数的场景
- 完成退出服务器房间(场景)到服务器大厅(主场景)的程序
🟧 场景搭建
制作退出Btn,用以离开当前游戏场景。【退出服务器房间(场景)到服务器大厅(主场景)】
1️⃣ 搭建游戏场景
a、新建场景,做出离开房间的UI button
b、场景内物体进行如下:
底边20x20,高3
2️⃣ 创建另外三个游戏场景
从第一个场景复制创建另外三个场景。不同点是活动区域大小不同:
Room for 2 Floor Scale: 36,1,36
Room for 3 Floor Scale: 50,1,50
Room for 4 Floor Scale: 60,1,60
3️⃣ 场景放入Build Settings
🟨 程序编程
目标:
- 完成PUN根据当前人数,加载对应人数的场景
- 完成退出服务器房间(场景)到服务器大厅(主场景)的程序
其实我们大厅主场景也有类似的根据人数加载对应场景的程序,LoadScene(),可以回顾下。
操作步骤:
- 各个场景新建 GameManager 物体,赋值脚本如下
- 并将其 LeaveRoom() ,绑定到离开房间Buoon上。
using UnityEngine.SceneManagement;
using Photon.Pun;
using Photon.Realtime;
public class GameManager : MonoBehaviourPunCallbacks
{
#region Public Methods
//离开服务器房间Btn
public void Skode_LeaveRoom()
{
//不允许主客户端离开房间
if (!PhotonNetwork.IsMasterClient)
PhotonNetwork.LeaveRoom();
}
#endregion
#region PUN Callbacks
/// <summary>
/// 本地玩家离开服务器房间时回调
/// </summary>
public override void OnLeftRoom()
{
// 加载大厅场景
SceneManager.LoadScene(0);
}
/// <summary>
/// 其他玩家连接房间时的回调(不是自己)
/// </summary>
public override void OnPlayerEnteredRoom(Player other)
{
print(other.NickName + " 加入房间");
//根据当前玩家的人数,主客户端加载对应场景
if (PhotonNetwork.IsMasterClient)
LoadArena();
}
//当玩家离开房间或变得不活动时调用。
public override void OnPlayerLeftRoom(Player other)
{
print(other.NickName + " 离开了房间");
//根据当前玩家的人数,主客户端加载对应场景
if (PhotonNetwork.IsMasterClient)
LoadArena();
}
#endregion
#region Private Methods
void LoadArena()
{
//Photon分为主客户端、其他客户端。只有主客户端才可进行加载房间。
//根据当前房间人数加载对应场景。该方法会使其他玩家会自动加入主客户端的房间
PhotonNetwork.LoadLevel("Room for " + PhotonNetwork.CurrentRoom.PlayerCount);
}
#endregion
}
大家还有什么问题,欢迎在下方留言!
如果你有 技术的问题 或 项目开发
都可以加下方联系方式
和我聊一聊你的故事🧡
本文含有隐藏内容,请 开通VIP 后查看