C# Unity map生成网格做奇怪的事情

C# Unity map生成网格做奇怪的事情,c#,unity3d,C#,Unity3d,因此,出于某种原因,此映射生成最多适用于xSize=100和zSize=100 我一继续,它就会做类似这样的奇怪事情(在xSize=300和zSize=300时): 更高达1000x1000时,它会产生如下结果: 我不知道为什么它只能工作到100x100 是否存在我不知道的网格限制 我起初以为只是顶点没有正确连接,但在完成1000x1000示例并从顶部查看300x300示例后,它甚至肯定没有使顶点处于正确的位置 由于某种原因,我无法在代码中看到错误。我整天被困在这里盲目地寻找代码 有什么帮助

因此,出于某种原因,此映射生成最多适用于xSize=100和zSize=100

我一继续,它就会做类似这样的奇怪事情(在xSize=300和zSize=300时):

更高达1000x1000时,它会产生如下结果:

我不知道为什么它只能工作到100x100

是否存在我不知道的网格限制

我起初以为只是顶点没有正确连接,但在完成1000x1000示例并从顶部查看300x300示例后,它甚至肯定没有使顶点处于正确的位置

由于某种原因,我无法在代码中看到错误。我整天被困在这里盲目地寻找代码

有什么帮助吗

代码[只是CreateMapXZ()函数]:

vertices = new Vector3[(xSize + 1) * (zSize + 1)];
uvs = new Vector2[(xSize + 1) * (zSize + 1)];
float uvFactorX = 1.0f / xSize;
float uvFactorZ = 1.0f / zSize;

for (int i = 0, z = 0; z <= zSize; z++)
{
    for (int x = 0; x <= xSize; x++)
    {
        vertices[i] = new Vector3(x, 0, z);

        uvs[i++] = new Vector2(x * uvFactorX, z * uvFactorZ);

        //i++;
    }
}

triangles = new int[xSize * zSize * 6];

int vert = 0;
int tris = 0;
for (int z = 0; z < zSize; z++)
{
    for (int x = 0; x < xSize; x++)
    {
        triangles[tris + 0] = vert + 0;
        triangles[tris + 1] = vert + xSize + 1;
        triangles[tris + 2] = vert + 1;
        triangles[tris + 3] = vert + 1;
        triangles[tris + 4] = vert + xSize + 1;
        triangles[tris + 5] = vert + xSize + 2;

        vert++;
        tris += 6;

    }
    vert++;
}

applyNoise();
UpdateMesh();
顶点=新向量3[(xSize+1)*(zSize+1)];
UV=新矢量2[(xSize+1)*(zSize+1)];
浮动uvFactorX=1.0f/xSize;
浮动uvFactorZ=1.0f/zSize;

对于(int i=0,z=0;z当从100x100到300x300时,您可以尝试在开始的某个地方设置
mesh.indexFormat=indexFormat.UInt32;
,看看它是否解决了您的问题(另外,在顶部使用UnityEngine.Rendering添加
)?现在它将允许40亿个顶点。祝你好运!如果使用的顶点网格超过65535个,你需要添加额外的子网格或将mesh.indexFormat更改为32位Philipp Lenssen的平均值。计算你的顶点并除以65535,知道你需要多少子网格。