簡単な2Dゲームを作ろう
2Dゲーム制作の練習シリーズです。
アンリアルエンジンで2Dゲーム制作方法をまとめていきます。
説明を省略したり、細かな数値設定などの説明をしない場合もありますので、ご参考程度で確認ください。
※作業環境:UEバージョン5.3.2 Windows11 VSCode
敵がプレイヤーを追跡
敵がプレイヤーの方向に向かって移動するようにしていきます。
コードを編集する
敵がプレイヤーを追いかけるコードを追加します。
Enemy.h
インクルードを追加します。
// 追加↓
#include "PlayerCharacter.h"
// ここまで↑
#include "Enemy.generated.h"
「public:」内に、プロパティを追加します。
UPROPERTY(VisibleAnywhere, BlueprintReadWrite)
UPaperFlipbookComponent* EnemyFlipbook;
// 追加↓
UPROPERTY(VisibleAnywhere, BlueprintReadWrite)
APlayerCharacter* Player;
UPROPERTY(VisibleAnywhere, BlueprintReadWrite)
bool IsAlive = true;
UPROPERTY(VisibleAnywhere, BlueprintReadWrite)
bool CanFollow = false;
UPROPERTY(EditAnywhere, BlueprintReadWrite)
float MovementSpeed = 50.0f;
UPROPERTY(EditAnywhere, BlueprintReadWrite)
float StopDistance = 20.0f;
// ここまで↑
AEnemy();
Enemy.cpp
インクルードを追加します。
#include "Enemy.h"
// 追加↓
#include "Kismet/GameplayStatics.h"
// ここまで↑
「AEnemy::BeginPlay(){}」内に、コードを追加します。
void AEnemy::BeginPlay()
{
Super::BeginPlay();
// 追加↓
if (!Player) // プレイヤーをまだ取得していない場合
{
AActor *PlayerActor = UGameplayStatics::GetActorOfClass(GetWorld(), APlayerCharacter::StaticClass()); // プレイヤーを取得する
if (PlayerActor) // プレイヤーが存在するなら
{
Player = Cast<APlayerCharacter>(PlayerActor); // キャストする
CanFollow = true; // 追跡モードをオン
}
}
// ここまで↑
}
「AEnemy::Tick(float DeltaTime){}」内にコードを追加します。
void AEnemy::Tick(float DeltaTime)
{
Super::Tick(DeltaTime);
// 追加↓
if (IsAlive && CanFollow && Player) // エネミーが生きていて、追跡モードオンで、プレイヤーが存在した場合
{
FVector CurrentLocaction = GetActorLocation(); // 現在の位置を取得する
FVector PlayerLocation = Player->GetActorLocation(); // プレイヤーの位置を取得する
FVector DirectionToPlayer = PlayerLocation - CurrentLocaction; // 座標を引いて
float DistanceToPlayer = DirectionToPlayer.Length(); // 距離を計算する
if (DistanceToPlayer >= StopDistance) // 停止距離より離れていれば
{
DirectionToPlayer.Normalize(); // 移動方向を取得する
FVector NewLocation = CurrentLocaction + (DirectionToPlayer * MovementSpeed * DeltaTime); // 移動位置を計算する
SetActorLocation(NewLocation); // 新しい位置に移動する
}
}
// ここまで↑
}
コードが編集できたので、保存してリフレッシュ&コンパイルします。
ブループリントを設定する
「BP_Enemy」を開いて、「Details」の「Enemy」の「Movement Speed」と「Stop Distance」の値を設定します。
「Movement Speed」が移動速度を指定します。
「Stop Distance」は、どこまで近づけるかを指定します。
対応するコード
UPROPERTY(VisibleAnywhere, BlueprintReadWrite)
APlayerCharacter* Player;
UPROPERTY(VisibleAnywhere, BlueprintReadWrite)
bool IsAlive = true;
UPROPERTY(VisibleAnywhere, BlueprintReadWrite)
bool CanFollow = false;
UPROPERTY(EditAnywhere, BlueprintReadWrite)
float MovementSpeed = 50.0f;
UPROPERTY(EditAnywhere, BlueprintReadWrite)
float StopDistance = 20.0f;
設定できたら、テストプレイします。
敵がプレイヤーを追いかけていればOKです。
敵の追跡行動実装完了
今回はここまでです。
次回は「魔法に当たり判定を付ける」です。
前後記事
前回の記事
・敵を作成する
次回の記事
・魔法に当たり判定を付ける
他の記事を探す
他の記事も気になる方は、以下の記事の目次を確認ください。