From 56994b3927bb1509aa063b3b9d5212606aeac412 Mon Sep 17 00:00:00 2001 From: wyatt Date: Sun, 26 Oct 2025 19:01:10 +0800 Subject: [PATCH] =?UTF-8?q?Lua=E5=90=91C#=E9=80=BB=E8=BE=91=E8=BF=81?= =?UTF-8?q?=E7=A7=BB=20=E4=B8=80=E6=9C=9F=20#13?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 瓦片地图实现修改 --- .../Private/Gas/BusyGameAbility.cpp | 1 - .../Actor/Components/BusyPawnMovement.cpp | 1 - .../StaticResourceLayerComponent.cpp | 1 - .../Map/Components/TerrainLayerComponent.cpp | 39 ++++++++++++------- .../Map/Components/TerrainLayerComponent.h | 14 ++++++- 5 files changed, 36 insertions(+), 20 deletions(-) diff --git a/Source/BusyRabbit/Private/Gas/BusyGameAbility.cpp b/Source/BusyRabbit/Private/Gas/BusyGameAbility.cpp index 09e784d..5a0decc 100644 --- a/Source/BusyRabbit/Private/Gas/BusyGameAbility.cpp +++ b/Source/BusyRabbit/Private/Gas/BusyGameAbility.cpp @@ -2,7 +2,6 @@ #include "AbilitySystemBlueprintLibrary.h" #include "AbilitySystemComponent.h" -#pragma optimize("", off) void UBusyGameAbility::OnGiveAbility(const FGameplayAbilityActorInfo* ActorInfo, const FGameplayAbilitySpec& Spec) { Super::OnGiveAbility(ActorInfo, Spec); diff --git a/Source/BusyRabbit/Private/Level/Actor/Components/BusyPawnMovement.cpp b/Source/BusyRabbit/Private/Level/Actor/Components/BusyPawnMovement.cpp index b4bd5df..607d6fa 100644 --- a/Source/BusyRabbit/Private/Level/Actor/Components/BusyPawnMovement.cpp +++ b/Source/BusyRabbit/Private/Level/Actor/Components/BusyPawnMovement.cpp @@ -84,7 +84,6 @@ void UBusyPawnMovement::TickComponent(float DeltaTime, ELevelTick TickType, } -#pragma optimize("", off) void UBusyPawnMovement::MoveTick(const float DeltaTime) { diff --git a/Source/BusyRabbit/Private/Level/Map/Components/StaticResourceLayerComponent.cpp b/Source/BusyRabbit/Private/Level/Map/Components/StaticResourceLayerComponent.cpp index fa19967..6cc9ce4 100644 --- a/Source/BusyRabbit/Private/Level/Map/Components/StaticResourceLayerComponent.cpp +++ b/Source/BusyRabbit/Private/Level/Map/Components/StaticResourceLayerComponent.cpp @@ -142,7 +142,6 @@ void UStaticResourceLayerComponent::GetAlwaysPresentResourceList(TMap>& OutResourcesWeight) const { diff --git a/Source/BusyRabbit/Private/Level/Map/Components/TerrainLayerComponent.cpp b/Source/BusyRabbit/Private/Level/Map/Components/TerrainLayerComponent.cpp index 19b1a04..26d46ee 100644 --- a/Source/BusyRabbit/Private/Level/Map/Components/TerrainLayerComponent.cpp +++ b/Source/BusyRabbit/Private/Level/Map/Components/TerrainLayerComponent.cpp @@ -1,10 +1,15 @@ #include "Level/Map/Components/TerrainLayerComponent.h" + +#include "PaperTerrainActor.h" +#include "PaperTerrainComponent.h" #include "Level/Generator/VoronoiTerrainGenerator.h" #include "Paper2D/Classes/PaperTileLayer.h" #include "Paper2D/Classes/PaperTileMapComponent.h" #include "Paper2D/Classes/PaperTileSet.h" #include "PaperTileMap.h" +#include "PaperTileMapActor.h" #include "Level/Map/GameMapActor.h" +#include "UniversalObjectLocators/UniversalObjectLocatorUtils.h" /* 相邻四格地形信息映射到TileSet的索引 @@ -115,15 +120,16 @@ static bool GenerateTerrain(const TArray& InTerrains, const TArray static UPaperTileLayer* GetTileMapLayer( const FGameplayTag& InTerrainType, - const TMap>& TileMapMeshes + const TMap>& TileMapActors ){ // 将给定的数据绘制到TileMapLayer上 - const TObjectPtr *TileMapMesh = TileMapMeshes.Find(InTerrainType); - if (!TileMapMesh) + const TObjectPtr *TileMapActor = TileMapActors.Find(InTerrainType); + if (!TileMapActor) { return nullptr; } - const TObjectPtr TileMap = TileMapMesh->Get()->TileMap; + UPaperTileMapComponent *Component = TileMapActor->Get()->GetRenderComponent(); + const TObjectPtr TileMap = Component->TileMap; if (!TileMap) { return nullptr; @@ -165,7 +171,7 @@ UTerrainLayerComponent::UTerrainLayerComponent() void UTerrainLayerComponent::BeginPlay() { Super::BeginPlay(); - SetupTerrainMeshes(); + SetupTerrainActors(); TArray Priority; TArray TerrainData; @@ -185,7 +191,7 @@ void UTerrainLayerComponent::SetTerrainDataWithType(const FGameplayTag& InTerrai { // 将给定的数据绘制到TileMapLayer上 UPaperTileSet* TileSet = GetMapTileSet(InTerrainType, TileSetConfigs); - UPaperTileLayer *TileMapLayer = GetTileMapLayer(InTerrainType, TerrainMeshes); + UPaperTileLayer *TileMapLayer = GetTileMapLayer(InTerrainType, TerrainActors); if (!TileSet || !TileMapLayer) { UE_LOG(LogTemp, Warning, TEXT("UTerrainLayerComponent::SetTerrainData")); @@ -244,17 +250,17 @@ FGameplayTag UTerrainLayerComponent::GetTerrainAt(const int32 X, const int32 Y) } -void UTerrainLayerComponent::SetupTerrainMeshes() +void UTerrainLayerComponent::SetupTerrainActors() { if (TileSetConfigs.Num() == 0) { return; } - TerrainMeshes.Empty(); - USceneComponent *RootScene = GetOwner()->GetRootComponent(); + TerrainActors.Empty(); int32 Z = 0; + float ZOrder = 0.f; for (const FGameplayTag &TerrainType : GetSortedTerrainsWithPriority()) { if (TileSetConfigs.Find(TerrainType) == nullptr) @@ -262,10 +268,11 @@ void UTerrainLayerComponent::SetupTerrainMeshes() continue; } - // 创建一个新的TileMap组件,新的TileMap,新的TileLayer - auto* NewTileMapMesh = NewObject(this); - NewTileMapMesh->RegisterComponent(); + UWorld* World = GetWorld(); + APaperTileMapActor* TileMapActor = World->SpawnActor(); + UPaperTileMapComponent* NewTileMapMesh = TileMapActor->GetRenderComponent(); + UPaperTileMap* NewTileMap = NewObject(NewTileMapMesh); @@ -280,9 +287,11 @@ void UTerrainLayerComponent::SetupTerrainMeshes() NewTileMap->TileLayers.Add(NewLayer); NewTileMapMesh->SetTileMap(NewTileMap); - NewTileMapMesh->SetRelativeLocation(FVector(-(NewTileMap->TileWidth / 2), -(NewTileMap->TileHeight / 2), Z++)); + NewTileMapMesh->SetRelativeLocation(FVector(-(NewTileMap->TileWidth / 2), -(NewTileMap->TileHeight / 2), 0)); NewTileMapMesh->SetRelativeRotation(FRotator(0, 0, -90)); - NewTileMapMesh->AttachToComponent(RootScene, FAttachmentTransformRules::KeepWorldTransform); - TerrainMeshes.Add(TerrainType, NewTileMapMesh); + + TileMapActor->SetActorLocation(FVector(0, 0, ZOrder)); + ZOrder = ZOrder + 0.01; + TerrainActors.Add(TerrainType, TileMapActor); } } diff --git a/Source/BusyRabbit/Public/Level/Map/Components/TerrainLayerComponent.h b/Source/BusyRabbit/Public/Level/Map/Components/TerrainLayerComponent.h index b7d60d8..ae0b58c 100644 --- a/Source/BusyRabbit/Public/Level/Map/Components/TerrainLayerComponent.h +++ b/Source/BusyRabbit/Public/Level/Map/Components/TerrainLayerComponent.h @@ -6,6 +6,9 @@ #include "TerrainLayerComponent.generated.h" +class APaperTileMapActor; + + USTRUCT(BlueprintType) struct FTerrainTileSetConfig{ GENERATED_BODY() @@ -51,7 +54,9 @@ public: FGameplayTag GetTerrainAt(const int32 X, const int32 Y); protected: - void SetupTerrainMeshes(); + // void SetupTerrainMeshes(); + + void SetupTerrainActors(); void SetTerrainDataWithType(const FGameplayTag& InTerrainType, const TArray &InTerrainData); @@ -69,8 +74,13 @@ protected: UPROPERTY(EditAnywhere, BlueprintReadOnly) TMap> TileSetConfigs; + // UPROPERTY(EditAnywhere, BlueprintReadOnly) + // TMap> TerrainMeshes; + + UPROPERTY(EditAnywhere, BlueprintReadOnly) - TMap> TerrainMeshes; + TMap> TerrainActors; + UPROPERTY(BlueprintReadOnly) TArray TerrainLayerData;