本节目标
当我点击右下角回合切换按钮的时候,会从我的回合切换到敌人回合,然后敌人回合经过几秒后回到我的回合
代码实现
TurnBaseManager 广播 playerTurnBegin 事件
首先我们需要一个TurnBaseManager
类,用于管理当前是哪个回合
using UnityEngine;
public class TurnBaseManager : MonoBehaviour
{
private bool isPlayerTurn = false;
private bool isEnemyTurn = false;
public bool battleEnd = true;
private float timeCounter;
public float enemyTurnDuration;
public float playerTurnDuration;
[Header("事件广播")]
public ObjectEventSO playerTurnBegin;
public ObjectEventSO enemyTurnBegin;
public ObjectEventSO enemyTurnEnd;
private void Update()
{
if (battleEnd)
{
return;
}
if (isEnemyTurn)
{
timeCounter += Time.deltaTime;
if (timeCounter >= enemyTurnDuration)
{
timeCounter = 0;
// 敌人回合结束
EnemyTurnEnd();
// 玩家回合开始
isPlayerTurn = true;
}
}
if (isPlayerTurn)
{
timeCounter += Time.deltaTime;
if (timeCounter >= playerTurnDuration)
{
timeCounter = 0f;
// 玩家回合开始
PlayerTurnBegin();
isPlayerTurn = false;
}
}
}
[ContextMenu("Game Start")]
public void GameStart()
{
isPlayerTurn = true;
isEnemyTurn = false;
battleEnd = false;
timeCounter = 0;
}
public void PlayerTurnBegin()
{
playerTurnBegin.RaiseEvent(null, this);
}
public void EnemyTurnBegin()
{
isEnemyTurn = true;
enemyTurnBegin.RaiseEvent(null, this);
}
public void EnemyTurnEnd()
{
isEnemyTurn = false;
enemyTurnEnd.RaiseEvent(null, this);
}
}
这段代码的运行逻辑如下,最一开始,我们执行GameStart
,然后isPlayerTurn=ture
,然后在Update
中就会调用PlayerTurnBegin()
,然后广播playerTurnBegin
事件
CardDeck 监听 playerTurnBegin 事件
当 CardDeck 收到 PlayerTurnBegin 事件之后,会调用CardDeck.NewTurnDrawCards
方法
GameplayPanel 广播 PlayerTurnEnd 事件
当玩家打完牌之后,就会点击右下角的回合结束按钮。回合结束按钮绑定了OnEndTurnButtonClicked
方法,会广播playerTurnEndEvent
事件
CardDeck 监听 PlayerTurnEnd 事件
在OnPlayerTurnEnd
方法中,首先将手牌里面的牌都添加到弃牌堆中,然后丢弃这些牌,同时发送事件更新弃牌堆数量
TurnBaseManager 监听 PlayerTurnEnd 事件
当 TurnBaseManager 收到PlayerTurnEnd
事件之后,就会调用方法TurnBaseManager.EnemyTurnBegin
,然后就会广播enemyTurnBegin
事件
好像暂时没有地方接收enemyTurnBegin
事件
在EnemyTurnBegin
方法中,isEnemyTurn=true
,然后在Update
里面就会等待一段实现,然后执行EnemyTurnEnd
(这里会广播enemyTurnEnd
事件),然后让isPlayerTurn=true
,最后回到玩家回合
界面数据
项目相关代码
代码仓库:https://gitee.com/nbda1121440/DreamOfTheKingdom.git
标签:转换,timeCounter,isPlayerTurn,30,回合,事件,TurnBaseManager,public From: https://www.cnblogs.com/hellozjf/p/18057549