在完全下载游戏之前,如何使游戏可玩?


75

《暗黑破坏神3》和《星际争霸2》具有一个不错的功能:我可以在完整游戏或更新下载完成之前开始玩游戏。

我猜暗黑破坏神3下载了诸如UI资产之类的强制性文件,以及首先在多个级别上使用的某些网格和纹理。但是,在开始游戏时,假设我有适当的存款,我可以选择所需的任何级别。玩游戏时,我从未遇到过这样的滞后现象,起步总是非常流畅。

这是如何运作的?如何实现类似功能?


2
魔兽世界:P
Kroltan

3
在下载整个网页之前,如何查看网页?Google图片搜索如何在不使用无限时间下载的情况下呈现无限图像列表?游戏虽然比较复杂,但是却非常相似。
Lie Ryan

2
@LieRyan:关于“游戏更加复杂”,这句话根本没有基础。可能有一些游戏更加复杂,例如(在应用商店中,绝大多数软件都不能解决严重的问题),这些游戏的复杂性远不如散布成千上万台服务器的大规模可扩展网络搜索每天处理和存储数十亿用户请求。然后,搜索只是该公司的众多功能之一。因此,请通过思考的生命阶段,即游戏本质上比“普通”软件复杂。
菲涅耳2014年

1
@jhocking:你在跟我说话吗?(如果是这样,最好使用@ <用户名>,这样我会收到通知)不,不是很苦。在我小的时候,我认为游戏开发将成为软件工程之王。我现在知道的更好,尤其是在发布了许多商业游戏的源代码之后:)这是一个常见的误解,反复出现。Games-Dev确实看起来像Elite,但实际上,它只是软件开发的另一个专业,就像超级计算,搜索引擎,图像识别,电子邮件营销或用于大型E的ERPs。
菲涅耳2014年

1
简短的评论,我家里的带宽很差(在农村地区的生活费用),即使说“可玩”,游戏对我来说仍然无法玩。我必须等待“最佳”。否则,我会在每个加载屏幕上都等待5分钟,并且延迟是不真实的,因此在那时肯定会下载一些东西。可以通过限制带宽自行进行进一步的测试。
DoubleDouble

Answers:


72

诸如声音,视频,模型和纹理之类的资产是下载的大部分,并且对于每个资产都有多个版本。这些多个版本将支持各种图形选项。

首先发送低图形选项所需的资产(也恰好是最小的)。尽管仅拥有支持每种图形选项所需总资产的15%左右,但您拥有玩游戏所需的一切。

您可以通过重新安装StarCraft 2进行测试。尽快播放它,然后您将转到图形选项屏幕。许多选项和设置将不可用。


24
您还可以采用适当的线性度将相同的技术应用于游戏中的整个地图或关卡-首先下载第一个关卡或其他内容。例如,Guild Wars 2仅在光盘上附带了音频和起始区域(加上一些额外的内容)。
乔什

12
某些游戏(例如暴雪游戏)还可以根据您当前在游戏中的位置来按需下载资产。这非常类似于通常如何从本地硬盘驱动器异步流式传输资产,但是在这种情况下,在请求资产准备就绪之前会有更大的延迟。
bcrist 2014年

1
IIRC,暗黑破坏神3使用Josh Petrie所描述的方法-只要资源可用(此答案中描述的可能是低质量版本),它就可以播放,但是最初只能播放第一幕。也就是说,如果你油门你的互联网连接的话,你将被迫停止,并让下载完成法案一后追赶
亚伦·杜福尔

1
换句话说,一旦安装了可执行文件,游戏就可以从技术上运行。这可能只是几兆字节的数据。您可以玩多长时间取决于可用的资产数量。安装在20GB中的游戏具有大约19.9999GB的数据和0.0001GB的可执行代码。只要它可以继续从网络加载数据,游戏就可以在不到安装完成的1%的情况下运行。
phyrfox

1
@Brian查看编辑历史记录。当我写下答案时,它什么都没问。
ClassicThunder14年

33

我曾经为MMO实施过此操作。一个周末,试图为我的女儿安装WOW花费了48个小时,(补丁,下载错误等)使我决定自己制定一个更好的解决方案。

游戏通常需要10 GB的数据才能运行。并非所有文件实际上都是立即需要的,但是游戏通常要等到所有文件都本地出现后才能使用。我的解决方案是让游戏像往常一样在本地运行,但是EXE被欺骗(使用Windows文件微型过滤器)以为所有文件都已经存在。当请求的文件不在本地时,文件系统将其下载并保存。游戏已根据需要在本地缓慢复制。当有可用带宽时,其他尚未使用的文件就会在后台被欺骗。这适用于所有游戏,无需重新编译,因为我的minifilter驱动程序在需要时获取文件。

最大的缺点是延迟。我的解决方案是创建一个小的马尔可夫链模型,以预测接下来可能需要哪个文件,并确定后台加载程序的优先级。这就像一个魅力,我们的MMO仅在EXE之后就可以立即运行,并且一些加载屏幕文件是本地的(〜20 MB)。我们能够单击网页上的链接,并在大约30秒内运行10 GB以上的游戏。我们的命中率是99%,这意味着当游戏首次需要一个新文件时,它已经存在!

我很乐意帮助其他人实现这一目标。


5
+1,如果您可以共享此驱动程序,那就太好了,因为我正在寻找类似的驱动程序,并且像您一样自己创建驱动程序,但是如果已经完成,我很乐意使用它。
Furkan Omay 2014年

5
有趣地使用一些相当高级的工程。您确实应该写一篇关于此的博客文章。:)机器学习技术实际上有多少帮助?他们能如何预测所需的文件?
保罗·曼塔

1
@FurkanOmay这些东西几乎总是某人雇主的公司财产。不要要求人们破坏合同条款。
jwenting 2014年

@jwenting据我了解,他所做的不是为了一家公司,而是为了他的女儿以及像《魔兽世界》这样的游戏。我只是礼貌地问,没有人被强迫。他可以以任何理由拒绝,一切都会好起来的。我之所以问是因为他说“他很乐意帮助其他人实现这一目标”,所以我认为至少要求一个起点并不是一个坏主意,因为我已经说过,我愿意从头开始实施起来
Furkan Omay 2014年

3

同样,在某些游戏中,游戏结束时的世界区域和文件被延迟,仅保留必填区域,并且在仍在玩游戏时也可以进行安装。


2

总结几个人所说的话,并可能添加一些信息:

  • 初始下载量很小,其余仅用于启动文件和下载管理器。最好包括帐户创建,头像创建以及其中的起始区域。
  • 在运行的同时,用户正在登录并创建其头像,首先开始下载其他内容,低级区域和常见文件(例如基本的声音和纹理,您确实会在整个游戏中尽可能多地重复使用它们)
  • 随着用户逐步升级,开始预下载即将到来的区域和其他内容
  • 如果用户选择了需要下载的选项,请先下载低分辨率版本,然后在玩游戏时根据需要下载高分辨率版本,并用运行中的版本替换显示的低分辨率版本。这样,用户可以看到一些东西,并逐渐显示出游戏的全部荣耀(当然,如果他有足够的带宽和计算机能力)
  • 重复直到下载完所有内容


这将意味着在播放时会有更高的网络负载,直到所有内容都缓存在本地为止,但是服务器上的初始突发负载较小,并且在用户最初下载游戏时等待用户的时间更短且令人沮丧。
当然,如果用户的网络连接速度较慢,则在切换区域时,他可能仍然会收到“请稍候,加载内容”消息(提供这些消息),或者您可能想在最初启动游戏时检查带宽,以及下载时是否太低可靠地让他在那儿等待,然后至少等待整个第一级(然后在进入尚未完全下载的区域时再次等待)。
这可以防止用户由于实际的网络连接阻塞而陷入实际游戏中途。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.