Add GridManager to spawn grid cells

This commit is contained in:
yuichipanda committed 2026-11-01 18:06:25 +09:00
1 parent c51138b0f1
commit ed2b879889
2 files changed
+109

No files matched your search

+66
View File
@@ -0,0 +1,66 @@
#include "GridManager.h"
#include "GridCell.h"
#include "Engine/World.h"
// このファイル専用のログカテゴリ
DEFINE_LOG_CATEGORY_STATIC(LogTacticaGrid, Log, All);
AGridManager::AGridManager()
{
PrimaryActorTick.bCanEverTick = false;
}
void AGridManager::BeginPlay()
{
Super::BeginPlay();
UE_LOG(LogTacticaGrid, Log, TEXT("GridManager BeginPlay: %d x %d, CellSize=%.1f"),
GridSizeX, GridSizeY, CellSize);
GenerateGrid();
}
void AGridManager::GenerateGrid()
{
UWorld* World = GetWorld();
if (!World)
{
UE_LOG(LogTacticaGrid, Error, TEXT("GetWorld() が null です"));
return;
}
if (!CellClass)
{
CellClass = AGridCell::StaticClass();
}
Cells.Reset();
const FVector Origin = GetActorLocation();
for (int32 Y = 0; Y < GridSizeY; ++Y)
{
for (int32 X = 0; X < GridSizeX; ++X)
{
const FVector Location = Origin + FVector(X * CellSize, Y * CellSize, 0.0f);
FActorSpawnParameters Params;
Params.SpawnCollisionHandlingOverride =
ESpawnActorCollisionHandlingMethod::AlwaysSpawn;
AGridCell* Cell = World->SpawnActor<AGridCell>(
CellClass, Location, FRotator::ZeroRotator, Params);
if (Cell)
{
Cell->GridCoord = FIntPoint(X, Y);
Cells.Add(Cell);
}
else
{
UE_LOG(LogTacticaGrid, Warning, TEXT("マス (%d, %d) の生成に失敗"), X, Y);
}
}
}
UE_LOG(LogTacticaGrid, Log, TEXT("%d 個のマスを生成しました"), Cells.Num());
}
+43
View File
@@ -0,0 +1,43 @@
#pragma once
#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "GridManager.generated.h"
class AGridCell;
UCLASS()
class TACTICA_API AGridManager : public AActor
{
GENERATED_BODY()
public:
AGridManager();
protected:
virtual void BeginPlay() override;
public:
// グリッドの横のマス数
UPROPERTY(EditAnywhere, Category = "Grid")
int32 GridSizeX = 3;
// グリッドの縦のマス数
UPROPERTY(EditAnywhere, Category = "Grid")
int32 GridSizeY = 3;
// 1マスの大きさ(cm)
UPROPERTY(EditAnywhere, Category = "Grid")
float CellSize = 100.0f;
// スポーンするマスのクラス(未設定ならAGridCell)
UPROPERTY(EditAnywhere, Category = "Grid")
TSubclassOf<AGridCell> CellClass;
// 生成したマスの一覧
UPROPERTY(VisibleAnywhere, Category = "Grid")
TArray<TObjectPtr<AGridCell>> Cells;
private:
void GenerateGrid();
};