通过创建Unity网格获得滞后

问题描述 投票:0回答:1

在Unity3D中,我为3D中的某种导弹创建了这种预测路径。起初我只是使用线条渲染,直到我很快意识到这很有局限性。所以我改用自己绘制网格,而且相当漂亮。我只是有一个问题。在场景中,当我运行drawMesh函数时,一切都运行得很快,但只要我切换到另一个场景,就会有大约2秒的滞后,然后一切恢复正常。线性渲染并没有出现任何滞后,所以我一定是搞乱了什么,因为绘制自己的网格应该更有效率。

我怀疑在创建我的网格时,不知何故,旧的网格从来没有被删除,因此当我改变场景时,需要一点时间来清除它们。我希望垃圾收集器能处理好这个问题,但我可能是设置得有点不对。你在场景中停留的时间越长,滞后的时间就越长,所以这就是我怀疑的地方。不过这只是猜测。

如果有人能看看我的代码并提出修复建议,我会非常感激。

下面是代码。有点复杂,但也没办法。我将包括我认为是罪魁祸首的代码区域,因为同样的代码与行渲染工作。它每帧运行约30次。

void drawMesh(Vector3[] vertices, Material m)
     {
         var mf = GetComponent<MeshFilter>();

         var mesh = new Mesh();
         mf.mesh = mesh;

         mesh.vertices = vertices;

         var tris = new int[6]
         {
             // lower left triangle
             0, 2, 1,
             // upper right triangle
             2, 3, 1
         };
         mesh.triangles = tris;

         var normals = new Vector3[4]
         {
             -Vector3.forward,
             -Vector3.forward,
             -Vector3.forward,
             -Vector3.forward
         };
         mesh.normals = normals;

         var uv = new Vector2[4]
         {
             new Vector2(0, 0),
             new Vector2(1, 0),
             new Vector2(0, 1),
             new Vector2(1, 1)
         };
         mesh.uv = uv;
         Graphics.DrawMesh(mesh, Vector3.zero, Quaternion.identity, m, 0, null, 0, null, false, false);
     }
 }

谢谢你的任何反馈!

c# unity3d mesh
1个回答
0
投票

解决了。 Unity的垃圾收集器有问题。 我必须确保我在创建网格后手动删除它们。 我把它们放在一个长度的数组中(无论你希望它们存在多久),然后删除旧元素,一旦它们超过了然后的长度。

© www.soinside.com 2019 - 2024. All rights reserved.