战斗系统:需要贴合TRPG的要素,那就是掷骰子,问题来了。掷骰子对人物的影响?是玩家事先选择技能进行发动掷骰子决定伤害效果,还是根据掷骰子决定玩家的技能呢?第一种掷骰子的影响比较小,第二种骰子的影响比较大。而且TRPG的要素之一就是玩家掷出的点数影响游戏进程。(欢迎就掷骰子影响技能发动的问题留言)
当下决定:根据掷骰子决定给玩家的技能阶级。
1、使用GAS
启用插件,添加 "GameplayAbilities", "GameplayTags", "GameplayTasks" ,"AIModule"等模块到build.cs中
为了使得能够使用技能,需要继承接口:IAbilitySystemInterface;该接口没法用蓝图直接继承,需要实现接口中的纯需方法
2、AttributeSet属性集:生命、法力、攻击、防御、(剔除经验与等级,声望等),尽量简单
在属性被修改之前,PreAttributeChange 函数处理以最大值为限的当前生命值/法力调整。在属性被修改之后,PostGameplayEffectExecute 函数处理限制并将更改告知给其他对象。需要手动定义委托将属性值修改事件广播出去。
FOnAttributeSetChangeDelegate OnHealthChange;
OnHealthChange.BroadCast(Health.GetCurrentValue(), MaxHealth.GetCurrentValue());
AttributeSetComp->OnHealthChange.AddDynamic(this, &ACharacterBase::OnHealthChange);
void ACharacterBase::OnHealthChange(float Health, float MaxHealth)
{
BP_OnHealthChange(Health, MaxHealth);
}
3、角色基本属性:
是否死亡、移动步数、是否在己方回合、掷出的骰子数值。
需要设置装备的staticMesh对NavMesh的影响为false
开发测试阶段动画逻辑尽量简单。(后期再考虑武器的类型,是否有武器,切换武器,负重等等)
TODO:
先实现普攻技能的战斗逻辑。后记,其实这个战斗系统也可以很简单,用不到GAS。但是为了省写一个技能系统并且考虑到复用性还是使用GAS。