【发布时间】:2018-05-12 16:10:05
【问题描述】:
我有一个脚本可以将一个立方体分成四个相等的三棱柱,GameObject Panel 是破碎的原始对象。每个棱镜完全由脚本通过将顶点和三角形分配给空白网格来创建,并且原始对象被破坏。
// 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);
以下是立方体破碎前后的照片:
Cube after shattering and manual displacement of fragments
虽然我重新计算了脚本中每个片段的法线,但照明似乎不正确。我是程序网格生成的新手,所以任何人都可以对此有所了解吗? (没有双关语)谢谢您的宝贵时间。
【问题讨论】: