Да, перевернуть объект не так уж и сложно Вот два фрагмента моего кода, которые достигают этого (я пропустил очевидный шаблон, который захватывает ссылку на сетку):
public bool flipX = true;
public bool flipY;
public bool flipZ;
void Flip()
{
if (mesh == null) return;
Vector3[] verts = mesh.vertices;
for (int i = 0; i < verts.Length; i++)
{
Vector3 c = verts[i];
if (flipX) c.x *= -1;
if (flipY) c.y *= -1;
if (flipZ) c.z *= -1;
verts[i] = c;
}
mesh.vertices = verts;
if (flipX ^ flipY ^ flipZ) FlipNormals();
}
Одна важная деталь заключается в том, что в зависимости от конфигурации оси вам может потребоваться перевернуть грани нормали. Это достигается путем изменения порядка расположения вершин в массиве треугольников:
void FlipNormals()
{
int[] tris = mesh.triangles;
for (int i = 0; i < tris.Length / 3; i++)
{
int a = tris[i * 3 + 0];
int b = tris[i * 3 + 1];
int c = tris[i * 3 + 2];
tris[i * 3 + 0] = c;
tris[i * 3 + 1] = b;
tris[i * 3 + 2] = a;
}
mesh.triangles = tris;
}