【UE4 C++】实现发出伤害与接收伤害
生活随笔
收集整理的這篇文章主要介紹了
【UE4 C++】实现发出伤害与接收伤害
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
效果展示
敵人攻擊玩家,玩家會扣血,玩家攻擊敵人,也會扣血。
圖中,敵人對玩家進行了攻擊嗎,釋放出了火的粒子特效,玩家受到傷害扣了血。
玩家也對敵人進行了攻擊,秒殺,敵人有一個死亡動畫。
玩家血量為0時也會死亡。
死亡之后一切碰撞響應都關閉了,穿模了😓
添加死亡動畫
在各自的蒙太奇中添加死亡動畫,
后面隨便添加一個動畫,防止死亡之后又出現另一個蒙太奇動畫的現象。
添加DeathEnd通知,這個點在動畫結束的前一點點:
C++代碼
Role 第三人稱角色
.h
// 重載接受傷害的函數 virtual float TakeDamage(float DamageAmount, struct FDamageEvent const& DamageEvent,class AController* EventInstigator, AActor* DamageCauser) override;// 死亡后的處理 UFUNCTION(BlueprintCallable)void DeathEnd();.cpp
- TakeDamage
- 完善Die
添加頭文件: #include "Components/CapsuleComponent.h"
void ARole::Die() {// 當調用到他的時候就說明任務已經死了,把動畫調用出來,進行播放,碰撞響應關閉。UAnimInstance* Instance = GetMesh()->GetAnimInstance(); if (_AnimMontage && Instance) {Instance->Montage_Play(_AnimMontage);Instance->Montage_JumpToSection(FName("Death"), _AnimMontage);}GetCapsuleComponent()->SetCollisionEnabled(ECollisionEnabled::NoCollision); }- DeathEnd
角色動畫中需要添加:
記得編譯。
當人物血條為空的時候,調用Die - 調用死亡動畫 - 動畫結束通知 - 調用DeathEnd;
Weapon
.h
// 武器的傷害 UPROPERTY(EditAnywhere, BlueprintReadWrite)float Damage;// 接受傷害的類型 UPROPERTY(EditAnywhere, BlueprintReadWrite)TSubclassOf<UDamageType> DamageTypeClass;.cpp
- 初始化
Damage = 10;
AttackTracer
.cpp
- NotifyTick
添加:
if (Player->GetWeapon()->DamageTypeClass) {UGameplayStatics::ApplyDamage(HitEnemy, Player->GetWeapon()->Damage, Player->GetController(), Player->GetWeapon(), Player->GetWeapon()->DamageTypeClass); }對敵人HitEnemy造成Damage傷害。
ApplyDamage提供傷害,TakeDamage接受傷害。
Enemy
.h
// 死亡函數 void Die();// 重載接受傷害函數 virtual float TakeDamage(float DamageAmount, struct FDamageEvent const& DamageEvent,class AController* EventInstigator, AActor* DamageCauser) override;// 敵人攻擊造成的傷害。 UPROPERTY(EditAnywhere, BlueprintReadWrite)float Damage;// 攻擊傷害類型 UPROPERTY(EditAnywhere, BlueprintReadWrite)TSubclassOf<UDamageType> DamageTypeClass;// 敵人當前血量 UPROPERTY(EditAnywhere, BlueprintReadWrite)float Health;// 敵人最大血量 UPROPERTY(EditDefaultsOnly, BlueprintReadWrite)float MaxHealth;// 死亡動畫結束調用的函數 UFUNCTION(BlueprintCallable)void DeathEnd();.cpp
- 構造函數,初始化操作
- 接受傷害函數TakeDamage
- Die()
- DeathEnd
在敵人的動畫藍圖中添加:
結束!趕緊試試吧~
總結
以上是生活随笔為你收集整理的【UE4 C++】实现发出伤害与接收伤害的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: IPTV系统中EPG模块的设计与实现
- 下一篇: 真 · 前端Vue实战:头条新闻开发项目