簡単な2Dゲームを作ろう
2Dゲーム制作の練習シリーズです。
アンリアルエンジンで2Dゲーム制作方法をまとめていきます。
説明を省略したり、細かな数値設定などの説明をしない場合もありますので、ご参考程度で確認ください。
※作業環境:UEバージョン5.3.2 Windows11 VSCode
魔法に当たり判定を付ける
魔法が敵に当たったときに、魔法が消えるようにしていきます。
コードを編集する
Magic.h
「public:」内にプロパティを追加します。
UPROPERTY(VisibleAnywhere, BlueprintReadWrite)
bool IsLaunched = false;
// 追加↓
UPROPERTY(VisibleAnywhere, BlueprintReadWrite)
bool IsDisabled = false;
// ここまで↑
関数も追加します。
void OnDeleteTimerTimeout();
// 追加↓
UFUNCTION()
void OverlapBegine(UPrimitiveComponent* OverlapperComponent, AActor* OtherActor, UPrimitiveComponent* OtherComp, int32 OtherBodyIndex, bool bFromSweep, const FHitResult& SweepResult);
void DisableMagic();
// ここまで↑
};
OverlapBegine()関数は、何かと接触したときの処理です。
DisableMagic()関数は、魔法を消す処理です。
Magic.cpp
インクルードを追加します。
#include "Magic.h"
// 追加↓
#include "Enemy.h"
// ここまで↑
追加した関数の定義を作成します。
// 関数定義
void AMagic::OverlapBegine(UPrimitiveComponent* OverlapperComponent, AActor* OtherActor, UPrimitiveComponent* OtherComp, int32 OtherBodyIndex, bool bFromSweep, const FHitResult& SweepResult)
{
AEnemy *Enemy = Cast<AEnemy>(OtherActor); // 接触したアクタをキャストする
if (Enemy && Enemy->IsAlive) // キャスト成功かつ敵が生きている場合
{
DisableMagic(); // 魔法を消す
}
}
// 関数定義
void AMagic::DisableMagic()
{
if (IsDisabled) return; // 魔法を消す処理に入っていれば、ここで処理を終わる(重複処理させないため)
IsDisabled = true; // 魔法を消す処理中を示す
SphereComp->SetCollisionEnabled(ECollisionEnabled::NoCollision); // コリジョンの反応をオフにする
MagicFlipbook->DestroyComponent(); // 魔法を消す
}
「AMagic::BeginPlay(){}」内に「OverlapBegine()」をセットします。
void AMagic::BeginPlay()
{
Super::BeginPlay();
// 追加↓
SphereComp->OnComponentBeginOverlap.AddDynamic(this, &AMagic::OverlapBegine); // 接触処理をセットする
// ここまで↑
}
「On Component Begine Overlap」ノードと、同じ処理になります。
コードが編集できたので、保存してリフレッシュ&コンパイルします。
テストプレイする
テストプレイして、敵に魔法を当てます。
魔法が敵に当たって消えたらOKです。
魔法当たり判定実装完了
今回はここまでです。
次回は「敵の戦闘不能を実装する」です。
前後記事
前回の記事
・敵にプレイヤーを追跡させる
次回の記事
・敵の戦闘不能を実装する
他の記事を探す
他の記事も気になる方は、以下の記事の目次を確認ください。