前回はキャラクターが触れると爆発する爆弾を作成しましたが、今回はタイマーによって設定された時間に合わせて爆発する時限爆弾を作成します。時限爆弾なのでキャラクターが触れても爆発はしませんが、キャラクターが爆発のダメージを受けるエリアにいた場合はダメージを受ける仕組みになっています。
contents
スポンサーリンク
C++手榴弾クラスの作成
親クラスをアイテムに手榴弾クラスを新規作成します。
名前はここではGrenadeにしています。
Grenade.hに関数と変数を宣言します。
public: AGrenade(); protected: virtual void BeginPlay() override; public: virtual void Tick(float DeltaTime) override; UFUNCTION() void OnExplode(); UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Damage) float Damage;
Grenade.cppのコンストラクタにDamageのデフォルト値を設定します。
AGrenade::AGrenade() { Damage = 100.f; }
Grenade.cppに関数の定義を記述します。
void AGrenade::OnExplode() { if (OverlapParticles) { UGameplayStatics::SpawnEmitterAtLocation(GetWorld(), OverlapParticles, GetActorLocation(), FRotator(0.f), true); } if (OverlapSound) { UGameplayStatics::PlaySound2D(this, OverlapSound); } TArray<AActor*> Actors; GetOverlappingActors(Actors, UDamageType::StaticClass()); for (auto Actor : Actors) { UGameplayStatics::ApplyDamage(Actor, Damage, nullptr, this, UDamageType::StaticClass()); } Destroy(); }
Grenade.cppのBeginPlayに手榴弾のタイマー設定をします。
FTimerHandle TimerHandle; GetWorld()->GetTimerManager().SetTimer(TimerHandle, this, &AGrenade::OnExplode, 4.0f, false);
ここで一旦Ctrl+F5を押してコンパイル後にUE4エディタを起動します。
スポンサーリンク
手榴弾をブループリントで設定する。
C++クラスのGrenadeをベースにブループリントを新規に作成します。
作成フォルダにBlueprintを選択して名前はここではGrenade_BPにしています。OverlapParticlesとOverlapSoundには爆弾と同じアセットを設定するのが手っ取り早いです。
次回は爆弾が爆発した場合、周囲のアセットが吹き飛ぶようにラディアルフォースの要素を付加しよう思います。
スポンサーリンク
スポンサーリンク
コメント