39. 对战胜负逻辑
本节目标
让用户从地图场景进入对战场景,然后对战胜利或失败之后收起卡牌
实现过程
让用户从地图场景进入对战场景
Persistent 场景隐藏 Player 和 Gameplay Panel
Hierarchy 窗口中移除对战场景,添加map场景
清除 MapLayoutSO 中的数据
然后启动游戏,将 Map 场景设置为激活
然后点击第一排图片的房间,因为它们上面绑定了 Room 脚本,所以会广播LoadRoomEvent
事件
Persistent 场景中有两个地方监听了LoadRoomEvent
事件,它们分别是SceneLoadManager
和UIManager
SceneLoadManager.OnLoadRoomEvent
方法中,会记下当前房间和房间的编号,卸载当前激活的场景,加载房间场景,产生afterRoomLoadedEvent
事件
UIManager.OnLoadRoomEvent
方法中,会将gameplayPanel
显示出来
afterRoomLoadedEvent
事件又会被两个对象监听,它们分别是TurnBaseManager
和GameManager
TurnBaseManager.OnRoomLoadedEvent
中,会根据房间的类型显示玩家,如果是对战房间还会调用GameStart
方法
GameManager.OnRoomLoadedEvent
方法会找到当前场景中所有的敌人,然后添加到aliveEnemyList
中
最后呈现出下图的样子
胜利之后的逻辑
玩家打败敌人之后,敌人就会广播CharacterDeadEvent
事件
GameManager.OnCharacterDeadEvent
监听了这个事件,然后判断是不是敌人,如果是敌人的话,就把它从aliveEnemyList
中移除掉,当敌人数量为0之后,就产生游戏胜利的事件
有两个地方监听了游戏胜利的事件,分别是UIManager
和CardDeck
UIManager
在收到GameWinEvent
事件之后,会调用UIManager.OnGameWinEvent
,这个方法会隐藏gameplayPanel
,并显示gameWinPanel
CardDeck
在收到GameWinEvent
事件之后,会调用CardDeck.ReleaseAllCards
,这个方法会丢弃当前手上的所有卡牌,并初始化牌堆
失败之后的逻辑
Player 死亡的时候,也会广播characterDeadEvent
GameManager.OnCharacterDeadEvent
监听了这个事件,然后判断是不是玩家,如果是玩家的话,就会广播gameOverEvent
与GameWinEvent
类似,GameOverEvent
会被UIManager
和CardDeck
监听
UIManager.OnGameOverEvent
会隐藏gameplayPanel
,并显示gameOverPanel
CardDeck
在收到GameOverEvent
事件之后,会移除当前手上所有卡牌
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?