今回はアクターにダメージを与えるので
UE4/Engine/Source/Runtime/Engine/Classes/GameFramwork/Actor.h
が持っているTakeDamageを使う
/ **
*このアクターにダメージを与えます。
* @see https://www.unrealengine.com/blog/damage-in-ue4
* @paramDamageAmount適用するダメージの量
* @paramDamageEvent受けたダメージを完全に説明するデータパッケージ。
* @paramEventInstigator損傷の原因となったコントローラー。
* @param DamageCauserダメージを直接引き起こしたアクター(爆発した発射物、着地した岩など)
* @ return実際に適用されたダメージの量。
* /
/**
* Apply damage to this actor.
* @see https://www.unrealengine.com/blog/damage-in-ue4
* @param DamageAmount How much damage to apply
* @param DamageEvent Data package that fully describes the damage received.
* @param EventInstigator The Controller responsible for the damage.
* @param DamageCauser The Actor that directly caused the damage (e.g. the projectile that exploded, the rock that landed on you)
* @return The amount of damage actually applied.
*/
virtual float TakeDamage(float DamageAmount, struct FDamageEvent const& DamageEvent, class AController* EventInstigator, AActor* DamageCauser);
で引数にあるDamageEventはたくさん種類あるみたい。
今回は銃なのでFPointDamageEventを使った。
FPointDamageEvent DamageEvent(Damage,Hit,ShotDirection,nullptr);
でアクターにヒットしたときTakeDamageを呼ぶというのはこうなる。
AActor* HitActor= Hit.GetActor();
if (HitActor!=nullptr)
{
FPointDamageEvent DamageEvent(Damage,Hit,ShotDirection,nullptr);
HitActor->TakeDamage(Damage,DamageEvent,OwnerController,this);
}
絵的にはなにもかわりません。
コメント