使用 C++ 创建 UE5 蓝图随机地形生成节点

本文将介绍如何使用 C++ 创建一个可以在 UE5 蓝图中使用的自定义节点,该节点的功能是根据给定的面积 (X, Y) 和高度 (Height) 生成随机地形。

1. 创建 C++ 类

首先,创建一个新的 C++ 类,命名为 MyTerrainGenerator,并继承自 UBlueprintFunctionLibrary 类。

2. 头文件代码

MyTerrainGenerator.h 头文件中,声明 GenerateTerrain 函数,该函数接收三个参数:WorldContextObjectXYHeight

#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. 操作过程

  1. 创建一个新的 C++ 类,命名为 MyTerrainGenerator,继承自 UBlueprintFunctionLibrary 类。
  2. MyTerrainGenerator.h 头文件中声明 GenerateTerrain 函数,该函数接收三个参数:WorldContextObjectXYHeight
  3. MyTerrainGenerator.cpp 源文件中实现 GenerateTerrain 函数。
  4. 在函数中,首先获取当前世界的指针。
  5. 创建一个长度为 X * Y 的浮点数数组 HeightMap,并初始化为 0
  6. 使用 for 循环遍历 HeightMap 数组,为每个元素赋予一个随机高度值。
  7. 使用 World->SpawnActor 函数创建一个新的 ATerrain 对象,并将其位置设置为 (0, 0, 0)
  8. 使用 Terrain->GetTerrainComponent()->SetComponentSize 函数设置地形组件的大小为 X * Y * Height
  9. 使用 Terrain->GetTerrainComponent()->SetHeightMap 函数将生成的高度图传递给地形组件。
  10. 在 UE5 蓝图中使用 GenerateTerrain 节点,将 XYHeight 作为输入参数,即可生成随机地形。

5. 在蓝图中使用

在你的蓝图中,添加一个 MyTerrainGenerator 类实例,并调用 GenerateTerrain 函数。将 XYHeight 参数分别设置为想要的地形面积和高度,并输入当前世界上下文对象。

注意:

  • 确保你的项目中已经添加了 Terrain 类。
  • 你可以使用 FMath::RandRange 生成不同范围内的随机数,以创建更加多样化的地形。
  • 为了方便调试,建议在生成地形后,将地形对象移动到合适的位置。
  • 可以根据实际需求添加其他参数,例如地形纹理、材质等。

通过使用这个 C++ 节点,你可以轻松地在 UE5 蓝图中生成随机地形,为你的游戏世界增添更多乐趣。

UE5 蓝图:使用 C++ 生成随机地形节点

原文地址: https://www.cveoy.top/t/topic/jw9w 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录