《暗黑破坏神3》和《星际争霸2》具有一个不错的功能:我可以在完整游戏或更新下载完成之前开始玩游戏。
我猜暗黑破坏神3下载了诸如UI资产之类的强制性文件,以及首先在多个级别上使用的某些网格和纹理。但是,在开始游戏时,假设我有适当的存款,我可以选择所需的任何级别。玩游戏时,我从未遇到过这样的滞后现象,起步总是非常流畅。
这是如何运作的?如何实现类似功能?
《暗黑破坏神3》和《星际争霸2》具有一个不错的功能:我可以在完整游戏或更新下载完成之前开始玩游戏。
我猜暗黑破坏神3下载了诸如UI资产之类的强制性文件,以及首先在多个级别上使用的某些网格和纹理。但是,在开始游戏时,假设我有适当的存款,我可以选择所需的任何级别。玩游戏时,我从未遇到过这样的滞后现象,起步总是非常流畅。
这是如何运作的?如何实现类似功能?
Answers:
诸如声音,视频,模型和纹理之类的资产是下载的大部分,并且对于每个资产都有多个版本。这些多个版本将支持各种图形选项。
首先发送低图形选项所需的资产(也恰好是最小的)。尽管仅拥有支持每种图形选项所需总资产的15%左右,但您拥有玩游戏所需的一切。
您可以通过重新安装StarCraft 2进行测试。尽快播放它,然后您将转到图形选项屏幕。许多选项和设置将不可用。
我曾经为MMO实施过此操作。一个周末,试图为我的女儿安装WOW花费了48个小时,(补丁,下载错误等)使我决定自己制定一个更好的解决方案。
游戏通常需要10 GB的数据才能运行。并非所有文件实际上都是立即需要的,但是游戏通常要等到所有文件都本地出现后才能使用。我的解决方案是让游戏像往常一样在本地运行,但是EXE被欺骗(使用Windows文件微型过滤器)以为所有文件都已经存在。当请求的文件不在本地时,文件系统将其下载并保存。游戏已根据需要在本地缓慢复制。当有可用带宽时,其他尚未使用的文件就会在后台被欺骗。这适用于所有游戏,无需重新编译,因为我的minifilter驱动程序在需要时获取文件。
最大的缺点是延迟。我的解决方案是创建一个小的马尔可夫链模型,以预测接下来可能需要哪个文件,并确定后台加载程序的优先级。这就像一个魅力,我们的MMO仅在EXE之后就可以立即运行,并且一些加载屏幕文件是本地的(〜20 MB)。我们能够单击网页上的链接,并在大约30秒内运行10 GB以上的游戏。我们的命中率是99%,这意味着当游戏首次需要一个新文件时,它已经存在!
我很乐意帮助其他人实现这一目标。
总结几个人所说的话,并可能添加一些信息:
这将意味着在播放时会有更高的网络负载,直到所有内容都缓存在本地为止,但是服务器上的初始突发负载较小,并且在用户最初下载游戏时等待用户的时间更短且令人沮丧。
当然,如果用户的网络连接速度较慢,则在切换区域时,他可能仍然会收到“请稍候,加载内容”消息(提供这些消息),或者您可能想在最初启动游戏时检查带宽,以及下载时是否太低可靠地让他在那儿等待,然后至少等待整个第一级(然后在进入尚未完全下载的区域时再次等待)。
这可以防止用户由于实际的网络连接阻塞而陷入实际游戏中途。