This code uses a Raycast to get the vertices, triangles, etc. of a Primitive Cube, them using RaycastHit.triangleIndex, I can get the triangle that the Raycast hitted, but there is a easy way to get the another triangle? So that I can delete the whole face that the Raycast hitted?
I tryied modifying x in [hit.triangleIndex * 3 + x] to another values, but all the combinations that I tried deleted triangles from another faces.
if (Input.GetMouseButtonUp(0))
{
RaycastHit hit;
var camera = Camera.main;
if (!Physics.Raycast (camera.ScreenPointToRay(Input.mousePosition), out hit))
{
return;
}
var meshCollider = hit.collider as MeshCollider;
if (meshCollider == null || meshCollider.sharedMesh == null)
return;
var mesh = meshCollider.sharedMesh;
var vertices = mesh.vertices;
var triangles = mesh.triangles;
Transform objectPosition = hit.transform;
var p0 = vertices[triangles[hit.triangleIndex * 3 + 0]];
var p1 = vertices[triangles[hit.triangleIndex * 3 + 1]];
var p2 = vertices[triangles[hit.triangleIndex * 3 + 2]];
GameObject newCube = new GameObject();
newCube.transform.position = objectPosition;
newCube.AddComponent<MeshFilter>();
newCube.AddComponent<MeshRenderer>();
newCube.GetComponent<MeshRenderer>().material = defaultMaterial;
Mesh mesh = new Mesh()
for (int i = 0; i < triangles.Count; i+=3)
{
bool trianglePoint1 = (triangles[i + 0] == p0);
bool trianglePoint2 = (triangles[i + 1] == p1);
bool trianglePoint3 = (triangles[i + 2] == p2);
if (trianglePoint1 && trianglePoint2 && trianglePoint3)
{
triangles.RemoveRange(i, 3);
}
}
mesh.Clear();
mesh.vertices = vertices;
mesh.triangles = triangles;
newCube.GetComponent<MeshFilter>().mesh = mesh;
}