Unity Package Manager

Unity — platforma, ktorá existuje už pomerne dlho a neustále sa vyvíja. Pri práci s viacerými projektmi súčasne sa však môžu vyskytnúť ťažkosti pri používaní zdieľaných zdrojových kódov (.cs), knižníc (.dll) a ostatných assetov (obrázky, zvuky, modely, prefaby). V tomto článku sa podelíme o naše skúsenosti s natívnym riešením tejto problematiky pre Unity.

Unity Package Manager

Metódy distribúcie zdieľaných zdrojov

Existuje viac ako jeden spôsob, ako používať zdieľané zdroje pre rôzne projekty, ale každý prístup má svoje klady a zápory.

1. Duplikovanie — ručne duplikujeme zdroje medzi projektami.

Výhody:

  • Vyhovuje všetkým druhom zdrojov.
  • Žiadne problémy so závislosťami.
  • Žiadne problémy s GUID-ami assetov.

Nevýhody:

  • Obrovské repozitáre.
  • Žiadna možnosť verzovania.
  • Zložitosti pri sledovaní zmien v zdieľaných zdrojoch.
  • Zložitosti pri aktualizácii zdieľaných zdrojov.

2. Git submoduly — distribúcia zdieľaných zdrojov cez externé submoduly.

Výhody:

  • Môžete pracovať so zdrojovými kódmi.
  • Môžete distribuovať assety.
  • Žiadne problémy so závislosťami.

Nevýhody:

  • Je potrebná zručnosť v práci s Git.
  • Git nie je veľmi priateľský k binárnym súborom — bude potrebné pripojiť LFS.
  • Obmedzenie prístupu k repozitárom.
  • Zložitosti pri zvyšovaní a znižovaní verzií.
  • Môžu nastať kolízie GUID-ov a Unity neponúka jednoznačné správanie na ich rozlíšenie.

3. NuGet — distribúcia zdieľaných knižníc cez NuGet balíky.

Výhody:

  • Pohodlná práca s projektmi, ktoré nie sú závislé na Unity.
  • Pohodlné verzovanie a riešenie závislostí.

Nevýhody:

  • Unity nepracuje s NuGet balíkmi "z krabice" (na GitHube môžete nájsť NuGet Package Manager for Unity, ktorý to opravuje, ale sú tu nuansy).
  • Zložitosti pri distribúcii ostatných typov assetov.

4. Unity Package Manager — distribúcia zdieľaných zdrojov cez natívne riešenie pre Unity.

Výhody:

  • Natívne rozhranie na prácu s balíkmi.
  • Ochrana pred prepísaním .meta súborov v balíkoch pri kolíziách GUID-ov.
  • Možnosť verzovania.
  • Možnosť distribúcie všetkých typov zdrojov pre Unity.

Nevýhody:

  • Stále sa môžu vyskytnúť kolízie GUID-ov.
  • Neexistuje dokumentácia na implementáciu.

Posledný spôsob má viac výhod ako nevýhod. Avšak v súčasnosti nie je veľmi populárny kvôli nedostatku dokumentácie, preto sa na ňom podrobne zastavíme.

Unity Package Manager

Unity Package Manager (ďalej UPM) je nástroj na správu balíčkov. Bol pridaný do Unity 2018.1 a používal sa iba pre balíčky vyvíjané spoločnosťou Unity Technologies. Od verzie 2018.3 sa však objavila možnosť pridávania vlastných balíčkov.

Unity Package Manager
Rozhranie Unity Package Manager

Balíčky sa nedostanú do zdroja projektu (adresár Assets). Nachádzajú sa v samostatnom adresári %projectFolder%/Library/PackageCache a nijako neovplyvňujú projekt, ich jediné zmienka v zdrojových súboroch je v súbore packages/manifest.json.

Unity Package Manager
Balíčky v súborovom systéme projektu

Zdroje balíčkov

UPM môže používať niekoľko zdrojov balíčkov:

1. Súborový systém.

Výhody:

  • Rýchlosť implementácie.
  • Nevyžaduje externé nástroje.

Nevýhody:

  • Zložitost verzionovania.
  • Je potrebný spoločný prístup k súborovému systému pre všetkých, ktorí pracujú na projekte.

2. Git repozitár.

Výhody:

  • Potrebný je iba Git repozitár.

Nevýhody:

  • Nie je možné prepnúť medzi verziami cez okno UPM.
  • Nezobrazuje sa so všetkými Git repozitármi.

3. npm repozitár.

Výhody:

  • Úplne podporuje funkčnosť UPM a používa sa na distribúciu oficiálnych balíčkov Unity.

Nevýhody:

  • V súčasnosti ignoruje všetky reťazcové verzie balíčkov, okrem '-preview'.

Nižšie sa pozrieme na implementáciu UPM + npm. Táto kombinácia je pohodlná, pretože umožňuje pracovať so všetkými druhmi zdrojov a spravovať verzie balíčkov, ako aj plne podporuje natívne rozhranie UPM.

Ako npm repozitár je možné použiť Verdaccio. K nemu je podrobný dokumentácia, a na jeho spustenie budete potrebovať doslova pár príkazov.

Nastavenie prostredia

Na začiatok musíme nainštalovať node.js.

Vytvorenie balíčka

Aby ste vytvorili balíček, musíte umiestniť súbor package.json, ktorý ho bude opisovať, do adresára s obsahom tohto balíčka. Je potrebné urobiť nasledovné:

Prejdite do adresára projektu, ktorý chcete spraviť balíčkom.

Spustite príkaz npm init a počas dialógu zadajte potrebné hodnoty. Pre názov uveďte názov vo formáte reverznej domény, napríklad com.plarium.somepackage.
Pre pohodlné zobrazenie názvu balíčka — pridajte vlastnosť displayName do package.json a vyplňte ju.

Keďže npm je zameraný na js, súbor obsahuje pre nás nepotrebné vlastnosti main a scripts, ktoré Unity nepoužíva. Bolo by lepšie ich odstrániť, aby sa nezasahovalo do popisu balíčka. Súbor by mal vyzerať približne takto:

  1. Prejdite do adresára projektu, ktorý chcete spraviť balíčkom.
  2. Spustite príkaz npm init a počas dialógu zadajte potrebné hodnoty. Pre názov uveďte názov vo formáte reverznej domény, napríklad com.plarium.somepackage.
  3. Pre pohodlné zobrazenie názvu balíčka — pridajte vlastnosť displayName do package.json a vyplňte ju.
  4. Keďže npm je zameraný na js, súbor obsahuje pre nás nepotrebné vlastnosti main a scripts, ktoré Unity nepoužíva. Bolo by lepšie ich odstrániť, aby sa nezasahovalo do popisu balíčka. Súbor by mal vyzerať približne takto:
    {
     "name": "com.plarium.somepackage",
     "displayName": "Some Package",
     "version": "1.0.0",
     "description": "Popis balíka",
     "keywords": [
       "Unity",
       "UPM"
     ],
     "author": "AUTOR",
     "license": "NEOŠTATOVANÉ"
    }

  5. Otvorenie Unity a generovanie .meta súboru pre package.json (Unity nevidí zdroje bez .meta súborov, balíky pre Unity sú otvorené iba na čítanie).

Odovzdanie balíka

Na odoslanie balíka je potrebné vykonať príkaz: npm publish --registry *adresa repozitára balíkov*.

Inštalácia a aktualizácia balíkov prostredníctvom Unity Package Manager

Aby ste pridali balík do projektu Unity, musíte:

  1. Pridať do súboru manifest.json informácie o zdrojoch balíkov. Na to je potrebné pridať vlastnosť scopedRegistries a určiť rozsahy a adresu zdroja, kde sa budú hľadať konkrétne rozsahy.
    
    "scopedRegistries": [
       {
         "name": "Main",
         "url": "adresa repozitára balíkov",
         "scopes": [
           "com.plarium"
         ]
       }
     ]
    
  2. Prejdite do Unity a otvorte okno Package Manager (práca s vlastnými balíkmi sa nelíši od práce so zabudovanými).
  3. Vyberte All Packages.
  4. Nájdite potrebný balík a pridajte ho.

Unity Package Manager

Práca s исходниками a ladění

Aby sa исходники pripojili k projektu, je potrebné vytvoriť Assembly Definition pre balík.

Používanie balíkov neobmedzuje možnosti ladění. Avšak pri práci s balíkmi v Unity nie je možné prejsť do IDE kliknutím na chybu v konzole, ak sa chyba vyskytla v balíku. To súvisí s tým, že Unity nevidí skripty ako samostatné súbory, pretože pri použití Assembly Definition sú zostavené do knižnice a pripojené k projektu. Pri práci s исходниками z projektu je prechod do IDE kliknutím dostupný.

Skript v projekte s pripojeným balíkom:

Unity Package Manager
Skript z balíka s funkčným breakpointom:

Unity Package Manager

Urgentné opravy balíkov

Pridané balíky Unity do projektu sú otvorené iba na čítanie, ale môžu sa upravovať v cache balíkov. Na to je potrebné:

  1. Prejsť k balíku v cache balíkov.

    Unity Package Manager

  2. Upraviť potrebné zmeny.
  3. Aktualizovať verziu v súbore package.json.
  4. Odoslať balík npm publish --registry *adresa repozitára balíkov*.
  5. Aktualizovať verziu balíka na opravenú prostredníctvom rozhrania UPM.

Konflikty pri importe balíkov

Pri importovaní balíkov môžu vzniknúť nasledujúce konflikty GUID-ov:

  1. Balík — balík. Ak sa pri importe balíka zistí, že v už pridaných balíkoch sa nachádzajú zdroje s rovnakým GUID, zdroje s rovnakými GUID z importovaného balíka nebudú pridané do projektu.
  2. Balík - projekt. Ak sa počas importu balíka zistí, že v projekte sú aktíva so zhodnými GUID-ami, aktíva z balíka sa do projektu nepridajú. Avšak aktíva, ktoré od nich závisia, začnú používať aktíva z projektu.

Prenos aktív z projektu do balíka

Ak prenesiete aktívum z projektu do balíka pri otvorenom Unity, jeho funkčnosť zostane zachovaná a odkazy v závislých aktívach začnú používať aktívum z balíka.

Dôležité: pri kopírovaní aktíva z projektu do balíka dôjde k konflikte 'Balík - projekt', opísanému v predchádzajúcej časti.

Možné riešenia konfliktov

  1. Prezadanie GUID-ov podľa vlastných algoritmov pri importe všetkých aktív, aby sa vylúčili kolízie.
  2. Pridanie všetkých aktív do jedného projektu s následným rozdelením do balíkov.
  3. Vytvorenie databázy obsahujúcej GUID-y všetkých aktív a vykonanie validácie pri odosielaní balíkov.

Záver

UPM - nové riešenie pre distribúciu zdieľaných zdrojov na Unity, ktoré môže byť hodnou alternatívou existujúcich metód. Odporúčania opísané v článku vznikli na základe reálnych prípadov. Dúfame, že vám budú užitočné.

Zdroj: habr.com

Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster