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