第九章 战斗系统(Combat System)
在SRPG中,大多数情况是指角色与角色之间的战斗。而这种战斗一般有两种模式:
-
地图中直接战斗;
-
有专门的战斗场景。
这两种模式的战斗在数据上没有任何区别,只有战斗动画的区别。
就像之前描述的,SRPG也是RPG,所以战斗方式和回合制RPG的战斗几乎是相同的。主要区别是RPG每个回合需要手动操作(也有自动战斗的),直到战斗结束;而SRPG是自动战斗,且多数情况只有一个回合(额外回合也是由于技能、物品或剧情需要)。且RPG多数是多人战斗,而SRPG多数是每边就一个。
我们这一章就来写一个战斗系统。
文章目录
四 计算战斗数据II(Calculate Combat Data II)
在之前,我们只计算了一般情况下的战斗数据,这一节,我们来扩充它,让它可以计算其它种类的数据。
1 分离每一次行动(Battle Action)
在计算中,我们曾经:
-
public void BattleBegin()中计算了准备阶段的数据; -
private void CalcBattle(CombatVariable atkVal, CombatVariable defVal)中计算了攻击阶段的数据。
我们将这些计算方式分离出Combat,单独建立一个类来存储这些方法。
创建类BattleAction:
using UnityEngine;
namespace DR.Book.SRPG_Dev.CombatManagement
{
public enum BattleActionType
{
Unknow,
Prepare,
Attack,
MageAttack,
Heal,
// 其它自定义类型
}
public abstract class BattleAction : ScriptableObject
{
private string m_Message = "Unknow battle message.";
public string message
{
get {
return m_Message; }
protected set {
m_Message = value; }
}
public abstract BattleActionType actionType {
get; }
public abstract CombatStep CalcBattle(Combat combat, CombatVariable atkVal, CombatVariable defVal);
public abstract bool IsBattleEnd(Combat combat, CombatVariable atkVal, CombatVariable defVal);
public sealed override string ToString()
{
return m_Message;
}
}
}
而在Combat中,我们只需要调用这个类就可以了。
为了能更好的控制它们,首先需要存储它们,在Combat中添加:
public BattleAction[] m_BattleActions;
private Dictionary<BattleActionType, BattleAction> m_BattleActionDict = new Dictionary<BattleActionType, BattleAction>();
private void Awake()
{
if (m_BattleActions != null && m_BattleActions.Length > 0)
{
for (int i = 0; i < m_BattleActions.Length; i++)
{
if (m_BattleActions[i] == null)
{
continue;
}
BattleAction action = m_BattleActions[i];
if (m_BattleActionDict.ContainsKey(action.actionType))
{
Debug.LogWarningFormat(
"Battle Action {0} is exist. OVERRIDE.",
action.actionType.ToString());
}
m_BattleActionDict[action.actionType] = action;
}
}
unit0 = new CombatUnit(0);
unit1 = new CombatUnit(1);
steps = new List<CombatStep>();
}
2 准备战斗(Prepare Battle)
在public void BattleBegin()中,我们之前是计算了战斗开始的准备阶段。
为了分离它们,我们先建立PrepareAction:
using UnityEngine

本文详细介绍了SRPG游戏中战斗系统的实现,包括计算战斗数据的扩展、战斗行动的分离、准备战斗的处理、计算战斗的逻辑,并提供了测试与验证的方法。通过创建专门的类来存储和管理战斗计算方法,实现了战斗数据的多样化和控制的灵活性。
最低0.47元/天 解锁文章
1719

被折叠的 条评论
为什么被折叠?



