Unreal Engine:HPバーとダメージをバインドする

My Characterノードのピンを引っ張り出して今度はgetmaxheと入力してMax Healthノードを選択します。

Healthノードのピンを引っ張って検索窓にdivideと入力してfloat/floatを選択します。

Max Healthノードと除算ノードを接続します。

最終的に以下のようにノードをつなぎ合わせます。

スポンサーリンク

爆弾クラスにダメージを追加する

Explosive.hにダメージ変数を宣言します。

UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Damage)
float Damage;

UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Damage)
TSubclassOf DamageTypeClass;

Explosive.cppのコンストラクタにDamageのデフォルト値を設定します。

AExplosive::AExplosive()
{
	Damage = 50.f;
}

Explosive.cppにApplyDamageを追加します。

void AExplosive::OnOverlapBegin(UPrimitiveComponent* OverlappedComponent, AActor* OtherActor, UPrimitiveComponent* OtherComp, int32 OtherBodyIndex, bool bFromSweep, const FHitResult& SweepResult)
{
	Super::OnOverlapBegin(OverlappedComponent, OtherActor, OtherComp, OtherBodyIndex, bFromSweep, SweepResult);

	if (OtherActor)
	{
		AMyCharacter* Char = Cast(OtherActor);
		if (Char)
		{
			if (OverlapParticles)
			{
				UGameplayStatics::SpawnEmitterAtLocation(GetWorld(), OverlapParticles, GetActorLocation(), FRotator(0.f), true);
			}
			if (OverlapSound)
			{
				UGameplayStatics::PlaySound2D(this, OverlapSound);
			}
			UAnimInstance* AnimInstance = Char->GetMesh()->GetAnimInstance();
			if (AnimInstance && Char->AttackMontage)
			{
				AnimInstance->Montage_Play(Char->AttackMontage, 1.25);
				AnimInstance->Montage_JumpToSection(FName("Damage1"), Char->AttackMontage);			
			}
			UGameplayStatics::ApplyDamage(OtherActor, Damage, nullptr, this, DamageTypeClass);

			Destroy();
		}
	}
}
スポンサーリンク

キャラクターヘルスを減らす

MyCharacter.hにいくつか関数を宣言します。

void DecrementHealth(float Amount);

virtual float TakeDamage(float DamageAmount, struct FDamageEvent const& DamageEvent, class AController* EventInstigator, AActor* DamageCauser) override;

MyCharacter.cppに関数の定義を記述します。

void AMyCharacter::DecrementHealth(float Amount)
{
	
	Health -= Amount;
	
}

float AMyCharacter::TakeDamage(float DamageAmount, struct FDamageEvent const& DamageEvent, class AController* EventInstigator, AActor* DamageCauser)
{
		
	DecrementHealt(DamageAmount);
	
	return DamageAmount;
}

最後にExplosive_BPを開いて検索窓にDamageと入力、Damage Type ClassにDamage Typeを選択してコンパイルと保存を押します。

今後の課題としては、HPバーがゼロになったらキャラクターが死ぬ設定をする必要があるということです。

スポンサーリンク
スポンサーリンク

コメント

タイトルとURLをコピーしました