Diablo 3 i StarCraft 2 mają fajną funkcję: mogę zacząć grać, zanim pełna gra lub aktualizacja zakończy pobieranie.
Myślę, że Diablo 3 pobiera obowiązkowe pliki, takie jak zasoby interfejsu użytkownika oraz niektóre siatki i tekstury, które są najpierw używane na kilku poziomach. Jednak rozpoczynając grę, mogę wybrać dowolny poziom, pod warunkiem, że mam odpowiednie zapisy. Nigdy nie spotkałem się z takim opóźnieniem podczas grania - start jest zawsze bardzo płynny.
Jak to działa? Jak mogę wdrożyć podobną funkcję?
user-experience
deployment
patching
nikitablack
źródło
źródło
Odpowiedzi:
Zasoby takie jak dźwięk, wideo, modele i tekstury są w większości pobierane, a dla każdego z tych zasobów istnieje wiele wersji. Te wiele wersji ma obsługiwać różne opcje graficzne.
Wysyłając najpierw zasoby potrzebne dla niskiej opcji graficznej (które również są najmniejsze). Masz wszystko, czego potrzebujesz, aby zagrać w tę grę, mimo że masz tylko około 15% wszystkich zasobów potrzebnych do obsługi każdej opcji graficznej.
Możesz to sprawdzić ponownie instalując StarCraft 2. Zagraj w niego, gdy tylko pozwoli Ci przejść do ekranu opcji graficznych. Wiele opcji i ustawień będzie niedostępnych.
źródło
Kiedyś wdrożyłem to dla MMO. Pewnego weekendu, gdy próbowałem zainstalować WOW dla mojej córki, upłynęło 48 godzin (łatki, błędy pobierania itp.), Więc postanowiłem stworzyć własne, lepsze rozwiązanie.
Gra zwykle wymaga powiedzenia 10 GB danych przed uruchomieniem. Nie wszystkie pliki są od razu potrzebne, ale gry zwykły czekać, aż wszystkie pliki będą obecne lokalnie. Moje rozwiązanie polegało na tym, aby gra działała lokalnie w normalny sposób, ale plik EXE został oszukany (przy użyciu minifiltratora plików systemu Windows), aby pomyśleć, że wszystkie pliki są już obecne. Gdy żądany plik nie był lokalny, system plików go pobrał i zapisał. W miarę potrzeby gra była powoli kopiowana lokalnie. Gdy dostępna była przepustowość, w tle spływały inne niepotrzebne jeszcze pliki. Działało to ze WSZYSTKIMI grami bez potrzeby ponownej kompilacji, ponieważ mój sterownik minifiltru pobierał pliki w razie potrzeby.
Najgorszą wadą było opóźnienie. Moim rozwiązaniem było stworzenie małego modelu łańcucha Markowa, aby przewidzieć, który plik może być potrzebny, i nadać priorytet programowi ładującemu w tle. Działa to jak urok, a nasza gra MMO była w stanie uruchomić prawie NATYCHMIAST po zaledwie EXE i kilka plików ekranu ładowania było lokalnych (~ 20 MB). Byliśmy w stanie kliknąć link na stronie internetowej i uruchomić naszą grę o pojemności ponad 10 GB w około 30 sekund . Mieliśmy 99% trafień, co oznacza, że kiedy gra potrzebowała nowego pliku po raz pierwszy, już tam był!
Z przyjemnością pomogę komukolwiek innemu to wdrożyć.
źródło
Również w niektórych grach obszary świata i pliki są opóźnione, zachowywane są tylko obszary obowiązkowe i można je również zainstalować podczas gry.
źródło
Podsumowując to, co powiedziało kilka osób, i może dodaj kilka informacji:
Będzie to oznaczać większe obciążenie sieci podczas grania, dopóki cała zawartość nie zostanie buforowana lokalnie, ale mniejsze początkowe obciążenie seryjne na twoich serwerach, a także krótsze i mniej frustrujące oczekiwanie na użytkowników podczas początkowego pobierania gry.
Oczywiście, jeśli użytkownik ma wolne połączenie sieciowe, może nadal wyświetlać komunikaty „proszę czekać, ładowanie zawartości” (podaj te) podczas przełączania stref lub możesz sprawdzić przepustowość przy pierwszym uruchomieniu gry i jeśli jest zbyt niski, aby pobrać niezawodnie w locie każą mu tam czekać, a następnie przez co najmniej cały pierwszy poziom (i jeszcze raz, gdy wchodzą do stref, które nie zostały jeszcze w pełni pobrane).
Zapobiega to opóźnieniom gry przez użytkownika, ponieważ jego połączenie sieciowe zostaje zablokowane.
źródło