c# - 通过创建 Unity Meshes 获得延迟
问题描述
在 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);
}
}
感谢您的任何反馈!
解决方案
解决了。Unity 垃圾收集器有问题。我必须确保在创建网格后手动删除它们。我将它们放在一个长度数组中(无论您希望它们存在多长时间),然后在它们超过该长度时删除旧元素。
推荐阅读
- swift - Set的安全编码
- java - JSON 数组长度为 -1 但我可以清楚地看到 JSON 中的对象
- javascript - AnimationMixer 不会播放动画(gltf 文件)
- mysql - 如何复制行?
- python - 不能将序列乘以“float”类型的非 int/Int 对象不可迭代
- firebase - firebase-messaging - 致命:找不到回调
- html - 将 p 标签对齐到 div 的长度
- weblogic - 用于 Weblogic 安全领域角色创建和添加条件的 wlst 命令
- javascript - 为什么这段代码没有按应有的方式运行。请解释
- c - 三元组问题:解决它并消除错误