🟥 目标
- 完成游戏场景的搭建、
- 完成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 }