射击伤害
2023年8月11日 2024年1月11日
概览
- 击中游戏角色时, 对其造成伤害
- 在代码中设置Capsule组件的碰撞反馈
搭建框架: 轨迹计算发生碰撞时, 调用MakeDamage, 传入碰撞信息
C++
ShootThemUp: Weapon/STUBaseWeapon.h
protected
1void MakeDamage(const FHitResult& HitResult);
ShootThemUp: Weapon/STUBaseWeapon.cpp
1void ASTUBaseWeapon::MakeDamage(const FHitResult& HitResult) {}
- 在MakeShot中调用MakeDamage
ShootThemUp: Weapon/STUBaseWeapon.cpp
实现MakeDamage
添加数据成员: 固定伤害值
protected
ShootThemUp: Weapon/STUBaseWeapon.h
1UPROPERTY(VisibleAnywhere, BlueprintReadWrite) 2float DamageAmount = 10.0f;
获取碰撞Actor, 对其造成伤害
ShootThemUp: Weapon/STUBaseWeapon.cpp
1const auto DamagedActor = HitResult.GetActor(); 2if (!DamagedActor) return; 3 4DamagedActor->TakeDamage(DamageAmount, FDamageEvent(), GetPlayerController(), this);
查看
虚幻编辑器
-
对游戏角色造成射击伤害
-
游戏角色死亡
游戏角色死亡后播放死亡动画倒地, 其销毁前, Capsule组件成为障碍物
虚幻编辑器
-
运行时显示Capsule组件
show collision
-
游戏角色死亡, 无法穿过竖立着的Capsule组件
游戏角色死亡后, 设置所有碰撞通道忽略Capsule组件
C++
ShootThemUp: Player/STUBaseCharacter.cpp
1#include "Components/CapsuleComponent.h" 2 3// OnDeath 4GetCapsuleComponent()->SetCollisionResponseToAllChannels(ECollisionResponse::ECR_Ignore); // 对所有channel的碰撞反馈统一进行设置
游戏角色死亡后, 武器还在
虚幻编辑器