在Unity中,我创建了一个脚本,成功生成了由三角形组成的平面网格。该平面有400个顶点(20x20网格),由361个由2个三角形组成的正方形组成,每个三角形包含3个顶点(2166个索引)。如前所述,顶点、索引和法线是在start()函数中设置的,其中顶点被加载到名为vertices的vector3数组中,索引被加载到单个浮点数数组中,法线被加载到vector3数组中。然后在Start()函数中将它们分配给一个表示平面的网格,如下所示:
mesh.vertices = vertices;
mesh.triangles = triangles;
mesh.normals = normals;
在update()函数中,调用了一个函数来计算平面网格(400个顶点)中每个顶点的新位置。
void Update ()
{
updateMesh ();
mesh.vertices = vertices;
}
更新网格的函数如下所示:
void updateMesh()
{
//This function will update the position of each vertex in the mesh
for (float i = 0f; i<1f; i=+0.05f) {
for (float j = 0f; j<1f; j+=0.05f) {
pos = (int)((i * 20) + (j*20));
vertices[pos] = updatePt(j, i);
}
}
}
一旦新的顶点被更新,索引和法线保持不变,但是新计算出的顶点位置必须加载到网格对象上。如上所示,在Update()函数中也尝试了这一点。
然而,一旦在Unity中按下播放按钮,引擎就会崩溃,我不确定原因是什么-可能是重新计算函数在Unity渲染之前没有完成其循环吗?(因为当网格有10000个顶点(100x100网格)时出现相同的问题,我已经减少了网格中顶点的数量)。或者是因为我在Update()函数中没有做正确的事情?
updateMesh()
方法的调用注释掉,它是否仍会崩溃? - Max YankovUploadMeshData()
方法吗?http://docs.unity3d.com/ScriptReference/Mesh.UploadMeshData.html - Max YankovupdateMesh
方法而没有上传网格数据呢?如果你在与网格顶点完全不相关的数据上运行它,比如抽象的数组?通常情况下,尽可能地将错误局部化是一个好习惯,并且删除一切可以重现错误的内容。 - Max Yankov