UE5 蓝图自定义节点:使用 C++ 生成随机地形
使用 C++ 为 UE5 蓝图创建生成随机地形的节点
本文将详细介绍如何在 UE5 中使用 C++ 创建一个自定义节点,该节点接收 X、Y 值作为面积和 Height 值作为高度,并根据这些值生成随机地形。
步骤一:创建 C++ 项目并创建新类
- 在 UE5 中创建一个新的 C++ 项目。
- 创建一个继承自 UE5 的 Actor 类的新类,例如命名为
TerrainGenerator。
步骤二:定义函数和头文件
-
头文件 (
TerrainGenerator.h)#pragma once #include "CoreMinimal.h" #include "GameFramework/Actor.h" #include "TerrainGenerator.generated.h" UCLASS() class YOURPROJECTNAME_API ATerrainGenerator : public AActor { GENERATED_BODY() public: // 生成随机地形的函数 UFUNCTION(BlueprintCallable, Category = "Terrain") void GenerateTerrain(float X, float Y, float Height); }; -
CPP 文件 (
TerrainGenerator.cpp)#include "TerrainGenerator.h" #include "Components/TerrainComponent.h" #include "Kismet/GameplayStatics.h" #include "Engine/World.h" void ATerrainGenerator::GenerateTerrain(float X, float Y, float Height) { // 创建 TerrainComponent UTerrainComponent* TerrainComp = NewObject<UTerrainComponent>(this); TerrainComp->RegisterComponent(); AttachToComponent(TerrainComp, FAttachmentTransformRules::KeepRelativeTransform); // 设置 TerrainComponent 的大小 TerrainComp->SetSize(FIntVector(X, Y, 1)); // 获取世界和随机数生成器 UWorld* World = GetWorld(); FRandomStream RandomStream(UGameplayStatics::GetGameTimeSinceStartup(World)); // 生成随机地形 for (int32 i = 0; i < X; i++) { for (int32 j = 0; j < Y; j++) { // 生成随机高度 float RandomHeight = RandomStream.FRandRange(0.0f, Height); // 设置地形的高度 TerrainComp->SetHeightAtLocation(FVector(i, j, RandomHeight)); } } }
步骤三:注册类为蓝图节点
-
在
TerrainGenerator.cpp文件中添加以下代码,将该类注册为蓝图节点:#if WITH_EDITOR static ConstructorHelpers::FObjectFinder<UClass> TerrainGeneratorClass(TEXT("/Game/YourProject/YourActor/TerrainGenerator.TerrainGenerator_C")); if (TerrainGeneratorClass.Succeeded()) { UClass* Class = TerrainGeneratorClass.Object; UProperty* Property = FindField<UProperty>(Class, TEXT("GenerateTerrain")); if (Property != nullptr) { UFunction* Function = Property->GetOwnerFunction(); if (Function != nullptr) { FString FunctionName = Function->GetName(); FString Category = Function->GetCategory(); UEdGraphSchema_K2::RegisterKismetTypeForBPFunction(FunctionName, Category, Class); } } } #endif
步骤四:启用 Landscape 模块
- 在 UE5 的项目设置中,启用 Landscape 模块。
使用示例
- 在 UE5 蓝图中放置一个
TerrainGenerator类的 Actor。 - 调用
GenerateTerrain函数,传入 X、Y 和 Height 值。
注意
- 确保在项目中包含必要的头文件。
- 在使用
TerrainComponent时,需要启用 Landscape 模块。 - 此代码示例仅提供基本框架,您可以根据需要进行修改和扩展。
代码解释
GenerateTerrain函数接收 X、Y 和 Height 值作为参数。- 它创建一个
TerrainComponent对象,并将其附加到 Actor 上。 - 它设置
TerrainComponent的大小。 - 它使用随机数生成器生成随机高度值,并将其应用到
TerrainComponent上。 - 为了让蓝图能够调用
GenerateTerrain函数,需要将其声明为BlueprintCallable。
总结
通过以上步骤,您可以在 UE5 蓝图中使用自定义 C++ 节点生成随机地形。您可以根据实际需求对代码进行修改和扩展,以实现更复杂的地形生成逻辑。
原文地址: https://www.cveoy.top/t/topic/jxaS 著作权归作者所有。请勿转载和采集!