Unity发布的WebGL在服务器上加载超级慢,有什么解决方法吗?

Unity发布的WebGL在服务器上加载超级慢,有什么解决方法吗?,第1张

1Resources文件夹里东西越多越慢,能弄成ab包就尽量弄成,资源预知体什么的最好别放这文件夹下。
2建议使用brotli压缩方式。
3那就是服务器做缓存机制,了解webgl文件包的应该度知道其文件格式,主要数据在build文件下我测试了很多次加载过程,发现大部分时间都是在下载和解压unityweb后缀的文件上,而且unityweb这个文件永远没缓存过,所以在服务端加个缓存机制就成了,直接看效果吧。
虽然第一次慢但是后面就很快了,但是解压unity压缩包这块也是可以优化的。

unity出现连接到服务器意思是unity程序开始运行了。根据查询相关公开信息,当程序运行的时候,它就显示开始连接服务器。Unity是跨平台游戏引擎开发商,是实时3D互动内容创作和运营平台。包括游戏开发、美术、建筑、汽车设计、影视在内的所有创作者,借助Unity将他们的创意变成现实。

Unity3D中的多线程。线程是一个相当复杂的话题,但如果掌握了它,就可以从容的使用多个硬件处理器或处理很难划分管理数据块。
如在场景中用A算法进行大量的数据计算,变形网格中 *** 作大量的顶点,持续的要运行上传数据到服务器,二维码识别等图像处理,如果同时你要处理很多事情或者与Unity的对象互动小可以用thread,否则使用coroutine。
线程是在程序中与其他线程同时运行的进行。在多处理器的计算机上可以做到多个线程的真正的同步,更多的线程取决于有多个处理核心。
Unity3D编程时,总有个主线程执行你的代码,也可以创建额外的线程和主线程同时运行。而Unity中,你仅能从主线程中访问Unity3D的组件,对象和Unity3D系统调用。任何企图访问这些项目的第二个线程都将失败并引发错误,这是一个要重视的一个限制。
所以当你写代码时,你认为一个函数开始并达到它执行的点后返回,同样你做的东西又在另外一个函数中执行,但又没有发生相应的变化。 *** 作系统决定你代码的执行,任何时候,你的代码只能暂时”休眠”掉,然后让另外的代码开始运行。
Unity3D中的多线程及使用多线程
在这个例子中,在第一个线程将A的值加载到CPU寄存器中准备+1后被中断,第二个线程来读取A的值,并减去1000,这时A应该是-950,现在第一个线程重新开始,它在寄存器中的50+1的结果存储于A,A变成了51,而-950已经丢掉了。
从根本上说,要在用多个线程在同时对变量或内存访问时,要采取很多预防措施来确保不会发生这样的事。所以Unity决定从另外线程访问这些变量或者内存是无效的,只是为了避免所有系统和框架对象出现问题。所以要确保一次只有一个线程来修改变量,这不意味着你不能用多线程工作,你可以用”排序”来解决这个问题。
C#中有lock这个关键字,以确保只有一个线程可以在特定时间内访问特定的对象,这里说对象是因为。法锁定一个类型值(value type)或原型(primitive)。
int a = 50;
object guard = new object();
void ThreadOneCode()
{
//一些代码在这
lock(guard)
{
a = a + 1;
}
//其余一些代码在这
}
void ThreadTwoCode()
{
//一些代码在这
lock(guard)
{
a = a - 1000;
}
复制代码
所有都锁定在guard内,保证同一个时间只有一个线程通过guard访问它,你可以使用任何合适的对象。现在你可能会有各种各样的问题,比如你要锁定的不止一件事,可能是互相嵌套的。那我们该怎么办呢
我们这个类叫Loom,让你可以轻松在另一个线程运行代码,这里有两个要注意的功能:
RunAsync(Action)-在另一个线程上运行的一组代码
QueueOnMainThread(Action,[可选]float time)-运行在主线程的语句(可选延迟)
用LoomCurrent访问Loom-创建一个看不见的GameObject用来处理游戏主线程的互动,下面这个例子用Loom来更新一个网格所有的顶点乘的结果。
//缩放一个网格在第二个线程
复制代码


欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/zz/12626680.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-26
下一篇 2023-05-26

发表评论

登录后才能评论

评论列表(0条)

保存