Upravljalnik paketov Unity

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.

Upravljalnik paketov 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. Podmoduli Git — distribucija skupnih virov prek zunanjih podmodulov.

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.

Upravljalnik paketov Unity
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.

Upravljalnik paketov Unity
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 Verdaccio. Obstaja podroben dokumentacijo, za zagon pa je potrebnih le nekaj ukazov.

Postavitev okolja

Najprej morate namestiti node.js.

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:

  1. Pojdite v imenik projekta, za katerega želimo narediti paket.
  2. 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.
  3. Za priročen prikaz imena paketa dodajte lastnost displayName v package.json in jo izpolnite.
  4. 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"
    }

  5. 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:

  1. Dodaj v datoteko manifest.json informacije o izvoru paketov. Če želite to narediti, morate dodati lastnost scopedRegistries in navedite obsege in izvorni naslov, kjer se bodo iskali določeni obsegi.
    
    "scopedRegistries": [
       {
         "name": "Main",
         "url": "адрес до хранилища пакетов",
         "scopes": [
           "com.plarium"
         ]
       }
     ]
    
  2. Pojdite v Unity in odprite okno Package Manager (delo s paketi po meri se ne razlikuje od dela z vgrajenimi).
  3. Izberite Vsi paketi.
  4. Poiščite paket, ki ga potrebujete, in ga dodajte.

Upravljalnik paketov Unity

Delo z viri in odpravljanje napak

Da bi bili viri povezani s projektom, morate ustvariti Definicija sklopa za paket.

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:

Upravljalnik paketov Unity
Skript iz paketa z delujočo prekinitveno točko:

Upravljalnik paketov Unity

Nujni popravki paketov

Paketi Unity, dodani projektu, so samo za branje, vendar jih je mogoče urejati v predpomnilniku paketov. Za to potrebujete:

  1. Pojdite na paket v predpomnilniku paketov.

    Upravljalnik paketov Unity

  2. Naredite potrebne spremembe.
  3. Posodobite različico v datoteki package.json.
  4. Pošlji paket npm publish --registry *адрес до хранилища пакетов*.
  5. Posodobite različico paketa na popravljeno prek vmesnika UPM.

Konflikti pri uvozu paketov

Pri uvažanju paketov lahko pride do naslednjih sporov GUID:

  1. 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.
  2. 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

  1. Ponovno dodeljevanje GUID-jev z uporabo naših lastnih algoritmov pri uvozu vseh sredstev za odpravo kolizij.
  2. Dodajanje vseh sredstev v en projekt in njihovo razdelitev v pakete.
  3. 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

Dodaj komentar