本节目标
让用户从地图场景进入对战场景,然后对战胜利或失败之后收起卡牌
实现过程
让用户从地图场景进入对战场景
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
事件之后,会移除当前手上所有卡牌
项目相关代码
代码仓库:https://gitee.com/nbda1121440/DreamOfTheKingdom.git
标签:39,场景,逻辑,对战,事件,战胜,UIManager,监听,CardDeck From: https://www.cnblogs.com/hellozjf/p/18067624