RPG38.角色受击
1.创建一个GA,用于设置角色的受击
创建蒙太奇,设置插槽
然后进入GA_Enemy_MeleeAttack,敌人的攻击。当enemy攻击命中player后,将发送对应tag激活ga。
然后打开DA_PlayerStartUpAbilities
2.玩家受击时的反应
先打开玩家的骨骼
3。打开XMBWarriorFunctionLibrary.h
//player受到打击时,确定打击的方向从而确定受击蒙太奇UFUNCTION(BlueprintPure, Category = "XMBWorrior|FunctionLibrary")static FGameplayTag ComputeHitReactDirectionTag(AActor* InAttacker, AActor* InVictim, float& OutAngleDifference);
FGameplayTag UXMBWarriorFunctionLibrary::ComputeHitReactDirectionTag(AActor* InAttacker, AActor* InVictim,float& OutAngleDifference)
{check(InAttacker && InVictim);const FVector VictimForward = InVictim->GetActorForwardVector();const FVector VictimToAttackerNormalized = (InAttacker->GetActorLocation() - InVictim->GetActorLocation()).GetSafeNormal();const float DotResult = FVector::DotProduct(VictimForward, VictimToAttackerNormalized);OutAngleDifference = UKismetMathLibrary::DegAcos(DotResult);const FVector CrossResult = FVector::CrossProduct(VictimForward, VictimToAttackerNormalized);if (CrossResult.Z < 0.f){OutAngleDifference *= -1.f;}if (OutAngleDifference >= -45.f && OutAngleDifference <= 45.f){return XMBGameplayTags::Shared_Status_HitReact_Front;}else if (OutAngleDifference < -45.f && OutAngleDifference >= -135.f){return XMBGameplayTags::Shared_Status_HitReact_Left;}else if (OutAngleDifference < -135.f || OutAngleDifference > 135.f){return XMBGameplayTags::Shared_Status_HitReact_Back;}else if (OutAngleDifference > 45.f && OutAngleDifference <= 135.f){return XMBGameplayTags::Shared_Status_HitReact_Right;}return XMBGameplayTags::Shared_Status_HitReact_Front;}
创建四个方向的tag
ARPG_GRIVITY_API UE_DECLARE_GAMEPLAY_TAG_EXTERN(Shared_Status_HitReact_Front);ARPG_GRIVITY_API UE_DECLARE_GAMEPLAY_TAG_EXTERN(Shared_Status_HitReact_Left);ARPG_GRIVITY_API UE_DECLARE_GAMEPLAY_TAG_EXTERN(Shared_Status_HitReact_Right);ARPG_GRIVITY_API UE_DECLARE_GAMEPLAY_TAG_EXTERN(Shared_Status_HitReact_Back);
UE_DEFINE_GAMEPLAY_TAG(Shared_Status_HitReact_Front, "Shared.Status.HitReact.Front");UE_DEFINE_GAMEPLAY_TAG(Shared_Status_HitReact_Left, "Shared.Status.HitReact.Left");UE_DEFINE_GAMEPLAY_TAG(Shared_Status_HitReact_Right, "Shared.Status.HitReact.Right");UE_DEFINE_GAMEPLAY_TAG(Shared_Status_HitReact_Back, "Shared.Status.HitReact.Back");
4.为了更好地体现动画,进入ABP_XMBHero