我们现在已经有了四个敌人角色,接下来,处理一下在战斗中遇到的问题。
处理角色死亡后还会攻击的问题
因为我们有角色溶解的效果,角色在死亡以后的5秒钟才会被销毁掉。所以在这五秒钟之内,角色其实还是会攻击。主要时因为AI行为树不知道角色已经死亡,所以,我们需要在行为树里增加对角色死亡的判断。
我们在黑板增加一个黑板键,命名为Dead
接下来,我们打开代码编辑器,在角色死亡时,将黑板键设置为true
void ARPGEnemy::Die()
{
SetLifeSpan(LifeSpan);
if(RPGAIController) RPGAIController->GetBlackboardComponent()->SetValueAsBool(FName("Dead"), true); //设置死亡,停止AI行为树
Super::Die();
}
有了黑板键,我们在AI行为树中增加一个装饰器,用于判断后续逻辑是否需要执行
在设置这里,判断Dead黑板键,如果已被设置,将终止后续的所有逻辑操作
碰撞问题
关于碰撞,这里在设置一下,因为移动碰撞我们使用的角色基类内置的胶囊体组件。鼠标选中需要使用角色身上的碰撞进行查询,所以,我们将其设置了开,但是,因为身体时包裹在胶囊体组件里面,所以,我们不需要它触发和技能的检测,这个交给胶囊体组件即可。
所以,我们最终的设置为
胶囊体组件:需要开启重叠事件,用于接受投掷物的碰撞检测,检测响应关闭,用于防止被鼠标拾取到和阻挡相机将相机拉进,还有和火球的重叠需要设置为重叠
网格体碰撞:主要是为了能够被鼠标选中,让玩家攻击,所以,我们需要将碰撞设置为可以查询,并且将通道Visibility设置为阻挡
武器不需要碰撞,只用作展示,所以我们将其设置了没有碰撞