In UE5 development,I want to get vertex data from the UStaticMesh,These code works well on editor environment,I can get the right vertex data.But after packing,they can’t work properly on shipping environment.I tried many times,It always return some wrong data to me.someone konws how can i get right vertex data on shipping environment? Only IndexBuffer data is right on shipping environment.
TArray<FVector> Vertices;
TArray<int32> Triangles;
int32 LinkGreenFirstLOD = pLinkGreenMesh->GetRenderData()->GetCurrentFirstLODIdx(0);
const FStaticMeshLODResources &lodResLinkGreen = pLinkGreenMesh->GetLODForExport(LinkGreenFirstLOD);
int32 nNumIndexLG = lodResLinkGreen.IndexBuffer.IndexBufferRHI->GetSize() / lodResLinkGreen.IndexBuffer.IndexBufferRHI->GetStride();
Triangles.SetNum(nNumIndexLG);
if (lodResLinkGreen.VertexBuffers.PositionVertexBuffer.IsInitialized())
{
// Get Vertex buffer
const FPositionVertexBuffer& PositionVertexBuffer = lodResLinkGreen.VertexBuffers.PositionVertexBuffer;
// Get Vertex num
nLGVertexCount = PositionVertexBuffer.GetNumVertices();
nIndexSize += nLGVertexCount;
//Get Vertex data
TArray<FVector3f> arrLGVertex;
arrLGVertex.SetNum(nLGVertexCount * PositionVertexBuffer.GetStride());
FVector3f* LGVertex = (FVector3f*)RHILockBuffer(PositionVertexBuffer.VertexBufferRHI, 0, nLGVertexCount * PositionVertexBuffer.GetStride(), RLM_ReadOnly);
FMemory::Memcpy(arrLGVertex.GetData(), (FVector3f*)PositionVertexBuffer.GetVertexData(), nLGVertexCount * PositionVertexBuffer.GetStride());
for (int32 i = 0; i < nLGVertexCount; i++)
{
Vertices.Add(FVector(arrLGVertex[i].X, arrLGVertex[i].Y, arrLGVertex[i].Z));
}
RHIUnlockBuffer(PositionVertexBuffer.VertexBufferRHI);
uint16* indices = (uint16*)RHILockBuffer(lodResLinkGreen.IndexBuffer.IndexBufferRHI, 0, lodResLinkGreen.IndexBuffer.IndexBufferRHI->GetSize(), RLM_ReadOnly);
for (int32 i = 0; i < nNumIndexLG; ++i)
{
Triangles[i] = indices[i];
}
RHIUnlockBuffer(lodResLinkGreen.IndexBuffer.IndexBufferRHI);
}
or
for (int32 i = 0; i < PositionVertexBuffer.GetNumVertices(); i++)
{
FVector3f fv3Pos = PositionVertexBuffer.VertexPosition(i);
Vertices.Add(FVector(fv3Pos.X, fv3Pos.Y, fv3Pos.Z));
}
also can’t work on shipping environment.