下面是演示环节 本节我们实现《慕课英雄2》网络版中游戏状态的管理
这里我们已经在 Unity 编辑器中打开了《慕课英雄2》的 Game Scene
场景 在之前的演示视频中,我们已经添加了游戏管理脚本
GameManager ,并完成了相关属性的设置 在 GameManager
脚本中,我们实现游戏状态的管理 为了方便测试,我们修改
GameManager 组件中的 游戏胜利条件,降低游戏胜利所需的目标分数
我们在游戏场景中添加 EventSystem 对象
使得玩家能够在游戏进行时和 UI
进行交互 接下来点击 File
菜单栏 中的 Build Settings
我们构建一个游戏项目程序 [空白_录音]
构建完毕后 我们运行一个游戏程序作为测试客户端
接着回到 Unity 编辑器 预览游戏
作为另一个客户端,我们让这两个客户端进入游戏房间
[空白_录音] 准备并开始游戏
进入游戏战斗场景后,我们操控其中一个游戏客户端的玩家对象 向另一个客户端中的玩家对象进行射击
[空白_录音] [声响]
我们不断杀死该玩家
赢得分数
当分数达到目标值后,游戏结束
显示最后的玩家得分榜,并播放游戏结束音效 游戏结束一段时间后
玩家会返回游戏大厅,这里我们可以选择退出游戏
或者加入新的游戏房间,开始新的比赛 下面我们再次让这两个客户端进入游戏房间
准备,并开始游戏
我们选择其中一个客户端,点击退出房间按钮
退出游戏战斗场景,此时 该客户端返回游戏大厅。
游戏因为有一支队伍所有玩家均已退出房间
所以游戏结束,另一支队伍获得胜利,播放胜利音效 接下来我们停止游戏的运行和预览
回到 Unity 编辑器 双击打开 GameManager
脚本 我们讲解游戏状态管理相关的代码
首先是 Update 函数,
我们在 switch,case 语句中
根据当前的游戏的状态,执行不同的游戏逻辑 如果游戏处于进行状态
我们更新本地玩家的生命值,也就是血条的显示 玩家可以按住
Tab 键,显示玩家的得分榜 接下来
MasterClient 会检查游戏的终止条件,如果某支队伍
达到了目标分数,我们就使用 RPC 方法 EndGame
告知所有客户端,游戏已经结束 并通知它们获胜的队伍信息。
如果游戏倒计时结束 我们则根据两支队伍的得分调用 EndGame 函数
判断两队的输赢,在 RPC 函数 EndGame
中 [空白_录音]
我们根据传入获胜队伍的参数
修改本地客户端的状态,如果本地 玩家属于获胜队伍,则播放游戏胜利音效
如果本地玩家属于失败队伍 我们就播放失败音效。
如果双方达成平手 则播放平手音效。
在 EndGame 函数的最后 我们启用玩家得分榜
UI 调用 SetTime 函数 设置游戏结束倒计时。
下面我们回到 Updata 函数中 当游戏处于胜利、
失败或者平手状态时 我们检查游戏倒计时
的结束时间,如果游戏倒计时结束 我们就调用
LeaveRoom 函数,在 LeaveRoom
函数中 [空白_录音]
我们通过 PhotonNetwork 的 LeaveRoom 函数
使玩家离开游戏房间,通过 LoadLevel
函数 加载 GameLobby 游戏大厅场景 在 PUN
回调函数 OnOhotonPlayerDisconnected
中 我们检查游戏是否处于进行状态
如果游戏处于进行状态,我们让 MasterClient
调用 CheckTeamNumber 函数,检查当前游戏中两队玩家的人数
判断是否其中一对玩家的人数为零
如果 一个队伍中的所有玩家均退出游戏
我们则判断游戏已经结束 调用
RPC 函数 UpdateScores
更新所有客户端玩家的 得分榜,最后回到
Unity 编辑器 保存当前游戏场景
以上就是本节演示的全部内容