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.
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.
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.
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
.
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
Nastavenie prostredia
Najprv musíte nainštalovať
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:
- 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:
{ "name": "com.plarium.somepackage", "displayName": "Some Package", "version": "1.0.0", "description": "Some Package Description", "keywords": [ "Unity", "UPM" ], "author": "AUTHOR", "license": "UNLICENSED" }
- 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:
- 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" ] } ]
- Prejdite do Unity a otvorte okno Package Manager (práca s vlastnými balíčkami sa nelíši od práce so vstavanými).
- Vyberte Všetky balíky.
- Nájdite balík, ktorý potrebujete, a pridajte ho.
Práca so zdrojmi a ladenie
Aby boli zdroje pripojené k projektu, musíte vytvoriť
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:
Skript z balíka s funkčným bodom prerušenia:
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:
- Prejdite na balík vo vyrovnávacej pamäti balíkov.
- Vykonajte potrebné zmeny.
- Aktualizujte verziu v súbore
package.json
. - Odoslať balík
npm publish --registry *адрес до хранилища пакетов*
. - 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:
- 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ú.
- 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
- Opätovné priradenie identifikátorov GUID pomocou našich vlastných algoritmov pri importovaní všetkých aktív, aby sa eliminovali kolízie.
- Pridanie všetkých aktív do jedného projektu a ich následné rozdelenie do balíkov.
- 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