【发布时间】:2019-09-10 14:26:00
【问题描述】:
我正在尝试统一学习策略/基地建设游戏。我从this video 复制代码开始,但我的版本只做一行正方形。
z 维度没有继续,它似乎是三角形/法线的问题,因为通过将顶点设为公共变量并在统一的检查器中查看它们,顶点似乎位于正确的位置。我想我必须编写一个小部件来显示顶点以确保我不是数学家。为简洁起见,我统一删除了对象的实际创建,因为不涉及数学。此外,程序对象在较大尺寸下似乎确实崩溃了,尽管在第一个被修复之前这并不是真正的问题。
void BuildMesh()
{
int numTiles = size_x * size_z;
int numTris = numTiles * 2;
int vsize_x = size_x + 1;
int vsize_z = size_z + 1;
int numVerts = vsize_x * vsize_z;
//Generate Mesh Data
vertices = new Vector3[ numVerts ];
Vector3[] normals = new Vector3[ numVerts ];
Vector2[] uv = new Vector2[ numVerts ];
int[] triangles = new int[ numTris * 3];
int x, z;
for (z = 0; z < vsize_z; z++)
{
for (x = 0; x < vsize_x; x++)
{
vertices[z * vsize_x + x] = new Vector3(x * tileSize, 0, z * tileSize);
normals[ z * vsize_x + x] = Vector3.up;
uv[z * vsize_x + x] = new Vector2((float)x / vsize_x, (float)z / vsize_z);
}
}
for (z = 0; z < size_z; z++)
{
for (x = 0; x < size_x; x++)
{
int squareIndex = x * size_x + x;
int triOffset = squareIndex * 6;
triangles[triOffset + 0] = z * vsize_x + x + 0;
triangles[triOffset + 1] = z * vsize_x + x + vsize_x + 0;
triangles[triOffset + 2] = z * vsize_x + x + vsize_x + 1;
triangles[triOffset + 3] = z * vsize_x + x + 0;
triangles[triOffset + 4] = z * vsize_x + x + vsize_x + 1;
triangles[triOffset + 5] = z * vsize_x + x + 1;
}
}
视频中的代码:
【问题讨论】:
-
最后一个循环乍一看很奇怪,为什么要添加两次 vsize_x 呢?肯定至少其中一个是z?事实上,之前的那个看起来也很奇怪,但是,我不是看视频来播放的,因为你发现了不同
-
int squareIndex = x * size_x + x;而必须是int squareIndex = z * size_x + x;.. 我投票决定将此问题作为题外话结束,原因是:这个问题是由一个无法再解决的问题引起的复制或简单的印刷错误。
标签: c# unity3d procedural-generation