
Video tutorials
Setting-up the solution.
Code tour.
Register triangles from vertices.
2D simple circular shape.
ProceduralMesh et C++ dans Unreal.
J’ai eu a explorer les Procedural Mesh dans Unreal Engine sans passer par les blueprint, n’ayant pas trouvé de tutos en français qui couvrent le sujet, voici comment utiliser cet outil puissant. Je passerai quelques détails quant à la mise en place du projet et sauterai directement au code. Cette rédaction est droite au but!

Mise en place

Une fois un projet C++ dans Unreal Engine, créons une nouvelle classe qui hérite de la classe parent Actor.

Appelez cette classe comme vous le désirez! 🙂

Dans votre solution, vous aurez deux nouveaux fichiers.

Simple enough, mais il nous reste une dernière chose à faire avant de pouvoir utiliser les ProceduralMesh. Dans vos fichiers de build, ajoutez ces lignes (qui incluent le module requit). J’ai changé l’indentation de la ligne 11 pour préciser la lignehttps://antoinefortin.ca/media/de34062cd6af2ad843d766768ff7a7ff
Dans votre “nomdeprojet.uproject”-> incluez le ProceduralMeshComponenthttps://antoinefortin.ca/media/406147f8279cc19d8c44182c727edafd
À ce point ci, vous devriez être en mesure de compiler 🙂
Ajoutez le procedural mesh a l’acteur!
Dans votre AVotreActeur.h ajoutez ceci

Toujours inclure le .generated en dernier.
Dans les propriétés privées, ajoutez une UPROPERTY() et un pointeur vers le procedural Mesh que vous pouvez nommer comme vous le voulez. Je l’appelerai myProceduralMesh.https://antoinefortin.ca/media/a89af416188d47e566dcf1f0d8fb1485
Implémentons le .cpp
Dans votre constructeur ajoutez la création du procédural mesh (il se peut fortement que l’intellisense râle, mais votre compilateur acceptera le tout). Always believe the compiler after all! 😀
BasicProceduralMesh.cpphttps://antoinefortin.ca/media/0de3a2e94acf1c53b70a00d052f18ee8
Donc nous créons un mesh procédural dans le constructeur, maintenant, utilisons nos deux fonctions PostActorCreated() et PostLoad()

On peut voir un appel de la fonction CreerUnTriangle(). Dans la partie 2, nous créerons notre premier triangle en créant cette fonction dans notre fichier .cpp.
Créer un triangle
void ABasicProceduralMesh::creerTriangle()
{
TArray<FVector> vertices;
int triangleWidth = 100;
int triangleHeight = 100;
int curWidth = 0;
int curHeight = 0;
int numberOfTriangle = 10;
int numberOfVertex = 0;
for (int i = 0; i < numberOfTriangle; i++)
{
// Bottom Triangle
vertices.Add(FVector(0, curWidth, 0));
vertices.Add(FVector(0, (triangleWidth * i) + triangleWidth, 0));
vertices.Add(FVector(0, (triangleWidth * i), triangleHeight));
// Top triangle
vertices.Add(FVector(0, curWidth, triangleHeight));
vertices.Add(FVector(0, (triangleWidth * i) + triangleWidth, 0));
vertices.Add(FVector(0, (triangleWidth * i) + triangleHeight, triangleHeight));
for (int j = 0; j < 3;j++)
{
/*A*/ vertices.Add(FVector(0, curWidth, (j*triangleHeight) + triangleHeight));
/*B*/ vertices.Add(FVector(0, curWidth + triangleWidth, (triangleHeight *j) + triangleHeight));
/*C*/ vertices.Add(FVector(0, curWidth, (triangleHeight * (j + 1)) + triangleHeight ));
curHeight += triangleHeight;
numberOfVertex += 3;
}
curWidth += triangleWidth;
numberOfVertex += 6;
}
TArray<int32> Triangles;
for (size_t i = 0; i < numberOfTriangle * numberOfVertex; i++)
{
Triangles.Add(i);
}
TArray<FVector> normals;
normals.Add(FVector(1, 0, 0));
normals.Add(FVector(1, 0, 0));
normals.Add(FVector(1, 0, 0));
TArray<FVector2D> UV0;
UV0.Add(FVector2D(0, 0));
UV0.Add(FVector2D(10, 0));
UV0.Add(FVector2D(0, 10));
TArray<FProcMeshTangent> tangents;
tangents.Add(FProcMeshTangent(0, 1, 0));
tangents.Add(FProcMeshTangent(0, 1, 0));
tangents.Add(FProcMeshTangent(0, 1, 0));
TArray<FLinearColor> vertexColors;
vertexColors.Add(FLinearColor(0, 0, 0, 1.0));
vertexColors.Add(FLinearColor(0.5, 0.5, 0.75, 1.0));
vertexColors.Add(FLinearColor(0, 0, 0, 1.0));
myProceduralMesh->CreateMeshSection_LinearColor(0, vertices, Triangles, normals, UV0, vertexColors, tangents, true);
// Enable collision data
myProceduralMesh->ContainsPhysicsTriMeshData(true);
}
Qui nous donne un mesh ainsi.

Next time:
Dans nos colomnes nous devons également supporter Le top triangle.
Until next time, much love!