Najlepsza odpowiedź
Cóż, mogę odpowiedzieć na pytanie dotyczące Unity .
Kiedyś był dobrze prosperującym ekosystemem gier Unity w przeglądarce, zwłaszcza na Facebooku. Odtwarzacz sieciowy Unity był wystarczająco przyzwoity, aby uzyskać ładną grafikę i płynną liczbę klatek na sekundę (pod warunkiem, że wykonałeś dużo pieczenia i optymalizacji). Kiedyś pracowałem nad poważną grą / symulacją, która została wdrożona w odtwarzaczu internetowym i w pewnym sensie przekroczyłem jej granice, więc wiedziałem, co jest w stanie.
Wszystko się zmieniło, gdy Chrome zdecydował się zabić obsługa NPAPI, na której oparty jest odtwarzacz sieciowy. Co to jest NPAPI? Pełne szczegóły są tutaj – NPAPI – Wikipedia – jednak, mówiąc w skrócie, jest to metoda tworzenia wtyczek dla różnych popularnych przeglądarek. Jednak NPAPI był stary, podatny na problemy z bezpieczeństwem i pojawiło się wezwanie do używania HTML5 / WebGL itp., Więc Chrome zdecydował się go wycofać.
Największą różnicą między NPAPI a używaniem WebGL jest to, że ten pierwszy dał prawie nieograniczony dostęp do zasobów komputera lokalnego (szczegóły znajdziesz w Wtyczki NPAPI – Google Chrome ). W przypadku Unity3D WebGL istnieją dwa duże problemy:
Po pierwsze, nie ma natywnej kompilacji kodu dla HTML5 / WebGL. Firma Unity rozwiązała ten problem, kompilując projekt w postaci zoptymalizowanego kodu JavaScript. To jest duży , jeśli chodzi o rozmiar pliku, ponieważ większość kodu silnika Unity musi tam być, aby projekt mógł działać, a Unity nie jest wcale lekki. W przypadku odtwarzacza internetowego większość kodu silnika znajduje się już w bibliotece DLL lub we wtyczce, więc możesz po prostu załadować dane sceny i uruchomić je. Jednak w przypadku odtwarzacza WebGL kod silnika musi być konsekwentnie pobierany ponownie i nie jestem pewien, czy istnieje jeszcze na to rozwiązanie.
Aby zmniejszyć rozmiar, kod WebGL ma być skompresowane. Oznacza to jednak, że kod musi zostać zdekompresowany na komputerze klienta po pobraniu , co powoduje, że działanie jest powolne i niezgrabne.
Problemem zabójczym jest pamięć. W przeciwieństwie do NPAPI, po uruchomieniu odtwarzacza internetowego WebGL możesz używać tylko pamięci, którą ma przeglądarka, a to jest szczerze mówiąc poza twoją kontrolą. Gracz może mieć otwartych ponad 100 zakładek, przez co nie ma wystarczającej ilości pamięci do uruchomienia gry. Lub twoja gra może być zbyt duża dla limitów pamięci przeglądarki, powodując jej awarię podczas ładowania, bez komunikatu o błędzie (tak było 2 lata temu, kiedy ją wypróbowałem).
Zasadniczo masz zadowolić się mniej szczegółowymi modelami, gorszą jakością zasobów gry (dźwiękiem, teksturami itp.), aby dodać coś do korzystania z WebGL / HTML5. Franky, wątpię, czy WebGL / HTML5 kiedykolwiek zapewniłby poziom jakości i liczby klatek na sekundę, który dawałyby stare wtyczki NPAPI, więc myślę, że cały ekosystem gier sieciowych Unity został wymazany.
Zwróć uwagę, że jest to głównie dla graczy Unity3D WebGL – istnieją inne silniki gier zdolne do uruchamiania gier w WebGL, chociaż zazwyczaj są one oparte na JavaScript i zoptymalizowane pod kątem sieci. Unity3D to olbrzymi silnik, a internet nie jest już obywatelem pierwszej klasy jako platforma wdrożeniowa.
W każdym razie nie byłem na scenie Unity przez ostatnie dwa lata, więc mam nadzieję, że ktoś mi zaprzeczy.
Odpowiedź
Jest tu ukryty problem z treścią, a także problem inżynierii społecznej, ale ja zamierzam porozmawiać o kwestiach technicznych. Mógłbyś napisać kilka książek na temat pierwszych dwóch.
TL; DR tutaj jest taki, że naprawdę nie możesz uzyskać takiej samej wydajności AAA z platforma internetowa, której można oczekiwać od programów natywnych. Istnieją pewne obejścia, ale ich implementacja przez programistów jest droższa.
1.) Kompilacja w czasie wykonywania i przetwarzanie zasobów
W przeciwieństwie do standardowej metody produkcji gier, gra internetowa musi obecnie skompilować swój kod i uzyskać dostęp do powiązanych zasobów w czasie rzeczywistym. Dawniej gra miała wstępnie skompilowane zasoby i kod, który byłby ładowany i uruchamiany na żądanie. Wstępne skompilowanie gry pozwala zoptymalizować grę, aby działała lepiej w różnych sytuacjach. Niektóre z tych dostosowań mają miejsce podczas instalacji (różnice w IE, PC / MAC / konsoli), a niektóre podczas konfigurowania opcji gry.
Ponieważ ta optymalizacja ma miejsce przed uruchomieniem, możesz wczytać grę szybciej (już wiesz, co musisz zrobić). Jednak kompilacja w czasie wykonywania oznacza, że musisz to wszystko rozgryźć w czasie wykonywania, a nie wcześniej. Zwykle zwiększa to między innymi czas ładowania. Teoretycznie możliwe jest buforowanie pobranych danych, ale przeglądarka (lub nieszczęsny użytkownik) może bardzo łatwo zastąpić to, co robisz. Zobacz nr 3.
2.) Konserwacja serwera
Za pomocą przeglądarki internetowej można zdalnie przechowywać pliki i zasoby, ale stanowi to problem z utrzymaniem firm zajmujących się grami – wymaga czas i pieniądze na utrzymanie usług serwerowych. Ten problem można drastycznie zmniejszyć, instalując grę raz na komputerze lokalnym i okresowo dostarczając poprawki zamiast ciągłych aktualizacji strumieniowych. Przepustowość = $$$, nie wspominając o informatyce wymaganej do obsługi serwerów z maksymalnym czasem sprawności.
3.) Narzut / ograniczenia dotyczące przeglądarki
Uruchomienie czegokolwiek w przeglądarce internetowej oznacza, że musisz pracować nie tylko z systemem operacyjnym jako wymaganiem systemowym, ale także z dodatkową pamięcią i czasem przetwarzania, które będzie zużywać przeglądarka. Na przykład Chrome używa teraz ~ 148 MB, aby odpowiedzieć na to pytanie! Prawdopodobnie nie jest to złe dla komputerów PC lub Mac, ale jest zabójcze dla tabletów.
Ponadto większość przeglądarek ma funkcje bezpieczeństwa, które ograniczają interakcję przeglądarki z systemem operacyjnym i sprzętem. Oznacza to, że niektóre rodzaje operacji wydajnościowych, które normalnie można wykonać w przypadku wstępnie skompilowanej gry, są po prostu niemożliwe w przeglądarce (często bezpośredni dostęp do pamięci).