ue4 unreal Instanced Static Mesh Component 实例化静态网格体组件 的用法及意义

该博客介绍了在建模软件中使用组件进行大量相同网格但不同几何信息处理的方法,特别适用于场景中的重复元素如垃圾桶、电线杆等。工具允许更新几何信息,实现动态效果,并展示了创建和修改大量对象的示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

注意这是个组件

 ​​

 这个组件的意义

本来在建模软件里面就有这个功能

用来应对大量,同样网格,同样材质,不同几何信息(位置 旋转 缩放)的网格

比如场景里面的垃圾桶 电线杆 路灯等几百上千的东西

 我试过一两万挺轻松的...

比较骚的操作是可以更新几何信息,比如会上下乱动,随便缩放等这种,不过同样的,总数就会下降(保证不卡的情况下)

---------------------------------------------------------------------------------------------------------------------------

简单示例来一个

造个12.5万吧

 额有点多,缩放我给了随机了

注意材质木有,这里原因是材质球需要勾上特殊的选项才可以正常显示

 删除api展示下

这里特殊说明一下 这个工具能更新几何信息

你要想随便做点位移缩放旋转的动画。。。也还行

 记得数量小点

记得勾选 Make Render State Dirty

 

 

Unreal Engine(UE)中,动态生成静态网格体是一个常见的需求,特别是在需要根据游戏运行时的数据或用户输入来创建或修改游戏对象时。以下是一些关键步骤和注意事项: ### 1. 创建动态网格体的步骤 1. **创建网格体数据**: - 使用`FProceduralMeshData`结构体来定义网格体的顶点、法线、UV坐标等数据。 - 可以通过代码生成这些数据,或者从外部文件读取。 2. **创建组件**: - 在蓝图中或C++代码中,添加一个`UProceduralMeshComponent`组件。 - 使用`CreateMeshSection_LinearColor`方法将网格体数据传递给组件。 3. **生成碰撞数据**: - 如果需要碰撞检测,可以使用`ProcMeshComponent->CreateDefaultCollision()`方法生成默认碰撞体。 - 或者手动定义碰撞体数据。 4. **优化性能**: - 动态生成网格体可能会影响性能,特别是在大量生成的情况下。 - 可以考虑使用批处理或异步生成来优化性能。 ### 2. 示例代码 以下是一个简单的C++示例,展示如何在UE中动态生成一个静态网格体: ```cpp #include "ProceduralMeshComponent.h" #include "KismetProceduralMeshLibrary.h" void AMyActor::BeginPlay() { Super::BeginPlay(); // 创建网格体数据 TArray<FVector> Vertices; TArray<int32> Triangles; TArray<FVector> Normals; TArray<FVector2D> UVs; TArray<FColor> Colors; TArray<FProcMeshTangent> Tangents; // 示例:定义一个简单的三角形 Vertices.Add(FVector(0, 0, 0)); Vertices.Add(FVector(100, 0, 0)); Vertices.Add(FVector(0, 100, 0)); Triangles.Add(0); Triangles.Add(1); Triangles.Add(2); Normals.Add(FVector(0, 0, 1)); Normals.Add(FVector(0, 0, 1)); Normals.Add(FVector(0, 0, 1)); UVs.Add(FVector2D(0, 0)); UVs.Add(FVector2D(1, 0)); UVs.Add(FVector2D(0, 1)); Colors.Add(FColor::White); Colors.Add(FColor::White); Colors.Add(FColor::White); Tangents.Add(FProcMeshTangent(1, 0, 0)); Tangents.Add(FProcMeshTangent(1, 0, 0)); Tangents.Add(FProcMeshTangent(1, 0, 0)); // 创建网格体 UProceduralMeshComponent* ProcMeshComponent = NewObject<UProceduralMeshComponent>(this); ProcMeshComponent->RegisterComponent(); ProcMeshComponent->CreateMeshSection_LinearColor(0, Vertices, Triangles, Normals, UVs, Colors, Tangents, true); // 添加到场景中 this->SetRootComponent(ProcMeshComponent); } ``` ### 3. 注意事项 - **性能优化**:动态生成网格体时要注意性能问题,特别是在大量生成的情况下。 - **内存管理**:确保在不需要时释放内存,避免内存泄漏。 - **碰撞检测**:根据需要生成合适的碰撞体,以提高游戏体验。
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

懵懵爸爸

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值