首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Unity3D:通过网络加载资产时的平滑交互?

Unity3D:通过网络加载资产时的平滑交互?
EN

Stack Overflow用户
提问于 2013-07-02 23:30:48
回答 1查看 1.5K关注 0票数 1

我正在用Unity3D 3.x版在Mac上制作一个联网的电脑游戏。我有一个游戏客户端和一个游戏服务器。每当数据从服务器到达客户端时,客户机就会冻结一点点(~0.5秒),呈现新数据,然后继续。是否有任何方法可以优化我的游戏,这样传入的数据不会影响用户与游戏客户端的交互?

我现在要做的是:

  1. 我创建了一个新线程来从服务器中提取数据。
  2. 当数据到达时,我将其放入由互斥锁保护的缓冲区中。
  3. 在统一线程中,在每个帧上,我检查缓冲区是否为空。如果它不是空的,我将等待互斥锁,以获得处理数据的权限。一旦获得了权限,就会解析数据并呈现出来。

我这样做是因为不允许在我创建的网络线程中创建新的GameObject。但是我想知道我是否可以做些什么来优化用户体验。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-02 23:44:46

总是最好的第一配置文件,以了解冻结的来源,也就是说,它是由于等待锁?因为解析?由于GameObject实例化?三个都行吗?

统一轮廓器(仅限专业人员)

一般解决办法:

  • 如果暂停是由于锁引起的,请尝试将缓冲拆分到不同的回收箱中,这样主线程就可以访问下一个非空的桶,而不必获得锁,或者至少这样一个粗粒度的锁。
  • 如果解析是放缓,则仍然可以在后台线程中完成所有这些工作。在最后必须实例化GameObjects之前尽可能多地执行。
  • 如果这是实例化GameObjects的最后一步,那么您可以尝试预先实例化您期望的对象,简单地在新的网络数据上重新配置它们;或者将实例化过程划分为单独的增量阶段,使用不明显的小暂停,例如,首先是根节点,然后是它的子节点,等等,直到完全重构。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17437446

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档