В 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);
}
}
Спасибо за любые отзывы!