Migliore risposta
Bene, posso rispondere alla domanda per Unity .
era un fiorente ecosistema per i giochi Unity nel browser, specialmente su Facebook. Il webplayer Unity era abbastanza decente da permetterti di ottenere una bella grafica e un framerate fluido (a condizione che tu abbia fatto molta cottura e ottimizzazione). Una volta ho lavorato a un gioco / simulazione serio che è stato distribuito sul web-player e in un certo senso ho spinto i suoi limiti, quindi sapevo di cosa era capace.
Tutto è cambiato quando Chrome ha deciso di uccidere il supporto NPAPI, su cui si basa il web player. Cosè NPAPI? I dettagli completi sono qui – NPAPI – Wikipedia – tuttavia, per farla breve, è un metodo di sviluppo di plugin per i vari browser tradizionali. Tuttavia, NPAPI era vecchio, soggetto a problemi di sicurezza e cera una chiamata per utilizzare HTML5 / WebGL ecc., Quindi Chrome ha deciso di eliminarlo gradualmente.
La differenza più grande tra NPAPI e lutilizzo di WebGL è che il primo ha dato accesso quasi illimitato alle risorse della macchina locale (vedere Plugin NPAPI – Google Chrome per i dettagli). Per Unity3D WebGL, ci sono due grandi problemi:
Il primo è che non esiste una compilazione nativa del codice per HTML5 / WebGL. Unity ha risolto questo problema compilando un progetto in una forma di JavaScript ottimizzato. Questo è grande , in termini di dimensione del file, poiché la maggior parte del codice del motore di Unity deve essere presente affinché il progetto possa essere eseguito e Unity non è affatto leggero. Nel caso di un web-player, la maggior parte del codice del motore è già sulla DLL o nel plugin, quindi puoi semplicemente caricare i dati della scena ed eseguirli. Tuttavia, per il webplayer WebGL, il codice del motore deve essere nuovamente scaricato in modo coerente e non sono sicuro che ci sia stata ancora una soluzione.
Per ridurre le dimensioni, il codice WebGL ha essere compresso. Tuttavia, questo significa che il codice deve essere decompresso sul computer del client, dopo averlo scaricato , il che rende lesperienza lenta e goffa.
Il problema killer è quello della memoria. A differenza di NPAPI, quando esegui il web-player WebGL, puoi utilizzare solo la memoria che ha il browser, e cioè francamente fuori dal tuo controllo. Il giocatore potrebbe avere più di 100 schede aperte, senza lasciare memoria sufficiente per lesecuzione del gioco. Oppure il tuo gioco potrebbe essere troppo grande per i limiti di memoria del browser, causando un arresto anomalo durante il caricamento, senza un messaggio di errore (era il caso 2 anni fa quando lho provato).
In sostanza hai per accontentarsi di modelli meno dettagliati, risorse di gioco di qualità inferiore (suoni, trame ecc.) per mettere qualcosa sullutilizzo di WebGL / HTML5. Franky, dubito che WebGL / HTML5 fornirebbe mai il livello di qualità e frame rate che i vecchi plugin NPAPI potevano, quindi penso che lintero ecosistema dei giochi Unity basati sul web sia stato spazzato via.
Tieni presente che questo è principalmente per i giocatori di Unity3D WebGL – ci sono altri motori di gioco in grado di eseguire giochi su WebGL, anche se questi tendono ad essere basati su JavaScript e ottimizzati per il web. Unity3D è un enorme motore e il Web non è più un cittadino di prima classe come piattaforma di distribuzione.
Comunque, non sono stato nella scena Unity negli ultimi due anni, quindi spero che qualcuno mi contraddica.
Risposta
Qui si nasconde un problema di contenuto oltre a un problema di ingegneria sociale, ma io parlerò di questioni tecniche. Potresti scrivere un paio di libri sui primi due.
Il TL; DR qui è che non puoi davvero ottenere la stessa prestazione AAA dal piattaforma web che ti aspetteresti da programmi nativi. Ci sono alcune soluzioni alternative, ma sono più costose da implementare per gli sviluppatori.
1.) Compilazione runtime ed elaborazione delle risorse
A differenza del metodo standard di produzione di giochi, un gioco web attualmente deve compilare il suo codice e accedere alle sue risorse correlate in tempo reale. Storicamente, un gioco avrebbe risorse e codice precompilati che sarebbero stati caricati ed eseguiti su richiesta. La precompilazione del gioco ti consente di ottimizzare il gioco per funzionare meglio in diverse situazioni. Alcune di queste personalizzazioni si verificano durante linstallazione (differenze di IE, PC / MAC / console) e alcune di queste si verificano quando si impostano le opzioni di gioco.
Poiché questa ottimizzazione avviene prima del tempo di esecuzione, è possibile caricare nel gioco più veloce (sai già cosa devi fare). Tuttavia, la compilazione in fase di esecuzione significa che devi capirlo tutto in fase di esecuzione anziché in anticipo. Questo di solito aumenta i tempi di caricamento, tra le altre cose. In teoria, è possibile memorizzare nella cache i dati scaricati ma il browser (o un utente sfortunato) può sovrascrivere ciò che stai facendo molto facilmente. Vedi # 3.
2.) Manutenzione del server
Su un browser web puoi memorizzare file e risorse in remoto, ma questo rappresenta un problema di manutenzione per le società di giochi: ci vuole tempo e denaro per mantenere la manutenzione dei servizi del server. Questo problema può essere ridotto drasticamente installando il gioco una volta su una macchina locale e fornendo patch periodicamente invece di aggiornamenti in streaming costanti. Larghezza di banda = $$$, per non parlare dei professionisti della tecnologia dellinformazione necessari per far funzionare i server al massimo tempo di attività.
3.) Overhead / restrizioni del browser
Eseguire qualsiasi cosa in un browser web significa che devi lavorare non solo con il sistema operativo come requisito di sistema, ma con la memoria aggiuntiva e il tempo di elaborazione che il browser utilizzerà. Ad esempio, Chrome in questo momento utilizza ~ 148 MB solo per permettermi di rispondere a questa domanda! Questo probabilmente non è dannoso per PC o Mac, ma è killer per i tablet.
Inoltre, la maggior parte dei browser dispone di funzionalità di sicurezza che limitano il modo in cui il browser può interagire con il sistema operativo e lhardware. Ciò significa che alcuni tipi di operazioni sulle prestazioni che potresti normalmente eseguire con un gioco precompilato semplicemente non sono possibili allinterno di un browser (spesso accesso diretto alla memoria).