Отстать от создания Unity Meshes - PullRequest
0 голосов
/ 09 ноября 2019

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

Спасибо за любые отзывы!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...