Unity Package Manager

Unity je platforma, ktorá existuje už pomerne dlho a neustále sa vyvíja. Pri práci s viacerými projektmi súčasne sa však stále môžete stretnúť s problémami pri používaní bežných zdrojov (.cs), knižníc (.dll) a iných aktív (obrázky, zvuky, modely, prefabrikáty). V tomto článku si povieme o našich skúsenostiach s natívnym riešením takéhoto problému pre Unity.

Unity Package Manager

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

Existuje viac spôsobov, ako využiť zdieľané zdroje pre rôzne projekty, ale každý prístup má svoje pre a proti.

1. Duplikácia – duplikujeme zdroje medzi projektmi „ručne“.

Pros:

  • Vhodné pre všetky druhy zdrojov.
  • Žiadne problémy so závislosťou.
  • S identifikátormi GUID aktív nie sú žiadne problémy.

Nevýhody:

  • Obrovské úložiská.
  • Neexistuje žiadna možnosť verzie.
  • Ťažkosti so sledovaním zmien zdieľaných zdrojov.
  • Ťažkosti s aktualizáciou zdieľaných zdrojov.

2. Podmoduly Git — distribúcia zdieľaných zdrojov prostredníctvom externých podmodulov.

Pros:

  • Môžete pracovať so zdrojmi.
  • Môžete distribuovať aktíva.
  • Žiadne problémy so závislosťou.

Nevýhody:

  • Vyžaduje sa prax Git.
  • Git nie je veľmi priateľský k binárnym súborom - budete musieť pripojiť LFS.
  • Kontrola prístupu k úložiskám.
  • Ťažkosti s inováciou a downgradovaním verzií.
  • Kolízie GUID sú možné a zo strany Unity neexistuje jasné správanie, ktoré by ich vyriešilo.

3. NuGet – distribúcia zdieľaných knižníc prostredníctvom balíkov NuGet.

Pros:

  • Pohodlná práca s projektmi, ktoré nezávisia od Unity.
  • Pohodlné vytváranie verzií a riešenie závislostí.

Nevýhody:

  • Unity nemôže pracovať s balíkmi NuGet hneď po vybalení (na GitHub nájdete NuGet Package Manager for Unity, ktorý to opravuje, ale existujú určité nuansy).
  • Ťažkosti s distribúciou iných typov aktív.

4. Unity Package Manager – distribúcia zdieľaných zdrojov prostredníctvom natívneho riešenia pre Unity.

Pros:

  • Natívne rozhranie pre prácu s balíkmi.
  • Ochrana proti prepísaniu súborov .meta v balíkoch v dôsledku konfliktov GUID.
  • Možnosť verzovania.
  • Schopnosť distribuovať všetky typy zdrojov pre Unity.

Nevýhody:

  • Stále sa môžu vyskytnúť konflikty GUID.
  • Neexistuje žiadna dokumentácia na realizáciu.

Posledná metóda má viac výhod ako nevýhod. Teraz však nie je veľmi populárny kvôli nedostatku dokumentácie, a preto sa mu budeme podrobne venovať.

Unity Package Manager

Unity Package Manager (UPM) je nástroj na správu balíkov. Bol pridaný v Unity 2018.1 a bol použitý iba pre balíky, ktoré vyvinula Unity Technologies. Od verzie 2018.3 však bolo možné pridávať vlastné balíčky.

Unity Package Manager
Rozhranie správcu balíkov Unity

Balíky nekončia v zdrojoch projektu (adresár aktív). Sú v samostatnom adresári %projectFolder%/Library/PackageCache a nijako neovplyvňujú projekt, ich jediná zmienka v zdrojovom kóde je v súbore packages/manifest.json.

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

Zdroje balíkov

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

1. Systém súborov.

Pros:

  • Rýchlosť implementácie.
  • Nevyžaduje nástroje tretích strán.

Nevýhody:

  • Ťažkosti pri vytváraní verzií.
  • Zdieľaný prístup k systému súborov sa vyžaduje pre každého, kto pracuje s projektom.

2. Git úložisko.

Pros:

  • Všetko, čo potrebujete, je úložisko Git.

Nevýhody:

  • Cez okno UPM nemôžete prepínať medzi verziami.
  • Nefunguje so všetkými úložiskami Git.

3. úložisko npm.

Pros:

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

Nevýhody:

  • Momentálne ignoruje všetky reťazcové verzie balíčkov okrem "-preview".

Nižšie sa pozrieme na implementáciu UPM + npm. Tento balík je pohodlný, pretože vám umožňuje pracovať s akýmkoľvek typom zdrojov a spravovať verzie balíkov a tiež plne podporuje natívne rozhranie UPM.

Môžete ho použiť ako úložisko npm Verdaccio. Existuje podrobný dokumentáciua na jeho spustenie je potrebných len niekoľko príkazov.

Nastavenie prostredia

Najprv musíte nainštalovať Node.js.

Vytvorenie balíka

Ak chcete vytvoriť balík, musíte umiestniť súbor package.json, ktorý ho bude popisovať, do adresára s obsahom tohto balíka. Musíte urobiť nasledovné:

Prejdite do adresára projektu, v ktorom chceme vytvoriť balík.

Spustite príkaz npm init a počas dialógu zadajte požadované hodnoty. Pre názov zadajte názov v inverznom formáte domény, napríklad com.plarium.somepackage.
Ak chcete pohodlne zobraziť názov balíka, pridajte vlastnosť displayName do súboru package.json a vyplňte ju.

Keďže npm je orientovaný na js, súbor obsahuje vlastnosti main a scripts, ktoré nepotrebujeme, ktoré Unity nepoužíva. Je lepšie ich odstrániť, aby nedošlo k neporiadku v popise balenia. Súbor by mal vyzerať asi takto:

  1. Prejdite do adresára projektu, v ktorom chceme vytvoriť balík.
  2. Spustite príkaz npm init a počas dialógu zadajte požadované hodnoty. Pre názov zadajte názov v inverznom formáte domény, napríklad com.plarium.somepackage.
  3. Ak chcete pohodlne zobraziť názov balíka, pridajte vlastnosť displayName do súboru package.json a vyplňte ju.
  4. Keďže npm je orientovaný na js, súbor obsahuje vlastnosti main a scripts, ktoré nepotrebujeme, ktoré Unity nepoužíva. Je lepšie ich odstrániť, aby nedošlo k neporiadku v popise balenia. Súbor by mal vyzerať asi takto:
    {
     "name": "com.plarium.somepackage",
     "displayName": "Some Package",
     "version": "1.0.0",
     "description": "Some Package Description",
     "keywords": [
       "Unity",
       "UPM"
     ],
     "author": "AUTHOR",
     "license": "UNLICENSED"
    }

  5. Otvorte Unity a vygenerujte súbor .meta pre package.json (Unity nevidí aktíva bez súborov .meta, balíčky pre Unity sa otvárajú len na čítanie).

Odoslanie balíka

Ak chcete odoslať balík, musíte spustiť príkaz: npm publish --registry *адрес до хранилища пакетов*.

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

Ak chcete pridať balík do projektu Unity, potrebujete:

  1. Pridať do súboru manifest.json informácie o zdroji balíkov. Ak to chcete urobiť, musíte pridať vlastnosť scopedRegistries a uveďte rozsahy a zdrojovú adresu, kde sa budú hľadať konkrétne rozsahy.
    
    "scopedRegistries": [
       {
         "name": "Main",
         "url": "адрес до хранилища пакетов",
         "scopes": [
           "com.plarium"
         ]
       }
     ]
    
  2. Prejdite do Unity a otvorte okno Package Manager (práca s vlastnými balíčkami sa nelíši od práce so vstavanými).
  3. Vyberte Všetky balíky.
  4. Nájdite balík, ktorý potrebujete, a pridajte ho.

Unity Package Manager

Práca so zdrojmi a ladenie

Aby boli zdroje pripojené k projektu, musíte vytvoriť Definícia zostavy za balík.

Používanie balíkov neobmedzuje možnosti ladenia. Pri práci s balíkmi v Unity však nemôžete prejsť do IDE kliknutím na chybu v konzole, ak sa chyba vyskytla v balíku. Dôvodom je skutočnosť, že Unity nevidí skripty ako samostatné súbory, pretože pri použití definície zostavy sa zhromažďujú v knižnici a zahrnú sa do projektu. Pri práci so zdrojmi z projektu je dostupné kliknutie do IDE.

Skript v projekte s pripojeným balíkom:

Unity Package Manager
Skript z balíka s funkčným bodom prerušenia:

Unity Package Manager

Naliehavé opravy balíkov

Balíky Unity pridané do projektu sú len na čítanie, ale možno ich upravovať vo vyrovnávacej pamäti balíkov. K tomu potrebujete:

  1. Prejdite na balík vo vyrovnávacej pamäti balíkov.

    Unity Package Manager

  2. Vykonajte potrebné zmeny.
  3. Aktualizujte verziu v súbore package.json.
  4. Odoslať balík npm publish --registry *адрес до хранилища пакетов*.
  5. Aktualizujte verziu balíka na opravenú cez rozhranie UPM.

Konflikty importu balíkov

Pri importovaní balíkov sa môžu vyskytnúť nasledujúce konflikty GUID:

  1. Balík - balík. Ak sa pri importovaní balíka zistí, že už pridané balíky obsahujú aktíva s rovnakým GUID, aktíva so zodpovedajúcimi GUID z importovaného balíka sa do projektu nepridajú.
  2. Balík je projekt. Ak sa pri importovaní balíka zistí, že projekt obsahuje aktíva so zodpovedajúcimi identifikátormi GUID, aktíva z balíka sa do projektu nepridajú. Aktíva, ktoré sú od nich závislé, však začnú využívať aktíva z projektu.

Prenos aktív z projektu do balíka

Ak prenesiete aktívum z projektu do balíka, kým je Unity otvorené, jeho funkčnosť sa zachová a prepojenia v závislých aktívach začnú používať aktívum z balíka.

Je to dôležité,: Pri kopírovaní aktíva z projektu do balíka dôjde ku konfliktu „Balík – Projekt“ opísaný v časti vyššie.

Možné riešenia konfliktov

  1. Opätovné priradenie identifikátorov GUID pomocou našich vlastných algoritmov pri importovaní všetkých aktív, aby sa eliminovali kolízie.
  2. Pridanie všetkých aktív do jedného projektu a ich následné rozdelenie do balíkov.
  3. Vytvorenie databázy obsahujúcej GUID všetkých aktív a vykonanie overenia pri odosielaní balíkov.

Záver

UPM je nové riešenie na distribúciu zdieľaných zdrojov v Unity, ktoré môže byť dôstojnou alternatívou k existujúcim metódam. Odporúčania opísané v článku boli založené na skutočných prípadoch. Dúfame, že vám budú užitočné.

Zdroj: hab.com

Pridať komentár