A teljesítmény optimalizálása a Unity3D

A teljesítmény optimalizálása a Unity3D

Általában felsoroljuk az alapvető technikákat optimalizálás játék Unity.

Néhány tipp, hogy csökkentse Draw kéri (Draw kéri - a szám a CPU eléri a GPU)

Megfelelő használatát zene a játékban:

1. Egy kis méretű Terrane

150x150
2. Pixel hiba - tegye 0 a maximális értéket (bár ez elárulja ugrás felsők amikor nagyított, de időnként növeli a teljesítményt)
3. tiltása zászló Draw
4. Ne használja a rajz fű Terrain`a műszerek - időnként csökkenti a termelékenységet

1. Minden kifizetést végre a frissítés. A FixedUpdate tehet kis ellenőrzések, amelyek kifejezetten a fizika, de jobb, hogy ne használja FixedUpdate. Miért? Frissítés FPS nevezett ugyanannyi időt és a terhelés növekedése csak pazarolja sebesség rendering szaggatott. Ez nem ijesztő, mert az összes frissítést kell vennie Time.deltaTime. FixedUpdate végre egyenlő számú másodpercenként, és várja a befejezése a motort. Ennek eredményeként, a játék vizuálisan húzza rendszertelen számítási terhelést FixedUpdate.
2. Ne használjon új (típus új Vectro3 (x, y, z), új téglalap ()) ciklusokban, és gyakran okozott talaj
3. CompareTag több mint kétszer olyan gyors, mint a közvetlen ellenőrzést a tag nevét.
4. (thisTransform.position - target.position) .sqrMagnitude gyorsabb Vector3.Distance
5. Tegye a lehető legkisebb mértékben, vagy hívja thisTransform.forward helyzetben, jobb ezeket az értékeket csak elérhető frissítés, és használják szerte a forgatókönyvet. Ez vonatkozik minden végtermék tulajdonságai MonoBehaviour, beleértve saját magát is átalakulhatnak. Az érzés, hogy mindig kap egy lehetőséget a listából komponensek nélkül caching - meg kell tenni a kezét. Minden vektorok a globális térben (előre, jobbra, fel, és így tovább) mindig újratervezi valahányszor keresztül érhető GameObject hierarchia - kell olvasni egyszer, és ezt a kódot használja.
6. váltáshoz script objektumot, ha lehetséges, hogy nem használja GetComponent (.) .enabled szétkapcsolt egy előre meghatározott forgatókönyvet, és AddComponent (.)
ha nem előre script felakasztották helyben

7. A statikus változók

Tekintsük néhány példa:

Ebben a megvalósításban ize lesz dinamikusan meghatározott, így a hívás funkció DoSomething tart a szükségesnél hosszabb ideig, mert a fajta ize ismeretlen, és először meg kell kideríteni, hogy ize támogatja DoSomething funkciót, és ha támogatja az oka.

Itt foo van egy bizonyos típusú. Teljesítmény ebben az esetben sokkal jobb lenne.

8. A #pragma szigorú

Persze, most a probléma az, hogy általában nem veszik észre a használata egy dinamikus elrendezés. #pragma szigorú tud segíteni. Csak add meg a kódot, hogy a tetején #pragma szigorú és Unity letiltja dinamikus vorstku ezt a szkriptet, arra kényszerítve, hogy a statikus. Amennyiben a típus nem ismert, Unity mesélj a fordítási hibákat. Ebben az esetben a foo hibát generál a fordításkor:

9. A cache search alkatrészek

Tovább optimalizálás cache-alkatrészeket. Sajnos, ez optimalizálás igényel kis erőfeszítés és kódolás nem mindig éri meg. De ha a script tényleg gyakran használják, és akkor nem kell többet, mint amennyire a termelékenység növelése, akkor lesz igazán jó optimalizálás.

Amikor belépünk egy komponens révén GetComponent vagy feljárót változó, Unity meg kell találnia a megfelelő komponenst a játék célja. Idő keres, akkor könnyen vágható, ha használja caching alkatrész utalás chasnoe (magán) változó.

Csak konvertálni ezt a kódot:

Az utóbbi lehetőség sokkal gyorsabb, mivel Unity nem kell nézni Transform eleme a játék célja minden egyes képkocka.
Ugyanez vonatkozik a megírt komponensek, ahol használja GetComponent ehelyett transzformációs vagy egyéb ingatlan változásokat.

10. A beépített tömbökkel

Beágyazott tömbök igen nagy sebességgel, próbálja meg használni őket, amikor csak lehetséges. Bár a ArrayList vagy Array osztályok könnyebb használni, mert azok könnyebben hozzá elemeket, a sebesség alacsonyabb. Beágyazott tömbök egy fix méretű, de a legtöbb esetben a méret ismerjük a kezdetektől fogva, és mi is bármikor kitölteni. Az egyik fő előnye, beágyazott tömbök az, hogy közvetlenül tartalmazzák a struct adattípusok egy szorosan csomagolt puffer, anélkül, hogy további információt, hogy milyen típusú, vagy fölött. Így, hogy kölcsönhatás nagyon könnyű cache, mert minden benne van igazítva.

11. Ne a függvényhívás, ha meg tudod csinálni nélküle

A legegyszerűbb és legjobb módja annak, optimalizálás - az, hogy a kis extra munkát. Például, ha az ellenség messze tőlünk, a legjobb az lenne, hogy megbizonyosodjon arról, hogy „elaludt”. Ez nem tett semmit, amíg a játékos fogja közelíteni közelebb. Ez egy lassú változata megvalósítása ebben az esetben:

Ez nem egy jó ötlet, mivel a Unity meg kell nyomnia a frissítés funkció folyamatosan, ami azt jelenti, hogy nem extra munka minden keretben. A legjobb megoldás ebben az esetben az, hogy letiltja az ellenség programot, amíg a játékos fogja közelíteni közelebb. 3 lehetőség van az ezen ötlet megvalósításában:

1) Használja OnBecameVisible és OnBecameInvisible. Ezek a kihívások meghatározott lehívási rendszert. Amint minden kamera lát egy tárgyat az úgynevezett OnBecameVisible, ha nincs kamera látja, ez egy kihívás OnBecameInvisible. Egyes esetekben indokolt, de néha nehéz az AI, mint az ellenség inaktívvá válnak, ha eltér a kamera.

2) A kiváltó. Egyszerű gömb alakú kiváltó terület csodákat tehet. Amikor kilép a kiválasztott terület befolyása jutunk hívások OnTriggerEnter / Kilépés.

3) használjuk korutinokat. Frissítse a fő hátránya az, hogy végre minden egyes képkocka. Lehetőség van, hogy ellenőrizze lenne a távolság a játékos 5 másodpercenként. Jó lenne a teljesítmény javítása érdekében.

Ne használjon tárgyak merev test?) Talán szeretne mondani, hogy „Lehetőleg ne használja tárgyak merev test nem isKinematic mode”? Mert nem használja merev test általában nem lehet, ha tárgyakat gyorsítókban és ők (a tárgy) lépés. Nem statikus ütköztető nem tud mozogni anélkül, hogy merev test. Egyébként te csak a leghírhedtebb teljesítmény megöli teljesen.
Például az azonos 2dToolkit merev test szinte minden felület elemeit. De, persze, mindegyik ki van téve isKinematic zászló. Teljesítmény szinte nem változik, de a kütyü akkor biztonságosan mozoghat a képernyőn.
Ezért a következtetés: ne félj használni merev test nem statikus objektumok gyorsítókban, csak nem a fizika (put isKinematic).

És általában, ha beszélünk teljesítményt scriptek kell elfelejteni JS. C # - sokkal több hely optimalizálása, és a fejlesztő dabtsya erősebb OOP mechanizmusok (ha, persze, tudja, hogyan kell használni őket).

Legújabb a fórumon

Appfoxapp → igényel Unity fejlesztő távmunka
Igényel Unity fejlesztő távmunka, a menetrend 5-2 egy 10,00-19,00 n.

proxyan → Service PROXYAN.net - vesz egy megbízható szerver proxy, gyors HTTP / zokni
Különleges ajánlat! Aktiválódik, amikor a kifizető 6DCEBF5601DF48B7 promóciós kódot, és kap 5% kedvezményt. Az akció érvényes.

dimaCyberpunk → játékfejlesztés: Chronicles cyberpunk
A technikai része a fejlődés befejeződött, mehet a játék elejétől a végéig. Továbbra is csak.

ZARR → motivált telepíteni Android-alkalmazások
Szolgáltatás android alkalmazás-fejlesztők, kínálja a legolcsóbb motivált telepítést.

KregHEK → Silone - online PvP TBS (fejlesztés - verzió dev10, hang, többszintű perk)
Release dev9 (Épület)! - Bevezetett egy sokk harci csoport és egy tartalék. - Egy új osztály -.

kysovue → Összetett és run oldalak ru en
Különleges ajánlat! Szia, a 12.10.17 a 10.15.17 -30% kedvezmény minden csomagot, kérjük, azonnal.

Barátaink