UE5.3を使用したゲーム制作備忘録を作成中!

モバイル向けゲームを作るため日々奮闘中!
同じ悩みを持つ人たちの、解決の糸口になれば幸いです。

詳細はこちら
PR
スポンサーリンク

Unreal Engine コツコツ自習_マップの移動限界範囲を設定する【2Dゲーム】

UEコツコツ自習シリーズ
スポンサーリンク

簡単な2Dゲームを作ろう

2Dゲーム制作の練習シリーズです。

アンリアルエンジンで2Dゲーム制作方法をまとめていきます。

説明を省略したり、細かな数値設定などの説明をしない場合もありますので、ご参考程度で確認ください。

※作業環境:UEバージョン5.3.2 Windows11 VSCode

マップの移動限界範囲を設定

プレイヤーが移動できるマップ範囲を指定していきます。

コードを編集する

移動範囲を指定するコードを追加します。

PlayerCharacter.h

	UPROPERTY(EditAnywhere, BlueprintReadOnly)
	UPaperFlipbook* RunFlipbook;

// 追加↓
	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	FVector2D HorizontalLimits;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	FVector2D VerticalLimits;
// ここまで↑
	void MoveTriggered(const FInputActionValue& Value);
	void MoveCompleted(const FInputActionValue& Value);

// 追加↓
	bool IsInMapBoundsHorizontal(float XPos);
	bool IsInMapBoundsVertical(float ZPos);
// ここまで↑

PlayerCharacter.cpp

ヘッダーファイルで追加した関数の関数定義を作成し、処理を追加します。

// 定義を作成
bool APlayerCharacter::IsInMapBoundsHorizontal(float XPos)
{
    // 追加↓
	bool Result = true; // 水平上の移動可能範囲であるかどうか

	Result = (XPos > HorizontalLimits.X) && (XPos < HorizontalLimits.Y); // 指定範囲外ならfalseにする

    return Result; // 移動可能かどうかの結果を返す
    // ここまで↑
}

// 定義を作成
bool APlayerCharacter::IsInMapBoundsVertical(float ZPos)
{
    // 追加↓
    bool Result = true; // 垂直上の移動可能範囲であるかどうか

	Result = (ZPos > VerticalLimits.X) && (ZPos < VerticalLimits.Y); // 指定範囲外ならfalseにする

    return Result; // 移動可能かどうかの結果を返す
    // ここまで↑
}

ここでは、プレイヤーが移動可能範囲内かどうかを確認しています。

移動可能範囲の値は後で設定します。

void APlayerCharacter::Tick(float DeltaTime)
{
	Super::Tick(DeltaTime);

	if (CanMove)
	{
		if (MovementDirection.Length() > 0.0f)
		{
			if (MovementDirection.Length() > 1.0f)
			{
				MovementDirection.Normalize();
			}

			FVector2D DistanceToMove = MovementDirection * MovementSpeed * DeltaTime;
			FVector CurrentLocation = GetActorLocation();

// 編集&追加↓
			FVector NewLocation = CurrentLocation + FVector(-DistanceToMove.X, 0.0f, 0.0f); // 水平上の新しい位置を計算する
			if (!IsInMapBoundsHorizontal(NewLocation.X)) // もし水平上の移動出来ない範囲なら
			{
				NewLocation -= FVector(-DistanceToMove.X, 0.0f, 0.0f); // 先に進まないようにする
			}

			NewLocation += FVector(0.0f, 0.0f, DistanceToMove.Y); // 垂直上の位置も確認する
			if (!IsInMapBoundsVertical(NewLocation.Z)) // もし垂直上の移動出来ない範囲なら
			{
				NewLocation -= FVector(0.0f, 0.0f, DistanceToMove.Y); // 先に進まないようにする
			}
// ここまで↑

			SetActorLocation(NewLocation);
		}
	}
}

コードの編集は完了したので、保存してコンパイルします。

ブループリントに移動範囲を設定する

移動可能範囲をブループリントに設定していきます。

「BP_PlayerCharacter」を開きます。

「Player Character」の項目に「Horizontal Limits」と「Vertical Limits」が追加されています。

下の写真の「Shoot Action」は、まだ追加する説明をしていません。
今後の記事で紹介しますので、今は気にしないでください。

対応するコード

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	FVector2D HorizontalLimits;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	FVector2D VerticalLimits;

水平、垂直方向の移動限界座標を設定します。

レベル上でトランスフォームを確認しながら値を設定してください。

テストプレイすると指定した位置から先に移動出来なくなります。

移動範囲の設定完了

今回はここまでです。

次回は「魔法発射方向を作成する」です。

前後記事

他の記事を探す

他の記事も気になる方は、以下の記事の目次を確認ください。

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