
UE数字孪生(三)------UProceduralMeshComponent生成网格体
上一节为UE使用UProceduralMeshComponent做了准备工作,接下来通过代码来展示UProceduralMeshComponent如何生成一个三角形或网格体打开VS,找到我们之前新建Actor的.h文件,在.h文件进行如下操作。1.找到.h文件2.引入ProceduralMeshComponent.h头文件3.创建ProceduralMeshComponent的变量(PS:有关UP
上一节为UE使用UProceduralMeshComponent做了准备工作,接下来通过代码来展示UProceduralMeshComponent如何生成一个三角形或网格体
UProceduralMeshComponent生成三角形
打开VS,找到我们之前新建Actor的.h文件,在.h文件进行如下操作。
1.找到.h文件
2.引入ProceduralMeshComponent.h头文件
3.创建ProceduralMeshComponent的变量(PS:有关UPROPERTY的知识自行学习)
4.在.cpp构造函数中创建一个用于处理程序生成网格的组件(ProceduralMeshComponent),并将其赋值给 MeshComponent 变量。将 MeshComponent(即 UProceduralMeshComponent)设置为根组件的附属物。这意味着 MeshComponent 将作为根组件的子组件存在,随着根组件的移动、旋转或缩放而进行相应的变换。(关于Actor和组件关系的介绍在文末)
MeshComponent = CreateDefaultSubobject<UProceduralMeshComponent>("MeshComponent");
MeshComponent->SetupAttachment(RootComponent);
5.新建两个数组,一个是分别存放模型顶点空间位置的数组集合TArray vertices;一个是存放构成三角形索引的数组集合TArray triangles;
TArray<FVector> vertices;
TArray<int32> triangles
6.调到UProceduralMeshComponent中函数CreateMeshSection_LinearColor就可以生成网格体。
void CreateMeshSection_LinearColor(int32 SectionIndex, **const TArray<FVector>& Vertices**, const TArray<int32>& Triangles, const TArray<FVector>& Normals, const TArray<FVector2D>& UV0, const TArray<FLinearColor>& VertexColors, const TArray<FProcMeshTangent>& Tangents, bool bCreateCollision, bool bSRGBConversion = false)
{
TArray<FVector2D> EmptyArray;
CreateMeshSection_LinearColor(SectionIndex, Vertices, Triangles, Normals, UV0, EmptyArray, EmptyArray, EmptyArray, VertexColors, Tangents, bCreateCollision, bSRGBConversion);
}
SectionIndex:要创建的网格部分的索引。一般为0
Vertices:顶点数组,描述网格的顶点位置。
Triangles:三角形索引数组,描述网格的三角形拓扑结构。
Normals:法线数组,描述网格顶点的法线方向。
UV0:UV坐标数组,描述顶点的纹理坐标。
VertexColors:顶点颜色数组,描述顶点的颜色。
Tangents:切线数组,描述顶点的切线信息。
bCreateCollision:一个布尔值,指示是否创建碰撞体。
bSRGBConversion:一个布尔值,指示是否对顶点颜色进行SRGB转换。
接下来我就通过代码来生成一个三角形
代码示例
TArray<FVector> vertices;
TArray<int32> triangles;
vertices.Add(FVector(0.0f, 0.0f, 0.0f));//第一个放到vertices集合中的坐标点对应的索引就是0
vertices.Add(FVector(0.0f, 1.0f, 0.0f));
vertices.Add(FVector(1.0f, 0.0f, 0.0f));
triangles.Add(0);
triangles.Add(1);
triangles.Add(2);
//也可以 只是方向不一样
//triangles.Add(2);
//triangles.Add(1);
//triangles.Add(0);
TArray<FVector> normals;
TArray<FProcMeshTangent> tangents;
TArray<FVector2D> uvs;
TArray<FLinearColor> vertexColors;
MeshComponent->CreateMeshSection_LinearColor(0, vertices, triangles, normals, uvs, vertexColors, tangents, true);
保存后编译 然后回到UE,为了更好展示 我将图形进行了放大和添加了材质
从上往下看可以看到正面,从下往上看看不到三角形这个和构建三角形的顺序有关
以同样的方式生成一个四边形,也就是两个三角形组成
TArray<FVector> vertices;
TArray<int32> triangles;
vertices.Add(FVector(0.0f, 0.0f, 0.0f));
vertices.Add(FVector(0.0f, 1.0f, 0.0f));
vertices.Add(FVector(1.0f, 0.0f, 0.0f));
vertices.Add(FVector(1.0f, 1.0f, 0.0f));
triangles.Add(0);
triangles.Add(1);
triangles.Add(2);
triangles.Add(1);
triangles.Add(3);
triangles.Add(2);
TArray<FVector> normals;
TArray<FProcMeshTangent> tangents;
TArray<FVector2D> uvs;
TArray<FLinearColor> vertexColors;
MeshComponent->CreateMeshSection_LinearColor(0, vertices, triangles, normals, uvs, vertexColors, tangents, true);
文末:
在Unreal Engine中,Actor是游戏世界中的一个基本单位,它代表了游戏中的一个实体,可以是玩家角色、NPC、物体、特效等。以下是关于Actor的一些重要特点和用途:
基本单位:Actor是Unreal Engine游戏世界中的基本单位之一。每个Actor都有自己的位置、旋转和缩放,并且可以在游戏世界中进行移动、旋转和交互。
组件容器:Actor可以包含一个或多个组件,这些组件可以是静态网格、碰撞体、动画、脚本等,用于定义Actor的外观、行为和功能。
蓝图支持:在Unreal Engine中,可以使用蓝图(Blueprint)来创建Actor的逻辑和行为。蓝图是一种视觉化编程工具,允许开发者无需编写代码,即可创建复杂的游戏逻辑。
事件驱动:Actor可以响应各种事件,例如碰撞事件、输入事件、生命周期事件等。这使得开发者可以轻松地实现各种游戏行为和交互。
层级结构:在Unreal Engine中,Actor可以存在于一个层级结构中,每个Actor都可以有一个父Actor和零个或多个子Actor。这种层级结构使得开发者可以轻松地管理和组织游戏世界中的各种实体。
而Actor Component(Actor组件)是一种附加到Actor上的模块化单元,用于增强Actor的功能和行为。以下是关于Actor组件的一些重要特点和用途:
模块化设计:Actor组件允许开发者将Actor的功能拆分为更小的、可重用的部分。这样做有助于提高代码的可维护性和可扩展性,并使开发过程更加灵活。
可重用性:由于Actor组件是模块化的,因此它们可以在不同的Actor之间共享和重复使用。这使得开发者可以快速创建复杂的Actor,并在不同的情境中重复利用相同的功能模块。
独立更新:Actor组件可以独立于其所属的Actor进行更新和操作。这意味着一个Actor可以包含多个组件,每个组件都可以独立地响应事件、更新状态等,从而实现更复杂的行为和交互。
灵活性:通过将功能分解为组件,开发者可以更灵活地组合和定制Actor的行为。例如,一个角色Actor可以包含移动组件、武器组件、动画组件等,开发者可以根据需要添加、删除或替换这些组件,以实现不同类型的角色。
事件驱动:Actor组件可以响应各种事件,例如碰撞事件、输入事件、生命周期事件等。这使得开发者可以轻松地实现各种复杂的游戏逻辑和交互。
总之,Actor组件是Unreal Engine中用于增强Actor功能和行为的重要机制,它们通过模块化设计和独立更新的特性,为开发者提供了丰富而灵活的工具,用于创建复杂的游戏世界和交互体验。**
更多推荐
所有评论(0)