**Improved Get Vertex Locations of Static Mesh
Now works in Packaged Games**
My C++ Code For You
See my PhysX wiki for the basic build.cs setup:
Here is the code I wrote to get of the transformed vertex positions using the Body Instance and PhysX code!
I am doing many safety checks to ensure the Body Instance data is valid before utilizing it, and the result is that now you can get accurate vertex locations in packaged games!
//~~~ PhysX ~~~
#include "PhysXIncludes.h"
#include "PhysicsPublic.h" //For the ptou conversions
//~~~~~~~~~~~
//Get Transformed Vertex positions of any static mesh! -
bool UVictoryBPFunctionLibrary::GetStaticMeshVertexLocations(UStaticMeshComponent* Comp, TArray<FVector>& VertexPositions)
{
if(!Comp || !Comp->IsValidLowLevel())
{
return false;
}
//~~~~~~~~~~~~~~~~~~~~~~~
//Component Transform
FTransform RV_Transform = Comp->GetComponentTransform();
//Body Setup valid?
UBodySetup* BodySetup = Comp->GetBodySetup();
if(!BodySetup || !BodySetup->IsValidLowLevel())
{
return false;
}
//Get the Px Mesh!
PxTriangleMesh* TriMesh = BodySetup->TriMesh;
if(!TriMesh)
{
return false;
}
//~~~~~~~~~~~~~~~~
//Number of vertices
PxU32 VertexCount = TriMesh->getNbVertices();
//Vertex array
const PxVec3* Vertices = TriMesh->getVertices();
//For each vertex, transform the position to match the component Transform
for(PxU32 v = 0; v < VertexCount; v++)
{
VertexPositions.Add(RV_Transform.TransformPosition(P2UVector(Vertices[v])));
}
return true;
}
UE4 Wiki, Plugin Download Page
Enjoy!