[UE4]設計図に発射物のダメージと衝突のダメージを実装する



Implement Projectile Damage



まず、対応する属性を基本文字クラスに書き込みます(HPは100、死ぬかどうかのブール値、および死を決定するタイミング)

void ABaseCharacter::CalculateDead() { if (Health <= 0) isDead = true else isDead = false } void ABaseCharacter::CalculateHealth(float delta) { Health += delta CalculateDead() } #if WITH_EDITOR void ABaseCharacter::PostEditChangeProperty(FPropertyChangedEvent& PropertyChangeEvent) { isDead = false Health = 100 Super::PostEditChangeProperty(PropertyChangeEvent) CalculateDead() } #endif

ブループリントインターフェイスBP_Damageを作成し、AffectHealthという関数を作成し、ダメージとしてfloat入力値を作成します







発射物の損傷:

次に、敵のコンポーネントにデスイベントを書き込みます

具体的なロジックは次のとおりです。最初に、血液量に影響を与えるAffectHealthイベントが発生したため、血液量を計算し(C ++ではCalculateHealth)、次にブランチを使用して血液量を決定する必要があります。死んでいる場合は実行します。死んでいない場合は実行しません。 ..




次に、発射物を傷つけます

特定のロジックは、衝突が発生したときに、

まず、BP_Damageインターフェースを持つオブジェクトがあるかどうかを確認します。

攻撃する必要のないタグがあるかどうかをもう一度確認してください(フレンドリー)

攻撃する必要のない他のポーンを除外し、ブランチを使用して判断します。それが実際にダメージを与える必要のあるオブジェクトである場合、ダメージを与えるためにAffectHealthを実行します。ダメージが完了すると、弾丸(発射物)を保持できなくなるため、他の操作を行う必要があります。 (破棄、削除など)



まず、衝突プリセットをに変更します (衝突イベントはポーンと重なると発生します)


衝突体の損傷:

対応するコライダーを作成します

損傷するオブジェクトに損傷インターフェースを追加します

負傷したオブジェクトの血液量を計算するためのロジックを記述します。AffectHealthイベントが発生し、血液量が計算され、枝が死ぬと枝が破壊されます(印刷は血液が正常に差し引かれたかどうかを確認するために使用されます)


加害者のオブジェクトに傷害ロジックを記述します。

衝突が発生した場合(ActorBeginOverlap)、衝突したオブジェクトのタイプをBaseCharacter(独自のC ++によって作成されたもの)に変換し、Heroという変数を抽出し、DamagePerSecondが渡されるたびに傷害イベント(AffectHealth)を実行します。は攻撃頻度です。

衝突が終了した場合(ActorEndOverlap)、衝突が終了したのがHeroであるかどうかを判断し、終了した場合は、ダメージコンポーネント(SetTimerbyFunctionNameのDamageHero)をクリアします。