簡単な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;
水平、垂直方向の移動限界座標を設定します。
レベル上でトランスフォームを確認しながら値を設定してください。
テストプレイすると指定した位置から先に移動出来なくなります。
移動範囲の設定完了
今回はここまでです。
次回は「魔法発射方向を作成する」です。
前後記事
次回の記事
・魔法発射方向を作成する
他の記事を探す
他の記事も気になる方は、以下の記事の目次を確認ください。