【UE4】蓝图中实现Projectile伤害、碰撞体伤害

先在人物基础类中写好 对应的属性(血量100,是否死亡这个布尔值,什么时候判定死亡)

void ABaseCharacter::CalculateDead() {
	if (Health <= 0)
		isDead = true;
	else 
		isDead = false;
}

void ABaseCharacter::CalculateHealth(float delta) {
	Health += delta;

	CalculateDead();
}

#if WITH_EDITOR
void ABaseCharacter::PostEditChangeProperty(FPropertyChangedEvent& PropertyChangeEvent) {
	isDead = false;
	Health = 100;

	Super::PostEditChangeProperty(PropertyChangeEvent);

	CalculateDead();
}
#endif

创建一个蓝图接口BP_Damage ,创建一个叫AffectHealth的函数,在其中创建一个float输入值作为伤害



Projectile伤害:

接下来在敌人组件中 写死亡事件

具体逻辑就是:首先,发生了AffectHealth事件,影响了血量,所以要计算血量(C++中的CalculateHealth),再用一个分支来判断血量,如果死亡便执行..,如果没死就不执行..

【UE4】蓝图中实现Projectile伤害、碰撞体伤害_第1张图片

接下来便让Projectile有伤害

具体逻辑就是,发生碰撞时,

先检测是不是有BP_Damage接口的物件,

【UE4】蓝图中实现Projectile伤害、碰撞体伤害_第2张图片

再检测是不是有不需攻击对象的tags(Friendly)【UE4】蓝图中实现Projectile伤害、碰撞体伤害_第3张图片

排除其他不需要我们攻击的Pawn,接下来用分支来判断,当的确是我们需要伤害的物体时,便执行AffectHealth来伤害,伤害完,子弹(Projectile)不能留着,固要对其进行其他操作(销毁删除之类的)



先将碰撞预设改为(和Pawn重叠时发生碰撞事件)

【UE4】蓝图中实现Projectile伤害、碰撞体伤害_第4张图片

碰撞体伤害:

【UE4】蓝图中实现Projectile伤害、碰撞体伤害_第5张图片创建好对应的碰撞体

在要被伤害的对象中加入伤害的接口【UE4】蓝图中实现Projectile伤害、碰撞体伤害_第6张图片

在被伤害的对象中写计算血量逻辑:发生AffectHealth事件,计算血量,分支如果死就销毁(print是用来看是否成功扣血)

【UE4】蓝图中实现Projectile伤害、碰撞体伤害_第7张图片

在加害者的对象中写伤害逻辑:

如果发生碰撞(ActorBeginOverlap),将碰撞到的物体类型转换成BaseCharacter(自己C++创建的那个),提取出变量称为Hero,然后每过一个DamagePerSecond便执行一次伤害事件(AffectHealth)也就是攻击频率。

如果结束碰撞了(ActorEndOverlap),判断结束碰撞的是不是Hero,如果是就清除伤害组件(SetTimerbyFunctionName里面的DamageHero)

【UE4】蓝图中实现Projectile伤害、碰撞体伤害_第8张图片

你可能感兴趣的:(UE4)