回合制战斗逻辑
4.优化调整技能目标的设计,原先的设计将技能目标数量也加入进去了,不好扩展和使用。现在优化为自己队伍的目标,同阵营的目标(包含自己队伍),敌方阵营目标(所有不和自己同阵营的所有阵营目标),技能的目标数量改为在编辑器设计技能的时候配置。
5.优化了友方和敌方的概念。现在同阵营都为友方,其他阵营都为敌方,敌方可能存在多个阵营,他们也可能互为敌方。比如:现在demo中的四个队伍,第一个是自己的队伍,第四个是友方队伍,他们为同阵营的单位,而第二个和第三个队伍分别为两个不同阵营,则他们互为敌对势力同时也是玩家的敌对势力。
9.增加了HeroTeam(数据对象),HeroTeamMono(运行的实例对象)类的实现,HeroTeam是一个队伍的概念,现在的开始战斗的接口增加重载方法如下,每个HeroTeam包含上阵的英雄Hero数据,TeamIndex上阵在场景第几个格子,TeamGroup所属阵营名字,TeamType由自己控制的队伍还是NPC控制的队伍。HeroTeamMono则是包含生成的HeroMono对象和其他的参数缓存,也就是运行时的实例对象。
public async void StartBattle(List<HeroTeam> teams)
{
......
}
/// <summary>
/// 当这个英雄被选择的时候
/// </summary>
protected virtual void OnHeroChoose()
{
this.SpriteRender.color = Color.red;
}
/// <summary>
/// 当这个英雄可以被选择的时候
/// </summary>
protected virtual void OnHeroCanChoose()
{
this.SpriteRender.color = Color.green;
}
/// <summary>
/// 当这个英雄设置为不可选择的状态的时候
/// </summary>
protected virtual void OnHeroCannotChoose()
{
this.SpriteRender.color = Color.white;
}
/// <summary>
/// 当这个英雄是当前执行的英雄的时候
/// </summary>
protected virtual void OnHeroActioning()
{
}
/// <summary>
/// 当这个英雄被攻击的时候
/// </summary>
protected virtual void OnHeroAttacked(HeroMono attacker,BaseSkill skill)
{
//防御的时候是判断技能属于物理还是防御,然后叠加,然后检测是否有技能对此攻击技能有影响,还有buff的影响
SkillController.Instance.DefenseSkill(attacker, this, skill);
if(skill.SkillType == Global.SkillType.Respwan)
{
this.SpriteRender.enabled = true;
}
else
{
//添加被击高亮
this.SpriteRender.color = Color.red;
this.regScheduleOnce((t,p)=>{
this.SpriteRender.color = Color.white;
},0.2f);
}
}
/// <summary>
/// 当这个英雄添加了新的buff的时候
/// </summary>
protected virtual void OnHeroAddBuff(Buff buff)
{
this.SpriteRender.color = buff.IsBuff ? Color.green : Color.gray;
this.regScheduleOnce((t,p)=>{
this.SpriteRender.color = Color.white;
},0.2f);
}
/// <summary>
/// 当这个英雄移除buff的时候
/// </summary>
protected virtual void OnHeroRemoveBuff(Buff buff)
{
this.SpriteRender.color = buff.IsBuff ? Color.yellow : Color.gray;
this.regScheduleOnce((t,p)=>{
this.SpriteRender.color = Color.white;
},0.2f);
}
/// <summary>
/// 当英雄的buff执行效果的时候
/// </summary>
/// <param name="buff"></param>
protected virtual void OnHeroBuffExcute(Buff buff)
{
this.SpriteRender.color = buff.IsBuff ? Color.green : Color.red;
this.regScheduleOnce((t,p)=>{
this.SpriteRender.color = Color.white;
},0.2f);
}
/// <summary>
/// 当这个英雄死亡的时候
/// </summary>
protected virtual void OnHeroDead()
{
this.SpriteRender.enabled = false;
}
回合制战斗系统功能说明和一些注意事项
a.核心的玩法不需要重新构建,支持扩展新技能(需要进行基类继承,目前有基础技能,基础单人目标物理技能,基础单人目标魔法技能,基础多人目标物理技能,基础多人目标魔法技能。这些类型的技能支持被动技能设置)
b.回合制游戏中可有可无的技能蓄力,技能冷却回合的设定,现有设定在设定每次战斗回合总数设定上限的情况下,能实现一次战斗中永久只能发动一次的技能冷却设定,目前不支持真正的战斗中限定一次的技能设置。技能支持暴击效果,支持MISS
d.目前为了增加同样数值情况下战斗的不可预测性,和高可玩性增加了“乱敏”设定,可在Global脚本中进行设置调节,默认是英雄在开局时候将会在自身速度的70%-100%之间随机一个速度值作为当前战斗使用的速度。如果速度相同,遵循以下原则:敌人的英雄为第一回合,自己队伍中按照排队顺序进行战斗。乱敏的好处:减少同数值战斗结果单一现象,让战斗更加不可预料。如果要关闭乱敏功能,可以将Global中HeroSpeedMix设定为1
h.使用接口非常简单,只有一个BattleController.Instance.StartBattle方法,两个参数,第一个是自己队伍的英雄数据集合,第二个敌人的队伍的英雄数据集合,具体使用参考TestCombat脚本
目前有一些测试用参数在项目中
技能设置完毕之后,可以在英雄编辑界面对指定英雄使用技能修改器,添加修改英雄的技能
buff编辑好之后可以在技能编辑界面对指定技能使用buff修改器,添加修改技能的附带buff效果