通过创建Unity Meshes

时间:2019-11-08 23:00:24

标签: c# unity3d mesh

在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);
     }
 }

感谢您的反馈!

1 个答案:

答案 0 :(得分:0)

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