【问题标题】:What error did I make while copying this procedural plane generator from a video?从视频中复制此程序平面生成器时,我犯了什么错误?
【发布时间】: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


【解决方案1】:

derHugo 在 cmets 中回答了这个问题。只需发布此内容以将其标记为已回答。谢谢。

【讨论】:

  • 请不要这样做;)问题可能很快就会关闭,直到您能够接受自己的(不是)“答案”之前,无论如何都需要 2 天时间;)您也可以考虑立即删除它(但不应该经常重复)
  • 我总觉得使用堆栈溢出有点像学习一门自己的语言。感谢您的建议!
猜你喜欢
  • 2023-01-13
  • 1970-01-01
  • 1970-01-01
  • 2017-10-12
  • 2016-12-09
  • 1970-01-01
  • 2023-03-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多