Cel mai bun răspuns
Ei bine, pot răspunde la întrebarea pentru Unity .
Acolo a fost un ecosistem înfloritor pentru jocurile Unity din browser, în special pe Facebook. Webplayer-ul Unity a fost suficient de decent pentru a obține o grafică frumoasă și o frecvență netă (cu condiția să faceți multă coacere și optimizare). Odată am lucrat la un joc / simulare serios, care a fost implementat pe web-player și mi-am cam depășit limitele, așa că am știut ce este capabil.
Totul s-a schimbat când Chrome a decis să omoare suportul NPAPI, pe care se bazează playerul web. Ce este NPAPI? Detaliile complete sunt aici – NPAPI – Wikipedia – cu toate acestea, pentru a o rezuma, este o metodă de dezvoltare a pluginurilor pentru diferitele browsere principale. Cu toate acestea, NPAPI era vechi, predispus la probleme de securitate și a existat un apel pentru a utiliza HTML5 / WebGL etc., așa că Chrome a decis să îl elimine treptat.
Cea mai mare diferență între NPAPI și utilizarea WebGL este că prima a oferit acces aproape nelimitat la resursele mașinii locale (consultați NPAPI Plugins – Google Chrome pentru detalii). Pentru Unity3D WebGL, există două mari probleme:
Prima este că nu există nicio compilație de cod în mod nativ pentru HTML5 / WebGL. Unity a rezolvat acest lucru prin compilarea unui proiect într-o formă de JavaScript optimizat. Aceasta este mare , în ceea ce privește dimensiunea fișierului, deoarece majoritatea codului motorului Unity trebuie să fie acolo pentru ca proiectul să ruleze, iar Unity nu este deloc ușor. În cazul unui player web, cea mai mare parte a codului motorului se află deja în DLL sau în plugin, astfel încât să puteți încărca singuri datele scenei și să le rulați. Cu toate acestea, pentru WebGL webplayer, codul motorului trebuie descărcat din nou în mod consecvent și nu sunt sigur dacă a existat încă o soluție pentru asta.
Pentru a reduce dimensiunea, codul WebGL are a fi comprimat. Cu toate acestea, acest lucru înseamnă că codul trebuie decomprimat pe computerul clientului, după ce l-ați descărcat , ceea ce face ca experiența să fie lentă și dificilă.
Problema ucigașului este cea a memoriei. Spre deosebire de NPAPI, atunci când rulați web-player-ul WebGL, puteți utiliza doar memoria pe care o are browserul și asta este sincer scăpat de sub controlul tău. Este posibil ca jucătorul să aibă peste 100 de file deschise, lăsând suficientă memorie pentru ca jocul să ruleze. Sau jocul dvs. ar putea fi prea mare pentru limitele de memorie ale browserului, provocându-l să se blocheze fără grație, în timpul încărcării, fără un mesaj de eroare (a fost cazul acum 2 ani când îl încerc).
În esență, aveți să vă mulțumiți cu modele mai puțin detaliate, materiale de calitate mai slabă (sunet, texturi etc.) pentru a pune ceva pe WebGL / HTML5. Franky, mă îndoiesc că WebGL / HTML5 ar oferi vreodată nivelul de calitate și rata de cadre pe care vechile pluginuri NPAPI le-ar putea, așa că cred că întregul ecosistem al jocurilor Unity bazate pe web a fost șters.
Rețineți că acest lucru este în principal pentru jucătorii Unity3D WebGL – există alte motoare de joc capabile să ruleze jocuri pe WebGL, deși acestea tind să fie bazate pe JavaScript și optimizate pentru web. Unity3D este un motor imens , iar web nu mai este un cetățean de primă clasă ca platformă de implementare.
Oricum, nu am fost în scena Unity din ultimii doi ani, așa că sperăm că cineva mă va contrazice.
Răspuns
Există o problemă de conținut care se ascunde aici, precum și o problemă de inginerie socială, dar eu sunt o să vorbesc despre probleme tehnice. Ați putea scrie câteva cărți pe primele două.
TL; DR aici este că nu puteți obține cu adevărat aceeași performanță AAA din platformă web pe care v-ați aștepta de la programe native. Există unele soluții alternative, dar sunt mai scumpe pentru implementare pentru dezvoltatori.
1.) Compilarea timpului de rulare și procesarea activelor
Spre deosebire de metoda standard de producție a jocurilor, un joc web trebuie să își compileze în prezent codul și să acceseze activele aferente în timp real. Din punct de vedere istoric, un joc ar avea elemente și cod precompilate care ar fi încărcate și rulate la cerere. Precompilarea jocului vă permite să vă optimizați jocul pentru a rula mai bine în diferite situații. O parte din această personalizare se întâmplă atunci când instalați (diferențe IE, PC / MAC / consolă), iar unele dintre acestea se întâmplă când configurați opțiunile jocului.
Deoarece această optimizare are loc înainte de timpul de rulare, puteți încărca în joc mai repede (știi deja ce trebuie să faci). Cu toate acestea, compilarea timpului de execuție înseamnă că trebuie să vă dați seama de toate acestea în timp de execuție, în loc de în prealabil. Aceasta crește, de obicei, timpul de încărcare, printre altele. În teorie, este posibil să cache date descărcate, dar browserul (sau un utilizator nefericit) poate suprascrie ceea ce faceți foarte ușor. Vezi # 3.
2.) Întreținerea serverului
Printr-un browser web puteți stoca fișiere și materiale de la distanță, dar aceasta reprezintă o problemă de întreținere pentru companiile de jocuri – este nevoie de timp și bani pentru a menține serviciile de serviciu de serviciu. Această problemă poate fi redusă drastic prin instalarea jocului o dată pe o mașină locală și livrarea periodică de patch-uri în loc de actualizări de streaming constante. Lățime de bandă = $$$, ca să nu mai vorbim de profesioniștii în tehnologia informației necesari pentru a opera serverele la un timp de funcționare maxim. span>
Rularea oricărui lucru într-un browser web înseamnă că trebuie să lucrați nu numai cu sistemul de operare ca cerință de sistem, ci și cu memoria suplimentară și timpul de procesare pe care browserul îl va utiliza. De exemplu, Chrome chiar acum folosește ~ 148 MB doar pentru a mă permite să răspund la această întrebare! Probabil că acest lucru nu este rău pentru PC-uri sau Mac-uri, dar este extrem de important pentru tablete.
În plus, majoritatea browserelor au funcții de securitate care restricționează modul în care browserul poate interacționa cu sistemul dvs. de operare și hardware. Aceasta înseamnă că anumite tipuri de operații de performanță pe care le-ați putea face în mod normal cu un joc precompilat nu sunt pur și simplu posibile într-un browser (de multe ori acces direct la memorie).