【问题标题】:Threads in Unity to avoid Animation freezeUnity中的线程以避免动画冻结
【发布时间】:2019-09-04 08:31:00
【问题描述】:

每次我从保存的文件加载纹理时,我的场景中的任何动画都会被冻结,直到从文件加载完成。 我阅读了很多关于 Threads 的不同意见,但没有一个得到答案。但我必须在不同的线程中加载纹理以避免冻结。 我的代码附加到一个游戏对象,它是一个 UI 弹出窗口

void Start() {
Texture2D tex = LoadTexFromFile(); //Should be in a diffrent thread that returns a texture
sprite = Sprite.Create(tex, 
                       new Rect(0, 0, tex.width, tex.height), 
                       new Vector2(tex.width / 2, tex.height / 2));

picFrame.GetComponent<Image>().overrideSprite = sprite; }

如何在我的代码中安全地使用线程?

【问题讨论】:

  • 不是重复的。此外,该用户没有得到答案。
  • 我当时在想,为什么@Michał Powłoka 勾选了那个答案呢?
  • 他用解决方法回答了自己的问题,因为人们没有回答他。此外,他读取文件的方式与我的代码不同,我无权访问 LoadTexFromFile(),他在阅读器本身上找到了我无权访问的解决方法

标签: c# multithreading unity3d thread-safety threadpool


【解决方案1】:

Best practices 说您应该不要在关卡期间加载资源,而应在开始时加载资源,以避免中断。你为什么要反对 Unity 提供的中间件?让它为您管理资产并在关卡开始时加载它们。

资产流式传输有一个用例(不是特定于 Unity),但通常保留用于 AAA 按需资产加载,例如纹理;网;以及大型开放世界游戏中的其他资产,但我怀疑这里的情况。这样的功能非常复杂,这里就不赘述了。

告诉我更多

【讨论】:

  • 感谢您的回答。我无法在一开始就加载所有内容,因为在内存中加载大量 tex 屏幕截图是徒劳的。我的场景是一张地图,每个关卡都存储一个截图纹理。单击关卡时,应从文件中加载已保存的纹理。如果我从一开始就开始加载所有级别的所有屏幕截图,那么场景开始需要很长时间,这已经是这种情况了。这就是为什么我想在不同的线程上分离加载纹理
  • @SHAI 在我看来,您的游戏资产没有按级别优化。 Unity 可以为您做这种事情。如果您发现情况并非如此,则说明有问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-14
  • 2018-04-15
  • 2018-05-03
  • 1970-01-01
  • 1970-01-01
  • 2012-06-27
相关资源
最近更新 更多