У меня есть сценарий, который разбивает куб на четыре равные треугольные призмы, при этом панель GameObject является исходным разрушенным объектом.Каждая призма полностью создается сценарием путем назначения вершин и треугольников пустой сетке, а исходный объект уничтожается.
// 2D Points which will connect to the center to form triangles
List<Vector2> shatterPoints = new List<Vector2> {new Vector2(-0.5f, -0.5f),
new Vector2(-0.5f, 0.5f), new Vector2(0.5f, 0.5f), new Vector2(0.5f, -0.5f)};
// Generate each fragment
for (int i = 0; i < shatterPoints.Count; i++) {
GameObject Fragment = new GameObject("Empty"); // Create game object
Fragment.AddComponent<MeshFilter>();
Fragment.AddComponent<MeshRenderer>();
Vector3 point1 = shatterPoints[i]; // Grab the two edge points for this fragment
Vector3 point2;
if (i + 1 == shatterPoints.Count) {
point2 = shatterPoints[0];
} else {
point2 = shatterPoints[i + 1];
}
Mesh FragMesh = new Mesh(); // Create the mesh
FragMesh.vertices = new Vector3[] {point1 + Vector3.forward * 0.5f,
point2 + Vector3.forward * 0.5f, new Vector3(0f, 0f, 0.5f),
new Vector3(0f, 0f, -0.5f), point2 - Vector3.forward * 0.5f,
point1 - Vector3.forward * 0.5f};
FragMesh.triangles = new int[] {1,0,2, 5,4,3, 0,5,3, 3,2,0, 4,5,0, 0,1,4, 1,2,3, 3,4,1};
// Copy important properties from the original piece to the fragment
Fragment.GetComponent<MeshFilter>().mesh = FragMesh;
Fragment.transform.position = Panel.transform.position;
Fragment.transform.rotation = Panel.transform.rotation;
Fragment.transform.localScale = Panel.transform.localScale;
Fragment.GetComponent<Renderer>().material = Panel.GetComponent<Renderer>().material;
FragMesh.RecalculateNormals();
// Add force here later (and a rigidbody while you're at it)
}
Destroy(Panel);
Вот изображения куба до и после разрушения:
Куб перед разрушением
Куб после разрушения и ручного перемещения фрагментов
Хотя я пересчитываю нормали каждого фрагмента в сценарии, освещаякажется неправильным.Я новичок в генерации процедурных сеток, так может кто-нибудь пролить свет на это?(не каламбур). Спасибо, что уделили время.