【UE4】蓝图中实现Projectile伤害、碰撞体伤害
2018-03-23 10:43
2226 查看
先在人物基础类中写好 对应的属性(血量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),再用一个分支来判断血量,如果死亡便执行..,如果没死就不执行..
接下来便让Projectile有伤害
具体逻辑就是,发生碰撞时,
先检测是不是有BP_Damage接口的物件,
再检测是不是有不需攻击对象的tags(Friendly)
,
排除其他不需要我们攻击的Pawn,接下来用分支来判断,当的确是我们需要伤害的物体时,便执行AffectHealth来伤害,伤害完,子弹(Projectile)不能留着,固要对其进行其他操作(销毁删除之类的)
先将碰撞预设改为
(和Pawn重叠时发生碰撞事件)
碰撞体伤害:
创建好对应的碰撞体
在要被伤害的对象中加入伤害的接口
在被伤害的对象中写计算血量逻辑:发生AffectHealth事件,计算血量,分支如果死就销毁(print是用来看是否成功扣血)
在加害者的对象中写伤害逻辑:
如果发生碰撞(ActorBeginOverlap),将碰撞到的物体类型转换成BaseCharacter(自己C++创建的那个),提取出变量称为Hero,然后每过一个DamagePerSecond便执行一次伤害事件(AffectHealth)也就是攻击频率。
如果结束碰撞了(ActorEndOverlap),判断结束碰撞的是不是Hero,如果是就清除伤害组件(SetTimerbyFunctionName里面的DamageHero)
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),再用一个分支来判断血量,如果死亡便执行..,如果没死就不执行..
接下来便让Projectile有伤害
具体逻辑就是,发生碰撞时,
先检测是不是有BP_Damage接口的物件,
再检测是不是有不需攻击对象的tags(Friendly)
,
排除其他不需要我们攻击的Pawn,接下来用分支来判断,当的确是我们需要伤害的物体时,便执行AffectHealth来伤害,伤害完,子弹(Projectile)不能留着,固要对其进行其他操作(销毁删除之类的)
先将碰撞预设改为
(和Pawn重叠时发生碰撞事件)
碰撞体伤害:
创建好对应的碰撞体
在要被伤害的对象中加入伤害的接口
在被伤害的对象中写计算血量逻辑:发生AffectHealth事件,计算血量,分支如果死就销毁(print是用来看是否成功扣血)
在加害者的对象中写伤害逻辑:
如果发生碰撞(ActorBeginOverlap),将碰撞到的物体类型转换成BaseCharacter(自己C++创建的那个),提取出变量称为Hero,然后每过一个DamagePerSecond便执行一次伤害事件(AffectHealth)也就是攻击频率。
如果结束碰撞了(ActorEndOverlap),判断结束碰撞的是不是Hero,如果是就清除伤害组件(SetTimerbyFunctionName里面的DamageHero)
相关文章推荐
- UE4 蓝图 实现 数组的边遍历边删除
- Ue4 BluePrint蓝图实现镜头(视角)切换及摆动范围(二)
- UE4]不使用角色蓝图、动画蓝图、状态机,用“24K纯C++”实现动画播放
- UE4蓝图实现 在碰撞情况下 按键开门
- Ue4 BluePrint蓝图实现镜头(视角)切换及摆动范围(三)
- UE4通过代码逻辑触发相应事件,相应事件逻辑在蓝图实现
- UE4里用【蓝图】实现物体在场景中 旋转
- UE4-碰撞事件:开关门蓝图类实现提升篇
- Ue4 BluePrint蓝图实现镜头(视角)切换及摆动范围(一)
- UE4中蓝图实现小地图——雷达图篇
- UE4 学习9 蓝图实现下拉菜单
- [UE4教程] UE4蓝图总结(入门)
- UE4蓝图比较合并
- [UE4]状态机,实现动画播放
- UE4蓝图案例:制作一个日夜变化的场景
- 图形化权限的设计与实现[蓝图篇](二)
- [UE4蓝图教程]蓝图入门之蓝图通信机制入门
- [UE4]C++实现动态加载的问题:LoadClass<T>()和LoadObject<T>()
- UE4蓝图发射子弹
- UE4 蓝图教程(二) 蓝图