I’m trying to remove the body from a model and leave only the arms for a FPS. This works fine except the UVs get messed up. Any ideas?
Here’s the code:
public static void StripArmsQuick(GameObject target) {
if (target == null) {
Debug.Log("No GameObject selected");
}
// SetTPose(target);
Vector3 size = new Vector3(0.45f, 5f, 0.45f);
Bounds bounds = new Bounds(Vector3.up, size);
SkinnedMeshRenderer[] skinnedMeshRenderers = target.GetComponentsInChildren<SkinnedMeshRenderer>();
// Debug.LogError("Stripping arms from " + skinnedMeshRenderers.Length + " meshRends. I aint a real error");
foreach (SkinnedMeshRenderer skinnedMeshRenderer in skinnedMeshRenderers) {
List<int> triangleList = new List<int>();
List<Vector3> vertList = new List<Vector3>();
List<Vector2> uvList = new List<Vector2>();
List<Vector3> normalsList = new List<Vector3>();
Mesh mesh = new Mesh();
mesh.vertices = skinnedMeshRenderer.sharedMesh.vertices;
mesh.normals = skinnedMeshRenderer.sharedMesh.normals;
mesh.uv = skinnedMeshRenderer.sharedMesh.uv;
mesh.boneWeights = skinnedMeshRenderer.sharedMesh.boneWeights;
mesh.bindposes = skinnedMeshRenderer.sharedMesh.bindposes;
Vector3[] vertices = mesh.vertices;
for (int i = 0; i < vertices.Length; i++) {
vertList.Add (vertices*);*
uvList.Add (mesh.uv*);*
normalsList.Add (mesh.normals*);*
}
int[] triangles = mesh.triangles;
for (int i = 0; i < triangles.Length; i += 3) {
if (bounds.Contains(vertices[triangles*]) && bounds.Contains(vertices[triangles[i + 1]]) && bounds.Contains(vertices[triangles[i + 2]])) {*
//In selection
}
else {
triangleList.Add(triangles*);*
triangleList.Add(triangles[i + 1]);
triangleList.Add(triangles[i + 2]);
}
}
mesh.triangles = triangleList.ToArray();
mesh.RecalculateNormals();
mesh.RecalculateBounds();
skinnedMeshRenderer.sharedMesh = mesh;
}
}