UE5 蓝图:使用 C++ 生成随机地形节点
使用 C++ 创建 UE5 蓝图随机地形生成节点
本文将介绍如何使用 C++ 创建一个可以在 UE5 蓝图中使用的自定义节点,该节点的功能是根据给定的面积 (X, Y) 和高度 (Height) 生成随机地形。
1. 创建 C++ 类
首先,创建一个新的 C++ 类,命名为 MyTerrainGenerator,并继承自 UBlueprintFunctionLibrary 类。
2. 头文件代码
在 MyTerrainGenerator.h 头文件中,声明 GenerateTerrain 函数,该函数接收三个参数:WorldContextObject、X、Y 和 Height。
#pragma once
#include "CoreMinimal.h"
#include "Kismet/BlueprintFunctionLibrary.h"
#include "MyTerrainGenerator.generated.h"
UCLASS()
class MYPROJECT_API UMyTerrainGenerator : public UBlueprintFunctionLibrary
{
GENERATED_BODY()
public:
UFUNCTION(BlueprintCallable, Category = "MyTerrainGenerator")
static void GenerateTerrain(UObject* WorldContextObject, float X, float Y, float Height);
};
3. CPP 代码
在 MyTerrainGenerator.cpp 源文件中实现 GenerateTerrain 函数。该函数会根据输入的面积和高度,生成一个随机地形并将其放置在世界中。
#include "MyTerrainGenerator.h"
#include "Engine/World.h"
#include "Components/TerrainComponent.h"
#include "Math/UnrealMathUtility.h"
void UMyTerrainGenerator::GenerateTerrain(UObject* WorldContextObject, float X, float Y, float Height)
{
UWorld* World = GEngine->GetWorldFromContextObjectChecked(WorldContextObject);
TArray<float> HeightMap;
HeightMap.Init(0.0f, X * Y);
for (int32 i = 0; i < X * Y; i++)
{
HeightMap[i] = FMath::RandRange(0.0f, Height);
}
ATerrain* Terrain = World->SpawnActor<ATerrain>(ATerrain::StaticClass());
Terrain->SetActorLocation(FVector(0.0f, 0.0f, 0.0f));
Terrain->GetTerrainComponent()->SetComponentSize(X, Y, Height);
Terrain->GetTerrainComponent()->SetHeightMap(HeightMap.GetData(), X, Y);
}
4. 操作过程
- 创建一个新的 C++ 类,命名为
MyTerrainGenerator,继承自UBlueprintFunctionLibrary类。 - 在
MyTerrainGenerator.h头文件中声明GenerateTerrain函数,该函数接收三个参数:WorldContextObject、X、Y、Height。 - 在
MyTerrainGenerator.cpp源文件中实现GenerateTerrain函数。 - 在函数中,首先获取当前世界的指针。
- 创建一个长度为
X * Y的浮点数数组HeightMap,并初始化为0。 - 使用
for循环遍历HeightMap数组,为每个元素赋予一个随机高度值。 - 使用
World->SpawnActor函数创建一个新的ATerrain对象,并将其位置设置为(0, 0, 0)。 - 使用
Terrain->GetTerrainComponent()->SetComponentSize函数设置地形组件的大小为X * Y * Height。 - 使用
Terrain->GetTerrainComponent()->SetHeightMap函数将生成的高度图传递给地形组件。 - 在 UE5 蓝图中使用
GenerateTerrain节点,将X、Y、Height作为输入参数,即可生成随机地形。
5. 在蓝图中使用
在你的蓝图中,添加一个 MyTerrainGenerator 类实例,并调用 GenerateTerrain 函数。将 X、Y、Height 参数分别设置为想要的地形面积和高度,并输入当前世界上下文对象。
注意:
- 确保你的项目中已经添加了
Terrain类。 - 你可以使用
FMath::RandRange生成不同范围内的随机数,以创建更加多样化的地形。 - 为了方便调试,建议在生成地形后,将地形对象移动到合适的位置。
- 可以根据实际需求添加其他参数,例如地形纹理、材质等。
通过使用这个 C++ 节点,你可以轻松地在 UE5 蓝图中生成随机地形,为你的游戏世界增添更多乐趣。
原文地址: https://www.cveoy.top/t/topic/jw9w 著作权归作者所有。请勿转载和采集!