Unity je platforma, ki obstaja že kar nekaj časa in se nenehno razvija. Vendar pa lahko pri delu z več projekti hkrati naletite na težave pri uporabi skupnih virov (.cs), knjižnic (.dll) in drugih sredstev (slike, zvoki, modeli, prefabs). V tem članku bomo govorili o naših izkušnjah z domačo rešitvijo takega problema za Unity.
Metode distribucije skupnih virov
Obstaja več kot en način uporabe skupnih virov za različne projekte, vendar ima vsak pristop svoje prednosti in slabosti.
1. Podvajanje - "ročno" podvajamo vire med projekti.
Profesionalci:
- Primerno za vse vrste virov.
- Brez težav z odvisnostjo.
- Z GUID-i sredstev ni težav.
Cons:
- Velikanska skladišča.
- Ni možnosti verziranja.
- Težava pri sledenju spremembam skupnih virov.
- Težava pri posodabljanju skupnih virov.
2.
Profesionalci:
- Lahko delate z viri.
- Sredstva lahko razdelite.
- Brez težav z odvisnostjo.
Cons:
- Zahtevane izkušnje z Gitom.
- Git ni zelo prijazen do binarnih datotek - morali boste povezati LFS.
- Nadzor dostopa za repozitorije.
- Težave z nadgradnjo in nižjo različico.
- Trki GUID so možni in Unity nima jasnega vedenja, ki bi jih razrešilo.
3. NuGet - distribucija deljenih knjižnic prek paketov NuGet.
Profesionalci:
- Priročno delo s projekti, ki niso odvisni od Unity.
- Priročno urejanje različic in razreševanje odvisnosti.
Cons:
- Unity ne more delovati s paketi NuGet takoj po pripravi (na GitHubu lahko najdete NuGet Package Manager for Unity, ki to popravi, vendar obstaja nekaj odtenkov).
- Težave pri distribuciji drugih vrst sredstev.
4. Upravljalnik paketov Unity – distribucija virov v skupni rabi prek izvorne rešitve za Unity.
Profesionalci:
- Izvorni vmesnik za delo s paketi.
- Zaščita pred prepisovanjem datotek .meta v paketih zaradi konfliktov GUID.
- Možnost verziranja.
- Sposobnost distribucije vseh vrst virov za Unity.
Cons:
- Še vedno lahko pride do sporov GUID.
- Dokumentacije za izvedbo ni.
Slednja metoda ima več prednosti kot slabosti. Vendar pa zaradi pomanjkanja dokumentacije zdaj ni zelo priljubljen, zato se bomo o njem podrobneje pogovorili.
Upravljalnik paketov Unity
Unity Package Manager (UPM) je orodje za upravljanje paketov. Dodan je bil v Unity 2018.1 in je bil uporabljen samo za pakete, ki jih je razvilo Unity Technologies. Vendar pa je od različice 2018.3 postalo mogoče dodajati pakete po meri.
Vmesnik Unity Package Manager
Paketi ne končajo v virih projekta (imenik sredstev). So v ločenem imeniku %projectFolder%/Library/PackageCache
in na noben način ne vplivajo na projekt, njihova edina omemba v izvorni kodi je v datoteki packages/manifest.json
.
Paketi v datotečnem sistemu projekta
Viri paketov
UPM lahko uporablja več virov paketov:
1. Datotečni sistem.
Profesionalci:
- Hitrost izvedbe.
- Ne zahteva orodij tretjih oseb.
Cons:
- Težave pri različicah.
- Skupni dostop do datotečnega sistema je potreben za vse, ki delajo s projektom.
2. Repozitorij Git.
Profesionalci:
- Vse kar potrebujete je repozitorij Git.
Cons:
- Ne morete preklapljati med različicami skozi okno UPM.
- Ne deluje z vsemi repozitoriji Git.
3. repozitorij npm.
Profesionalci:
- V celoti podpira funkcionalnost UPM in se uporablja za distribucijo uradnih paketov Unity.
Cons:
- Trenutno ignorira vse različice nizov paketov razen "-preview".
Spodaj si bomo ogledali implementacijo UPM + npm. Ta paket je priročen, ker vam omogoča delo s katero koli vrsto virov in upravljanje različic paketov ter v celoti podpira izvorni vmesnik UPM.
Lahko ga uporabite kot repozitorij npm
Postavitev okolja
Najprej morate namestiti
Ustvarjanje paketa
Če želite ustvariti paket, morate postaviti datoteko package.json
, ki ga bo opisal, v imenik z vsebino tega paketa. Narediti morate naslednje:
Pojdite v imenik projekta, za katerega želimo narediti paket.
Zaženite ukaz npm init in med pogovornim oknom vnesite zahtevane vrednosti. Za ime podajte ime v obliki obratne domene, na primer com.plarium.somepackage.
Za priročen prikaz imena paketa dodajte lastnost displayName v package.json in jo izpolnite.
Ker je npm usmerjen v js, datoteka vsebuje glavne lastnosti in lastnosti skriptov, ki jih ne potrebujemo in jih Unity ne uporablja. Bolje jih je odstraniti, da ne zamašite opisa paketa. Datoteka bi morala izgledati nekako takole:
- Pojdite v imenik projekta, za katerega želimo narediti paket.
- Zaženite ukaz npm init in med pogovornim oknom vnesite zahtevane vrednosti. Za ime podajte ime v obliki obratne domene, na primer com.plarium.somepackage.
- Za priročen prikaz imena paketa dodajte lastnost displayName v package.json in jo izpolnite.
- Ker je npm usmerjen v js, datoteka vsebuje glavne lastnosti in lastnosti skriptov, ki jih ne potrebujemo in jih Unity ne uporablja. Bolje jih je odstraniti, da ne zamašite opisa paketa. Datoteka bi morala izgledati nekako takole:
{ "name": "com.plarium.somepackage", "displayName": "Some Package", "version": "1.0.0", "description": "Some Package Description", "keywords": [ "Unity", "UPM" ], "author": "AUTHOR", "license": "UNLICENSED" }
- Odprite Unity in ustvarite datoteko .meta za package.json (Unity ne vidi sredstev brez datotek .meta, paketi za Unity se odprejo samo za branje).
Pošiljanje paketa
Za pošiljanje paketa morate zagnati ukaz: npm publish --registry *адрес до хранилища пакетов*
.
Nameščanje in posodabljanje paketov prek upravitelja paketov Unity
Če želite dodati paket v projekt Unity, potrebujete:
- Dodaj v datoteko
manifest.json
informacije o izvoru paketov. Če želite to narediti, morate dodati lastnostscopedRegistries
in navedite obsege in izvorni naslov, kjer se bodo iskali določeni obsegi."scopedRegistries": [ { "name": "Main", "url": "адрес до хранилища пакетов", "scopes": [ "com.plarium" ] } ]
- Pojdite v Unity in odprite okno Package Manager (delo s paketi po meri se ne razlikuje od dela z vgrajenimi).
- Izberite Vsi paketi.
- Poiščite paket, ki ga potrebujete, in ga dodajte.
Delo z viri in odpravljanje napak
Da bi bili viri povezani s projektom, morate ustvariti
Uporaba paketov ne omejuje vaših možnosti odpravljanja napak. Ko pa delate s paketi v Unity, ne morete odpreti IDE s klikom na napako v konzoli, če je do napake prišlo v paketu. To je posledica dejstva, da Unity ne vidi skriptov kot ločenih datotek, saj so pri uporabi definicije sklopa zbrani v knjižnico in vključeni v projekt. Pri delu z viri iz projekta je na voljo klikanje v IDE.
Skript v projektu s povezanim paketom:
Skript iz paketa z delujočo prekinitveno točko:
Nujni popravki paketov
Paketi Unity, dodani projektu, so samo za branje, vendar jih je mogoče urejati v predpomnilniku paketov. Za to potrebujete:
- Pojdite na paket v predpomnilniku paketov.
- Naredite potrebne spremembe.
- Posodobite različico v datoteki
package.json
. - Pošlji paket
npm publish --registry *адрес до хранилища пакетов*
. - Posodobite različico paketa na popravljeno prek vmesnika UPM.
Konflikti pri uvozu paketov
Pri uvažanju paketov lahko pride do naslednjih sporov GUID:
- Paket - paket. Če se pri uvozu paketa odkrije, da že dodani paketi vsebujejo sredstva z istim GUID-jem, sredstva z ujemajočimi se GUID-ji iz uvoženega paketa ne bodo dodana v projekt.
- Paket je projekt. Če se pri uvozu paketa odkrije, da projekt vsebuje sredstva z ujemajočimi se GUID-ji, potem sredstva iz paketa ne bodo dodana projektu. Vendar bodo sredstva, ki so odvisna od njih, začela uporabljati sredstva iz projekta.
Prenos sredstev iz projekta v paket
Če prenesete sredstvo iz projekta v paket, ko je Unity odprt, bo njegova funkcionalnost ohranjena, povezave v odvisnih sredstvih pa bodo začele uporabljati sredstvo iz paketa.
Pomembno je,: Pri kopiranju sredstva iz projekta v paket se bo pojavil konflikt »Paket – Projekt«, opisan v zgornjem razdelku.
Možne rešitve konfliktov
- Ponovno dodeljevanje GUID-jev z uporabo naših lastnih algoritmov pri uvozu vseh sredstev za odpravo kolizij.
- Dodajanje vseh sredstev v en projekt in njihovo razdelitev v pakete.
- Ustvarjanje baze podatkov, ki vsebuje GUID-je vseh sredstev in izvajanje validacije pri pošiljanju paketov.
Zaključek
UPM je nova rešitev za distribucijo skupnih virov v Unity, ki je lahko vredna alternativa obstoječim metodam. Priporočila, opisana v članku, so temeljila na resničnih primerih. Upamo, da vam bodo koristili.
Vir: www.habr.com