编程语言
首页 > 编程语言> > c#-尝试使用脚本实时更新网格的顶点位置时,Unity游戏引擎崩溃

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