微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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 =.

因为我从不增加,所以它可能陷入无限循环.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐