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.

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. — 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.

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.

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ť . K nemu je podrobný , a na jeho spustenie budete potrebovať doslova pár príkazov.
Nastavenie prostredia
Na začiatok musíme nainštalovať .
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:
- 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:
{ "name": "com.plarium.somepackage", "displayName": "Some Package", "version": "1.0.0", "description": "Popis balíka", "keywords": [ "Unity", "UPM" ], "author": "AUTOR", "license": "NEOŠTATOVANÉ" } - 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:
- Pridať do súboru
manifest.jsoninformácie o zdrojoch balíkov. Na to je potrebné pridať vlastnosťscopedRegistriesa 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" ] } ] - Prejdite do Unity a otvorte okno Package Manager (práca s vlastnými balíkmi sa nelíši od práce so zabudovanými).
- Vyberte All Packages.
- Nájdite potrebný balík a pridajte ho.

Práca s исходниками a ladění
Aby sa исходники pripojili k projektu, je potrebné vytvoriť 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:

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

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é:
- Prejsť k balíku v cache balíkov.

- Upraviť potrebné zmeny.
- Aktualizovať verziu v súbore
package.json. - Odoslať balík
npm publish --registry *adresa repozitára balíkov*. - 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:
- 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.
- 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
- Prezadanie GUID-ov podľa vlastných algoritmov pri importe všetkých aktív, aby sa vylúčili kolízie.
- Pridanie všetkých aktív do jedného projektu s následným rozdelením do balíkov.
- 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

