下面是演示环节。
本节我们讲解《慕课英雄 2》网络版中 游戏房间界面的制作。
这里我们已经在 Unity 编辑器中打开了《慕课英雄 2》的 GameLobby
场景 在上一节演示视频中我们已经添加了房间面板——RoomPanel
现在我们介绍 RoomPanel 的结构 在 RoomPanel
中，RoomLabel 表示游戏画面正上方的游戏房间字样
RoomName 用于显示游戏房间的名称
TeamPanel 表示队伍面板 包括队伍 1 和队伍 2 两个面板
每个队伍面板包含三个子对象 首先是队伍名称标签
接着是两个队伍成员的信息条目 用于显示玩家的姓名和准备情况
画面右下角的 SwitchButton 是切换队伍按钮
用于玩家切换队伍 ReadyButton
用于非房主玩家切换准备状态 对于房主，ReadyButton
则用于开始游戏 Prompt Message
用于显示玩家的错误操作提示信息 [空白_录音]
下面我们为游戏房间面板绑定控制脚本 我们将
RoomPanelController 脚本拖动至 RoomPanel
对象上 [空白_录音]
RoomPanelController 脚本中，需要用到 PUN 组件的 PhotonView 我们选中了
RoomPanel 对象，点击 Inspector 视图中的 ADD Component
按钮 为其绑定 PhotonView
组件 接下来，我们设置RoomPanelController
脚本的参数属性 [空白_录音]
[空白_录音]
[空白_录音] [空白_录音]
[空白_录音]
[空白_录音] 下面我们为
SwitchButton 绑定事件处理函数 我们将
SwitchButton 的事件处理函数 设置为 RoomPanelController
脚本的 ClickSwitchButton ReadyButton
的事件处理函数，我们在游戏运行时动态设置 我们展开
Project 视图，在 Scenes 文件夹中 找到 GameScene 场景。
该场景是游戏战斗场景 点击 Fell 菜单中的 BuildSettings
打开项目构建窗口 点击 ADD Open Scenes 按钮，将
GameScene 场景加入场景构建列表 接下来，返回
GameLobby 场景 构建我们目前制作的项目
我们将项目命名为 LobbyText
[空白_录音] [空白_录音]
[空白_录音] 项目构建完毕后
我们运行两个项目程序
[空白_录音] 返回
Unity 编辑器 点击预览游戏按钮
这样我们就启动了三个游戏客户端 首先我们操作第一个游戏客户端
点击登录按钮，连接 Photon 服务器 这里如果你无法连接到 Photon
服务器 可能的原因是你的路由器为你的电脑分配了 新的 IP 地址。
你可以按照我们之前讲过的方法 在 PhotonControl 和 PhotonServerSettings中重新设置正确的 IP
地址 进入游戏大厅后，我们点击创建房间按钮
创建一个四人游戏房间 创建
完游戏房间后，第一个客户端进入了游戏房间界面 在队伍
1 中显示该玩家的昵称 玩家状态显示为房主
下面我们操作第二个游戏客户端 点击登录按钮，连接
Photon 服务器 进入大厅后
大厅显示第一个客户端创建的房间。
我们点击进入房间按钮 第二个客户端进入了游戏房间
游戏房间显示玩家的昵称 玩家的状态为未准备
我们点击切换队伍按钮，可以自由切换玩家所在的队伍
点击准备按钮，切换玩家的准备状态
当玩家处于准备状态 点击切换队伍按钮不会改变玩家的队伍信息
左下方提示信息显示准备状态下不能切换队伍 接下来我们操作
Unity 编辑器中的客户端 进入大厅
进入游戏房间 进入房间后，点击切换队伍按钮
由于另一队伍人数已满，提示信息显示
另一队伍已满，无法切换，表示玩家切换队伍失败
最后我们回到第一个客户端 该客户端是房主玩家。
ReadyButton 用于开始游戏
我们点击开始游戏按钮，提示信息显示有人未准备，游戏无法开始
我们先把所有非房主玩家切换至准备状态
再点击房主玩家的开始按钮 此时所有玩家都加载了
GameScene 场景 游戏正式开始。
接下来，我们关闭所有的游戏客户端 终止
Unity 编辑器中的游戏预览 下面双击打开
RoomPanelController 脚本
我们讲解该脚本的核心代码 在 OnEnable
函数中 显示游戏房间的名称 清空提示信息
游戏房间的上一级是游戏大厅 我们为返回按钮绑定新的事件处理函数
让客户端离开游戏房间，激活游戏大厅面板 关闭游戏房间的显示。
我们根据 游戏房间的最大人数，计算每个队伍的最大人数
调用 DisableTeamPanel 初始化队伍面板 调用 UpdataTeamPanel
函数，更新队伍面板的显示 房间信息更新完毕后，我们在队伍列表中寻找空余的位置
将新进入房间的玩家信息填入该空余位置 使用自定义属性
CustomPropertles 初始化玩家的自定义属性，包括玩家队伍
Team 玩家队伍顺序 TeamNum，玩家准备状态
isReady 以及玩家得分 Score。
在 OnEnable 函数的最后 调用 ReadyButtonControl
函数 设置玩家 ReadyButton 按钮的事件处理函数
我们覆写 OnPhotonPlayerPropertiesChanged
的回调函数 该回调函数会在房间内玩家的属性发生变更时被调用
我们在该函数中调用 DisableTeamPanel
函数 和 UpdataTeamPanel 函数，更新队伍面板的显示
我们覆写 OnMasterClientSwitch 的回调函数
当房间内的房主 也就是
MasterClient 发生变化时，该回调函数就会被调用 我们在这里重新设置玩家的
ReadyButton 按钮的事件处理函数 我们重写
OnPhotonPlayerDisconnected 回调函数
我们覆写 OnPhotonPlayerDisconnect
回调函数 该函数在有玩家离开房间时被调用
我们在该函数中更新队伍面板中的玩家信息
ClickSwitchButton 函数 用于切换玩家的队伍。
我们首先判断玩家是否处于准备状态
如果玩家处于准备状态，那么玩家不能切换队伍
接着在另一支队伍中寻找空余位置
如果找到空余位置，我们将该玩家放置在新的位置
更新玩家的自定义属性 如果未找到空余位置
则提示信息显示，另一队伍已满，无法切换队伍 ClickReadyButton
函数 对于非房主玩家来说
该函数会更新玩家的自定属性 isReady
更改 ReadyButton 的文本显示内容
ClickStartButton 函数 用于房主玩家开始游戏
该函数首先遍历房间内的所有的非房主玩家 查看他们的准备状态。
如果有玩家未准备 那么提示信息显示有人未准备，游戏无法开始
如果其他玩家均已准备 我们使用 PhotonView
的 RPC 函数 调用 RPC 方法 LoadGameScene 加载
GameScene 游戏战斗场景 关于 PhotonView
和 RPC 我们将在下一单元的课程中进行讲解。
最后，返回 Unity 编辑器 保存游戏场景
[空白_音频] 这样我们就完成了游戏大厅界面
GameLobby 的制作 以上就是本节演示的全部内容