У Diablo 3 и StarCraft 2 есть приятная особенность: я могу начать играть до полной загрузки игры или обновления.
Я предполагаю, что Diablo 3 загружает обязательные файлы, такие как ресурсы пользовательского интерфейса, а также некоторые сетки и текстуры, которые сначала используются на нескольких уровнях. Тем не менее, при запуске игры я могу выбрать любой уровень, который мне нужен, при условии, что у меня есть соответствующие сохранения. Я никогда не испытывал никакого отставания от игры во время игры - старт всегда очень плавный.
Как это работает? Как я мог реализовать подобную функцию?
user-experience
deployment
patching
nikitablack
источник
источник
Ответы:
Активы, такие как звук, видео, модели и текстуры, составляют основную часть загрузки, и для каждого из этих активов существует несколько версий. Эти несколько версий должны поддерживать различные графические опции.
Посылая ресурсы, необходимые для опции низкого графического изображения вначале (которые также оказываются самыми маленькими). У вас есть все, что нужно для игры, несмотря на то, что у вас есть всего 15% от общего объема активов, необходимых для поддержки каждого графического варианта.
Вы можете проверить это, переустановив StarCraft 2. Воспроизведите его, как только он позволит вам перейти на экран графических опций. Многие параметры и настройки будут недоступны.
источник
Я однажды реализовал это для ММО. Однажды на выходные, когда я пытался установить WOW для моей дочери, ушло 48 часов (исправления, ошибки загрузки и т. Д.), Поэтому я решил найти собственное лучшее решение.
Для запуска игры обычно требуется 10 ГБ данных. Не все файлы на самом деле нужны сразу, но игры привыкли ждать, пока все файлы не появятся локально. Мое решение состояло в том, чтобы игра работала локально, как обычно, но EXE обманом (используя минифильтр файлов Windows) решил, что все файлы уже присутствуют. Когда запрашиваемый файл не был локальным, файловая система загрузила его и сохранила. Игра медленно копировалась локально по мере необходимости. Когда была доступная полоса пропускания, другие, пока не нужные, файлы добавлялись в фоновом режиме. Это работало со ВСЕМИ играми без необходимости перекомпиляции, потому что мой драйвер минифильтра получил файлы при необходимости.
Худшим недостатком была задержка. Моим решением было создать небольшую модель цепочки Маркова, чтобы предсказать, какой файл может понадобиться дальше, и установить приоритет для фонового загрузчика. Это работало как чудо, и наша MMO могла работать почти НЕМЕДЛЕННО после того, как только EXE-файл и несколько файлов с экрана загрузки были локальными (~ 20 МБ). Мы смогли щелкнуть ссылку на веб-странице и запустить нашу игру объемом более 10 ГБ примерно за 30 секунд . У нас был коэффициент попадания 99%, то есть, когда игре понадобился новый файл, он уже был там!
Я был бы рад помочь кому-либо еще реализовать это.
источник
Кроме того, в некоторых играх области и файлы конечного игрового мира откладываются, сохраняются только обязательные области, и их также можно установить во время игры.
источник
Чтобы подвести итог тому, что сказали несколько человек, и, возможно, добавить некоторую информацию:
Это будет означать более высокую нагрузку на сеть во время игры до тех пор, пока весь контент не будет кэширован локально, но меньшую начальную пакетную нагрузку на ваши серверы, а также более короткое и менее разочаровывающее ожидание пользователей во время первоначальной загрузки игры.
Конечно, если у пользователя медленное сетевое соединение, он может по-прежнему получать сообщения «пожалуйста, подождите, загружая контент» (если они есть) при переключении зон, или вы можете проверить пропускную способность при первом запуске игры и, если она слишком низкая, для загрузки надежно на лету попросить его подождать хотя бы весь первый уровень (и снова при входе в зоны, которые еще не были полностью загружены).
Это предотвращает отставание пользователя в середине реального игрового процесса, потому что его сетевое соединение прерывается.
источник