c#-尝试使用脚本实时更新网格的顶点位置时,Unity游戏引擎崩溃
作者:互联网
因此,我统一创建了一个脚本,该脚本成功生成了由三角形组成的平面网格.该平面有400个顶点(20×20网格),其中361个正方形由2个三角形组成,每个三角形包含3个顶点(2166个索引).如前所述,在start()函数中设置了顶点,索引和法线,将顶点加载到称为vertices的vector3数组中,将索引加载到单个float数组中,将法线加载到vector3数组中.然后将它们分配给Start()函数中的网格(代表平面),如下所示:
mesh.vertices = vertices;
mesh.triangles = triangles;
mesh.normals = normals;
在update()函数中,调用了一个函数,该函数为平面网格(400)中的每个顶点计算新位置:
void Update ()
{
updateMesh ();
mesh.vertices = vertices;
}
使用updateMesh函数如下所示:
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()函数中尝试的.
但是,一旦统一按下播放按钮,引擎就会崩溃,我不确定为什么–统一渲染之前重新计算功能是否可能没有完成其循环? (我已经减少了网格中的顶点数量,因为当网格具有10000个顶点(100×100网格)时,会发生相同的问题).还是因为我在Update()函数中做的不正确?
解决方法:
我认为这可能是线路上的错字
for (float i = 0f; i<1f; i=+0.05f) {
它应该显示为= not =.
因为我从不增加,所以它可能陷入无限循环.
标签:unity3d,scripting,mesh,monodevelop,c 来源: https://codeday.me/bug/20191120/2043858.html