//Actor.h /** Event when this actor takes ANY damage */ voidReceiveAnyDamage(float Damage, constclass UDamageType* DamageType, class AController* InstigatedBy, AActor* DamageCauser);
/** Event when this actor takes RADIAL damage */ voidReceiveRadialDamage(float DamageReceived, constclass UDamageType* DamageType, FVector Origin, conststruct FHitResult& HitInfo, class AController* InstigatedBy, AActor* DamageCauser);
/** Event when this actor takes POINT damage */ voidReceivePointDamage(float Damage, constclass UDamageType* DamageType, FVector HitLocation, FVector HitNormal, class UPrimitiveComponent* HitComponent, FName BoneName, FVector ShotFromDirection, class AController* InstigatedBy, AActor* DamageCauser, const FHitResult& HitInfo);
此外,Actor 中还提供了对应的伤害委托事件,开发者可监听这些伤害事件。
1 2 3 4 5 6 7 8 9 10 11 12
// Actor.h /** Called when the actor is damaged in any way. */ UPROPERTY(BlueprintAssignable, Category="Game|Damage") FTakeAnyDamageSignature OnTakeAnyDamage;
/** Called when the actor is damaged by point damage. */ UPROPERTY(BlueprintAssignable, Category="Game|Damage") FTakePointDamageSignature OnTakePointDamage;
/** Called when the actor is damaged by radial damage. */ UPROPERTY(BlueprintAssignable, Category="Game|Damage") FTakeRadialDamageSignature OnTakeRadialDamage;
Actor 中有两个变量与伤害相关,bCanBeDamaged 决定该 Actor 是否可接受伤害,Instigator 则用于伤害逻辑,后面介绍。
1 2 3 4 5 6
// Actor.h /** Whether this actor can take damage. Must be true for damage events. */ uint8 bCanBeDamaged:1;
/** Pawn responsible for damage and other gameplay events caused by this actor. */ classAPawn* Instigator;