Как сделать игры более загруженными до их полной загрузки?

Diablo 3 и StarCraft 2 имеют приятную возможность: я могу начать играть до завершения полной игры или обновления.

Я думаю, Diablo 3 загружает обязательные файлы, такие как активы пользовательского интерфейса, а также некоторые сетки и текстуры, которые сначала используются на нескольких уровнях. Однако, при запуске игры, я могу выбрать любой уровень, который я хочу, предполагая, что у меня есть соответствующие сбережения. Я никогда не испытывал никакого отставания от такого, когда игра - начало всегда очень гладко.

Как это работает? Как реализовать подобную функцию?

74 голоса | спросил nikitablack 21 +04002014-10-21T17:25:30+04:00312014bEurope/MoscowTue, 21 Oct 2014 17:25:30 +0400 2014, 17:25:30

4 ответа


71

Активы, такие как звук, видео, модели и текстуры, являются большинством загрузок, и для каждого из этих активов существует несколько версий. Эти несколько версий поддерживают различные графические параметры.

Сначала отправляем активы, необходимые для низкой графической опции (которые также являются самыми маленькими). У вас есть все необходимое, чтобы играть в игру, несмотря на то, что у них всего 15% от общего объема активов, необходимых для поддержки каждого графического варианта.

Вы можете проверить это, переустановив StarCraft 2. Воспроизведите его, как только он позволит вам перейти на экран графических параметров. Многие параметры и настройки будут недоступны.

ответил ClassicThunder 21 +04002014-10-21T18:28:19+04:00312014bEurope/MoscowTue, 21 Oct 2014 18:28:19 +0400 2014, 18:28:19
31

Я однажды применил это для MMO. В один уикенд при попытке установить WOW для моей дочери прошло 48 истекших часов (исправления, ошибки загрузки и т. Д.), Поэтому я решил сделать свое собственное лучшее решение.

Обычно игра требует 10 ГБ данных, прежде чем она запустится. Не все файлы на самом деле нужны сразу, но игры ожидали, пока все файлы будут присутствовать на месте. Мое решение состояло в том, чтобы игра выполнялась локально как обычно, но EXE был обманут (используя мини-фильтр Windows), чтобы думать, что все файлы уже присутствуют. Когда запрошенный файл не был локальным, файловая система загрузила его и сохранила. Игра была скопирована локально по мере необходимости. Когда была доступная полоса пропускания, в фоновом режиме текли другие, еще не нужные файлы. Это работало со всеми играми без перекомпиляции, потому что мой мини-драйверчик получал файлы, когда это было необходимо.

Худшим недостатком была латентность. Моим решением было создать небольшую модель Markov Chain, чтобы предсказать, какой файл может понадобиться дальше, и приоритет фонового загрузчика. Это работало как прелесть, и наша MMO смогла работать почти мгновенно после просто EXE, а несколько файлов загрузочных файлов были локальными (~ 20 МБ). Мы смогли щелкнуть ссылку на веб-странице и запустить нашу игру с более чем 10 ГБ примерно за 30 секунд . У нас был коэффициент попадания 99%, а это означало, что в первый раз игра нуждалась в новом файле!

Я был бы рад помочь кому-либо еще реализовать это.

ответил Chris Mayer 24 +04002014-10-24T00:42:51+04:00312014bEurope/MoscowFri, 24 Oct 2014 00:42:51 +0400 2014, 00:42:51
3

Кроме того, в некоторых играх игровые зоны и файлы для игр заканчиваются, сохраняются только обязательные области, а также могут быть установлены во время игры.

ответил Chantola 22 +04002014-10-22T02:19:06+04:00312014bEurope/MoscowWed, 22 Oct 2014 02:19:06 +0400 2014, 02:19:06
2

Подводя итог тому, что говорили несколько человек, и, возможно, добавьте некоторую информацию:

  • начальная загрузка небольшая, просто загрузочные файлы и менеджер загрузки для остальных. Было бы неплохо включить создание аккаунта, создание аватара и, возможно, начальные зоны в этом.
  • во время работы пользователь регистрируется и создает свои аватары, сначала загружает другие материалы, зоны низкого уровня и общие файлы (например, основные звуки и текстуры, вы как можно больше используете их во всей игре)
  • , когда пользователь переходит через уровни, запускает предварительную загрузку предстоящих зон и другого контента.
  • , если пользователь выбирает параметры, требующие загрузки, сначала загружайте варианты с низким разрешением, а затем, когда он играет, загружает версии с более высоким разрешением по мере необходимости и заменяет версии с низким разрешением, отображаемые с помощью кнопок «на лету». Таким образом, пользователь видит что-то, и постепенно раскрывается полная слава игры (если у него достаточно полосы пропускания и вычислительной мощности, конечно)
  • повторить, пока все не будет загружено.


Это будет означать более высокую нагрузку на сеть во время игры, пока все содержимое не будет кэшировано локально, но меньшая первоначальная пакетная нагрузка на ваших серверах, а также более короткое и менее разочаровывающее ожидание для пользователей, когда они изначально загружают игру.
Конечно, если у пользователя медленное сетевое соединение, он может по-прежнему получать сообщения «Подождите, загрузите контент» (если это необходимо) при переключении зон, или вы можете проверить пропускную способность при первоначальном запуске игры, а если слишком мало для загрузки надежно «на лету» заставляют его ждать там, по крайней мере, всего первого уровня (а затем снова при входе в зоны, которые еще не были полностью загружены).
Это позволит предотвратить отставание пользователя в середине реального игрового процесса, потому что его сетевое соединение увязнет.

ответил jwenting 24 +04002014-10-24T13:35:58+04:00312014bEurope/MoscowFri, 24 Oct 2014 13:35:58 +0400 2014, 13:35:58

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132