欢迎大家继续学习 Unity 编程进阶
本节我们介绍《慕课英雄2》游戏状态的管理 本节采用
PPT 讲解加项目演示的方式,介绍游戏状态管理相关的知识要点
在项目演示环节我们演示了游戏状态管理在《慕课英雄2》 项目中的具体应用,希望大家可以根据自己的专业基础和学习能力
从以下三种方法中选择一种来学习,第一种方法,先看 PPT
讲解 对相关知识有一个系统的了解,然后观看项目演示视频,学习知识点的运用
第二种方法,先看项目演示视频,了解知识要点的具体应用,再回到 PPT
讲解阶段 有针对性的学习相关的知识要点,第三种方法,跳过 PPT 讲解,直接进入项目演示
通过理解项目中知识点的运用,完成相关知识点的学习,不需回顾 PPT
讲解 下面进入 PPT 讲解阶段
首先我们使用流程图展示《慕课英雄2》的游戏状态 客户端成功加载游戏战斗场景后,游戏状态为
PreStart 游戏开始倒计时结束,或者所有客户端完成场景的加载
游戏正式开始,MasterClient 使用 RPC
发出游戏开始信号,所有客户端的游戏状态切换到 Playing
游戏进行状态 在游戏进行状态,我们需要检查游戏结束的三个条件
第一个条件,某支队伍达到目标分数表示该队伍获胜 进入
GameWin 状态,另一支队伍失败,进入 GameLose
状态 第二个条件,游戏倒计时结束,比较两支队伍的分数
分数较高的队伍获胜,分数较低的队伍失败,若两支队伍得分相同 两支队伍均进入
Tie 状态,表示游戏平手;第三个条件 某支队伍的玩家全部退出房间,判定这支队伍失败,另一支队伍获胜
这里需要注意,游戏结果只能由 MasterClient 判断
[空白_录音] 下面我们讲解
GameManager 脚本的 Update 函数 该函数负责管理游戏状态,当游戏状态为
Playing 时 根据 Slider 控件的 value 值显示本地玩家的血量
玩家按住 Tab 键,游戏画面显示玩家得分榜
MasterClient 在 Update 函数中检测游戏结束条件是否满足
如果某支队伍得分达到目标分数,MasterClient 使用
RPC 调用所有客户端的 Endgame 函数,Endgame 函数改变游戏的 Playing
状态 函数参数表示获胜队伍的名字,如果游戏倒计时结束,MasterClient
根据两个队伍的得分 判断获胜的队伍,MasterClient 使用 RPC
以胜利队伍或者平手信息作为函数参数调用所有客户端的 Endgame
函数 下面讲解 Endgame
函数 如果某支队伍获胜,游戏结束信息 gameResult
显示获胜队伍的名字,如果两队打成平手,两队进入 Tie 平手状态
游戏的结束信息包含 Tie 字符串,游戏播放平手音效表示双方打平
如果玩家属于获胜队伍 表示玩家获胜,游戏进入
GameWin 状态,播放游戏胜利音效 如果玩家不属于胜利队伍,表示玩家失败,游戏进入
GameLose 状态 播放游戏失败音效,游戏状态切换后
调用 SetActive 函数,激活玩家得分榜
显示所有玩家最后的得分情况,调用 SetTime 函数
设置游戏退出战斗场景的倒计时 在 GameManager
脚本中,我们复习了 Innerfit PUN Callback 类的回调函数,OnPhotonPlayerDisconnected
当玩家离开房间时,该函数被调用 在 OnPhotonPlayerDisconnected
函数中 如果游戏不处于游戏进行状态,函数直接返回
如果游戏处于游戏进行状态,MasterClient 调用 CheckTeamNumber
函数 检查两支队伍的人数,MasterClient 使用 RPC
调用所有客户端的 UpdateScore 函数,删除离开房间的玩家得分信息
在 CheckTeamNumber
函数中 我们使用 PhotonNetwork.playerList
获取游戏房间的玩家列表 使用 foreach 语句遍历玩家列表
根据每位玩家的自定义属性 team,计算两支队伍的人数
如果某支队伍的玩家为 0,表示另一支队伍获胜
MasterClient 使用 RPC 调用所有客户端的 Endgame 函数
告知所有客户端另一支队伍获胜 下面我们介绍游戏结束时
游戏状态的管理,当游戏状态为 GameWin GameLose
或平手状态时,客户端检查游戏结束倒计时是否结束 当倒计时结束,客户端调用
PhotonNetwork.LeaveRoom 函数
离开游戏房间,返回游戏大厅 客户端调用 PhotonNetwork.LoadLevel
函数 重新加载游戏大厅场景,GameLobby
当客户端加载 GameLobby 场景后 执行
MainPanelController 脚本的 Start 函数,在 Start 函数中
检查客户端与 Photon 服务器的连接状态,客户端从 GameScene
场景切换到 GameLobby 场景时 不会断开 Photon 服务器的连接,客户端调用 SetLobbyPanelActive
函数 激活游戏大厅面板,玩家返回游戏大厅后可以选择房间开始新的游戏
或者注销账号退出游戏 下一节,我们讲解网络游戏中
场景收集物的实现,最后进入演示环节
演示环节的内容为设置游戏管理类 GameManager 相关参数 完成游戏状态管理