În general, mai jos sunt principalele tehnici de optimizare a jocurilor în Unity.
Câteva sfaturi pentru reducerea numărului de apeluri (Draw Calls - numărul de apeluri CPU la unitatea de procesare grafică)
Utilizarea corectă a muzicii în joc:
1. Utilizați dimensiuni reduse de teren
150x150
2. Eroare pixel - setați de la 0 la valoarea maximă (deși acest lucru trădează vârfurile de sărituri atunci când camera se apropie, dar uneori crește performanța)
3. Dezactivați caseta de selectare Desenare
4. Nu utilizați desenul de iarbă în uneltele Terrain `a - uneori reduce productivitatea
1. Efectuați toate calculele exclusiv în Actualizare. În FixedUpdate, puteți efectua teste mici care sunt specifice fizicii, dar este mai bine să evitați utilizarea FixedUpdate cu totul. De ce? Actualizarea se numește numărătoarea FPS egală de câte ori, iar creșterea sarcinii va distruge pur și simplu viteza de redare cu jerks. Nu e înfricoșător, tk. toate actualizările ar trebui făcute ținând cont de Time.deltaTime. FixedUpdate se execută de câte ori este egal de câte o secundă, iar motorul așteaptă să finalizeze execuția. Ca urmare, jocul va trage vizual la o încărcare computațională neuniformă în FixedUpdate.
2. Nu utilizați noi (cum ar fi noul Vectro3 (x, y, z), noul Rect ()) în bucle și locații numite frecvent
3. CompareTag este mai mult de două ori mai rapid decât o verificare directă a etichetei după nume.
4. (această Transformare - poziția țintă) .sqrMagnitude este mai rapidă decât Vector3.Distance
5. Faceți cât mai puține apeluri la aceastăTransformareînapoi sau la poziția posibilă, este mai bine să obțineți aceste valori o dată în Actualizare și să le folosiți în întregul script. Acest lucru se aplică oricăror proprietăți MonoBehavior făcute, inclusiv transformarea însăși. Sentimentul este că ele sunt întotdeauna obținute prin alegerea din lista de componente, fără caching - trebuie să o faceți cu mâinile. Toate vectorii din spațiul global (înainte, dreapta, sus etc.) sunt întotdeauna recompuse de fiecare dată când sunt accesate prin ierarhia GameObject - trebuie citite o dată și folosite în codul curent.
6. Pentru a activa scriptul pe obiect, dacă este posibil, nu utilizați GetComponent (.) .enabled cu scriptul dezactivat în prealabil și AddComponent (.)
la un script care nu a fost atârnat anterior pe obiect
7. Utilizarea variabilelor statice
Să luăm în considerare câteva exemple:
În această versiune, foo va fi definit dinamic, așa că apelarea funcției DoSomething durează mai mult decât este necesar deoarece tipul de foo este necunoscut și mai întâi trebuie să aflați dacă foo acceptă DoSomething și, dacă da, atunci îl sunați.
Aici foo are un anumit tip. Performanța în acest caz va fi mult mai bună.
8. Utilizați #pragma strict
Desigur, acum problema este că, de obicei, nu observați utilizarea unui aspect dinamic. #pragma strict vă va putea ajuta. Doar adăugați #pragma strict la începutul codului și Unity va dezactiva aspectul dinamic din acest script, forțându-vă să utilizați static. În cazul în care tipul este necunoscut, Unity ne va spune despre erorile de compilare. În acest caz, foo va produce o eroare la etapa de compilare:
9. Căutarea în Componente cache
O altă optimizare este cache-ul componentelor. Din păcate, această optimizare necesită puțin efort de codificare și nu merită mereu. Dar, dacă scenariul dvs. este foarte des folosit și nu ar fi inutil pentru dvs. să creșteți productivitatea, atunci aceasta va fi o optimizare foarte bună.
Ori de câte ori accesați o componentă prin GetComponent sau un accesoriu variabil, Unity trebuie să găsească componenta potrivită din obiectul jocului. Timpul de căutare poate fi ușor scurtat utilizând cache-ul referinței componentei din variabila privată.
Doar convertiți acest cod:
Ultima opțiune va funcționa mult mai rapid, deoarece Unity nu are nevoie să caute componenta Transformare în obiectul de joc în fiecare cadru.
Același lucru este valabil și pentru componentele de scripting unde utilizați GetComponent în loc de transformare sau alte modificări de proprietate.
10. Utilizați matricele încorporate
Broșurile încorporate au o viteză foarte mare, încercați să le folosiți atunci când este posibil. Deși ArrayList sau clase de matrice sunt mult mai ușor de utilizat, deoarece ele sunt mai ușor de adăugat elemente, viteza de lucru este mai mică. Broșurile încorporate au o dimensiune fixă, însă în majoritatea cazurilor dimensiunea este cunoscută încă de la început și o putem umple oricând. Unul dintre cele mai importante avantaje ale array-urilor încorporate este acela că acestea includ direct tipurile de date ale structului într-un tampon puternic împachetat, fără nici o informație suplimentară despre tip sau overhead. Astfel, este foarte ușor să faceți interacțiuni în memoria cache, deoarece totul este aliniat în ea.
11. Nu efectuați un apel pentru funcții, dacă puteți face fără el
Cea mai simplă și mai bună modalitate de a optimiza este să faci cât mai puțină muncă inutilă posibil. De exemplu, atunci când inamicul este departe de noi, cel mai bun lucru este să-l facem "adormit". Adică, el nu a făcut nimic până când jucătorul nu se apropie. Iată o implementare lentă a acestui caz:
Aceasta nu este o idee bună, deoarece Unitatea ar trebui să numească permanent funcția de actualizare, ceea ce înseamnă că efectuăm o muncă suplimentară în fiecare cadru. Cea mai bună soluție în acest caz este de a dezactiva programul inamic, până când jucătorul se apropie. Există 3 modalități de implementare a acestei idei:
1) Utilizați OnBecameVisible și OnBecameInvisible. Aceste apeluri sunt plasate în sistemul de desenare. Imediat ce orice aparat de fotografiat vede un obiect, OnBecameVisible este apelat, atunci când nici o cameră nu o vede, este apelat OnBecameInvisible. În unele cazuri acest lucru este justificat, dar uneori acest lucru este problematic pentru AI, deoarece dușmanii devin inactivi când deflectați camera de la ei.
2) Utilizați declanșatoarele. Un simplu declanșator în formă de bilă a regiunii poate face minuni. Când ieșim din zona de influență aleasă, primim apeluri către OnTriggerEnter / Exit.
3) Utilizați corutinele. Principalul dezavantaj al Actualizării este că execută fiecare cadru. Ar fi posibil să verificați distanța până la player la fiecare 5 secunde. Ar fi frumos să îmbunătățim performanța.
Nu folosiți obiecte cu Corpul dur?) Poate ați vrut să spuneți "Nu încercați să folosiți obiecte cu Corpul dur în mod isKinematic"? Deoarece nu puteți folosi Rigidbody deloc dacă aveți colizoare pe obiecte și ele (obiectele) se mișcă. Un colizator nonstatic nu poate fi mutat fără un corp rigid. În caz contrar, doar performanța foarte notorie va ucide deloc.
De exemplu, în același 2dToolkit, Rigidbody se află pe aproape fiecare element al interfeței. Dar, desigur, pe fiecare dintre ele steagul este Kinematic. Performanța practic nu se schimbă, dar toate widgeturile pot fi mutate fără probleme pe ecran.
Prin urmare, concluzia: nu vă fie teamă să folosiți corpul Rigid pentru obiecte non-statice cu colizoare, numai fără fizică (pune isKinematic).
În general, dacă vorbim despre performanță în scripturi, atunci JS ar trebui uitat. Utilizați C # - există mult mai mult spațiu pentru optimizare, iar dezvoltatorul dabs mecanisme mai puternice OOP (dacă, desigur, știe cum să le folosească).
Ultimele de pe forum
Appfoxapp → Programator Unity necesar pentru munca de la distanță
Unitatea dezvoltator este obligat să lucreze de la distanță, în programul de 5-2 de la 10.00 la 19.00 p.
proxyan → Instrumente PROXYAN.net - cumpara server proxy de incredere, rapid HTTP / SOCKS
Oferta speciala! Activați la plata codului promoțional 6DCEBF5601DF48B7 și obțineți o reducere de 5%. Acțiunea este valabilă.
dimaCyberpunk → Joc în curs de dezvoltare: Cronici de cyberpunk
Partea tehnică a dezvoltării este terminată, jocul poate fi trecut de la început până la sfârșit. Rămâne numai.
ZARR → instalarea motivată a aplicațiilor Android
Un serviciu pentru dezvoltatorii de aplicații Android, oferă cele mai ieftine instalații motivaționale.
KregHEK → Silone - PvP online TBS (în dezvoltare - versiunea dev10, voce, avantaje pe mai multe niveluri)
Eliberați dev9 (Build)! - a introdus un grup de lupte pentru șoc și o rezervă. - A fost adăugată o nouă clasă.
kysovue → O rulare complexă a site-urilor ru și en
Oferta speciala! Bună ziua tuturor, de la 12.10.17 până la 15.10.17 reducere de -30% pentru orice pachet, vă întreb imediat.