Салют, DTF! Довелось мне недавно поработать с процедурными мешами в UE4, и я понял, что нет простых туториалов по этой теме. Таких, чтобы на пару строк. А ведь простое решение есть. Поэтому решил написать туториал сам.Итак, начнем с простого C++ класса. Назовем его `AProcMesh` и отнаследуем от `AActor`:#pragma once #include "CoreMinimal.h" #include "GameFramework/Actor.h" #include "ProceduralMeshComponent.h" #include "ProcMesh.generated.h" UCLASS() class PROCEDURALMESH_API AProcMesh : public AActor { GENERATED_BODY() TArray<FVector> Vertices; TArray<int32> Triangles; TArray<FVector2D> UVs; UPROPERTY() UProceduralMeshComponent* ProcMesh; void CreateMesh(); public: // Sets default values for this actor's properties AProcMesh(); protected: UPROPERTY(EditAnywhere) UMaterialInterface* Material; // Called when the game starts or when spawned virtual void BeginPlay() override;`Vertices`, `Triangles` и `UV` – поля, в которых мы будем хранить данные процедурного меша. `ProcMesh` – это `ProceduralMeshComponent`. И `Material` – ссылка на материал, чтобы наложить на меш текстуру.Реализация:#include "ProcMesh.h" AProcMesh::AProcMesh() { ProcMesh = CreateDefaultSubobject<UProceduralMeshComponent>("ProcMesh"); RootComponent = ProcMesh; } void AProcMesh::CreateMesh() { Vertices.Add(FVector(-50, 0, 50)); Vertices.Add(FVector(-50, 0, -50)); Vertices.Add(FVector(50, 0, 50)); Vertices.Add(FVector(50, 0, -50)); UVs.Add(FVector2D(0, 0)); UVs.Add(FVector2D(0, 1)); UVs.Add(FVector2D(1, 0)); UVs.Add(FVector2D(1, 1)); //Triangle1 Triangles.Add(0); Triangles.Add(1); Triangles.Add(2); //Triangle2 Triangles.Add(2); Triangles.Add(1); Triangles.Add(3); ProcMesh->CreateMeshSection(0, Vertices, Triangles, TArray<FVector>(), UVs, TArray<FColor>(), TArray<FProcMeshTangent>(), true); if (Material) { ProcMesh->SetMaterial(0, Material); } } // Called when the game starts or when spawned void AProcMesh::BeginPlay() { Super::BeginPlay(); CreateMesh(); }Запустим и получим вот такую плоскость:Процедурная плоскостьА теперь немного деталей.Меш состоит из faces (не знаю правильный технический перевод) и вершин. Массив `Vertices` в нашем классе как раз и хранит все вершины:ВершиныFaces хранятся в массиве `Triangles`:Треугольники.И последнее - это UV-маппинг. Он нужен для того, чтобы правильно наложить текстуру:UV-маппингТеперь мы можем спокойно использовать материалы:Voila! p.s. Это перевод моей же статьи из англоязычного блога, который я веду: superyateam.comHow to use ProceduralMeshComponent in UE4 - Superyateam GamedevЗаглядывайте на огонек!
Face - это грань
Точно! Спасибо