Unity中C#脚本生成立方体时顶点与三角面异常问题求助
问题排查与修正
核心问题:顶点定义错误
你当前的底部(bottom)和顶部(top)顶点数组里混合了不同Y轴高度的顶点,导致三角面连接了错误的顶点,出现重叠/错位:
- 底部顶点应全部为Y=-1的平面顶点,但你的bottom数组里混入了Y=1的顶点(索引1、2);
- 顶部顶点应全部为Y=1的平面顶点,但你的top数组里混入了Y=-1的顶点(索引4、7)。
修正后的顶点与三角面代码
修正后的GenerateVerts()
private Vector3[] GenerateVerts() { return new Vector3[] { // bottom (Y=-1) x y z new Vector3( 1, -1, -1), // 0 new Vector3(-1, -1, -1), // 1 new Vector3(-1, -1, 1), // 2 new Vector3( 1, -1, 1), // 3 // top (Y=1) new Vector3( 1, 1, -1), // 4 new Vector3(-1, 1, -1), // 5 new Vector3(-1, 1, 1), // 6 new Vector3( 1, 1, 1), // 7 // left (X=-1) new Vector3(-1, -1, 1), // 8 new Vector3(-1, -1, -1), // 9 new Vector3(-1, 1, 1), // 10 new Vector3(-1, 1, -1), // 11 // right (X=1) new Vector3( 1, -1, 1), // 12 new Vector3( 1, -1, -1), // 13 new Vector3( 1, 1, 1), // 14 new Vector3( 1, 1, -1), // 15 // front (Z=-1) new Vector3( 1, -1, -1), // 16 new Vector3(-1, -1, -1), // 17 new Vector3( 1, 1, -1), // 18 new Vector3(-1, 1, -1), // 19 // back (Z=1) new Vector3( 1, -1, 1), // 20 new Vector3(-1, -1, 1), // 21 new Vector3( 1, 1, 1), // 22 new Vector3(-1, 1, 1), // 23 }; }
修正后的GenerateTris()
private int[] GenerateTris() { return new int[] { // bottom (两个三角面,顺时针绕序) 0,1,2, 0,2,3, // top (顺时针绕序) 4,7,6, 4,6,5, // left 8,9,11, 8,11,10, // right 12,15,14, 12,13,15, // front 16,17,19, 16,19,18, // back 20,22,23, 20,23,21 }; }
额外说明
- 三角面的顶点顺序要遵循顺时针绕序(从立方体外部看向面的方向),这样Unity的背面剔除才能正常工作,避免面显示异常;
- 每个面的四个顶点必须保持在同一平面上,这是确保面显示正确的基础。
内容的提问来源于stack exchange,提问作者ST6152
相关产品推荐
相关产品推荐

