Unity Package Manager

Unity — platforma, která existuje již poměrně dlouho a neustále se vyvíjí. Nicméně, při práci na několika projektech současně se stále můžete setkat s obtížemi při používání sdílených zdrojových kódů (.cs), knihoven (.dll) a ostatních assetů (obrázky, zvuky, modely, prefaby). V tomto článku se podělíme o naše zkušenosti s nativním řešením této situace pro Unity.

Unity Package Manager

Metody šíření sdílených zdrojů

Existuje více než jeden způsob, jak využívat sdílené zdroje pro různé projekty, ale každý přístup má své výhody a nevýhody.

1. Duplikace — ručně duplicujeme zdroje mezi projekty.

Plusy:

  • Vhodné pro všechny typy zdrojů.
  • Žádné problémy se závislostmi.
  • Žádné problémy s GUIDy assetů.

Nevýhody:

  • Obrovské repozitáře.
  • Žádná možnost verzování.
  • Obtížnost sledování změn ve sdílených zdrojích.
  • Obtížnost aktualizace sdílených zdrojů.

2. Git submoduly — distribuce sdílených zdrojů prostřednictvím externích podmodulů.

Plusy:

  • Lze pracovat se zdrojovými kódy.
  • Lze šířit assety.
  • Žádné problémy se závislostmi.

Nevýhody:

  • Je vyžadována dovednost práce s Gitem.
  • Git se moc nepřátelí s binárními soubory — bude nutné zapnout LFS.
  • Dělení přístupu pro repozitáře.
  • Obtíže při zvyšování a snižování verze.
  • Mohou nastat kolize GUIDů a Unity nemá jednoznačné chování pro jejich řešení.

3. NuGet — distribuce sdílených knihoven prostřednictvím NuGet balíčků.

Plusy:

  • Pohodlná práce s projekty, které nezávisí na Unity.
  • Pohodlné verzování a řešení závislostí.

Nevýhody:

  • Unity neumí pracovat s NuGet balíčky "out of the box" (na GitHubu lze nalézt NuGet Package Manager for Unity, který to opravuje, ale jsou tam určité nuance).
  • Obtížnost při distribuci ostatních typů assetů.

4. Unity Package Manager — distribuce sdílených zdrojů prostřednictvím nativního řešení pro Unity.

Plusy:

  • Nativní rozhraní pro práci s balíčky.
  • Ochrana před přepsáním .meta souborů v balíčcích při kolizích GUIDů.
  • Možnost verzování.
  • Možnost distribuce všech typů zdrojů pro Unity.

Nevýhody:

  • Stále mohou nastat kolize GUIDů.
  • Žádná dokumentace pro implementaci.

Poslední způsob má více výhod než nevýhod. Nicméně, v současné době není příliš populární kvůli nedostatku dokumentace, a proto se na něj podrobněji zaměříme.

Unity Package Manager

Unity Package Manager (dále UPM) je nástroj pro správu balíčků. Byl přidán do Unity 2018.1 a byl využíván pouze pro balíčky vyvíjené Unity Technologies. Od verze 2018.3 je však možné přidávat vlastní balíčky.

Unity Package Manager
Rozhraní Unity Package Manager

Balíčky se nedostanou do zdrojových kódů projektu (adresář Assets). Nacházejí se v samostatném adresáři. %projectFolder%/Library/PackageCache a nijak neovlivňují projekt, jejich jediné zmínění ve zdrojích je v souboru packages/manifest.json.

Unity Package Manager
Balíčky v souborovém systému projektu

Zdroje balíčků

UPM může využívat několik zdrojů balíčků:

1. Souborový systém.

Plusy:

  • Rychlost realizace.
  • Nepotřebuje žádné externí nástroje.

Nevýhody:

  • Složitost verzování.
  • Je třeba mít společný přístup k souborovému systému pro všechny, kdo pracují na projektu.

2. Git repozitář.

Plusy:

  • Je třeba mít pouze Git repozitář.

Nevýhody:

  • Není možné přepínat mezi verzemi přes okno UPM.
  • Nepracuje se všemi Git repozitáři.

3. npm repozitář.

Plusy:

  • Plně podporuje funkčnost UPM a používá se k distribuci oficiálních balíčků Unity.

Nevýhody:

  • V současnosti ignoruje všechny řetězcové verze balíčků kromě „-preview“.

Níže se podíváme na implementaci UPM + npm. Tato kombinace je pohodlná, protože umožňuje pracovat se všemi druhy zdrojů a spravovat verze balíčků, a také plně podporuje nativní rozhraní UPM.

Jako npm repozitář můžeme použít Verdaccio. K tomu existuje podrobná dokumentace, a k jeho spuštění bude potřebovat doslova pár příkazů.

Nastavení prostředí

Nejprve je potřeba nainstalovat node.js.

Vytvoření balíčku

Abychom vytvořili balíček, je nutné umístit soubor package.json, který jej bude popisovat, do adresáře se obsahem tohoto balíčku. Je potřeba provést následující:

Přejděte do adresáře projektu, který chceme udělat balíčkem.

Spusťte příkaz npm init a během dialogu zadejte potřebné hodnoty. Pro name uveďte jméno ve formátu reverzní domény, například com.plarium.somepackage.
Pro pohodlné zobrazení jména balíčku – přidejte vlastnost displayName do package.json a vyplňte ji.

Jelikož je npm orientovaný na js, v souboru jsou pro nás nepotřebné vlastnosti main a scripts, které Unity nepoužívá. Je lepší je odstranit, abychom nezaplnili popis balíčku. Soubor by měl vypadat přibližně takto:

  1. Přejděte do adresáře projektu, který chceme udělat balíčkem.
  2. Spusťte příkaz npm init a během dialogu zadejte potřebné hodnoty. Pro name uveďte jméno ve formátu reverzní domény, například com.plarium.somepackage.
  3. Pro pohodlné zobrazení jména balíčku – přidejte vlastnost displayName do package.json a vyplňte ji.
  4. Jelikož je npm orientovaný na js, v souboru jsou pro nás nepotřebné vlastnosti main a scripts, které Unity nepoužívá. Je lepší je odstranit, abychom nezaplnili popis balíčku. Soubor by měl vypadat přibližně takto:
    {
     "name": "com.plarium.somepackage",
     "displayName": "Nějaký balíček",
     "version": "1.0.0",
     "description": "Popis nějakého balíčku",
     "keywords": [
       "Unity",
       "UPM"
     ],
     "author": "AUTOR",
     "license": "NEOPRÁVNĚNÉ"
    }

  5. Otevřete Unity a vygenerujte soubor .meta pro package.json (Unity nevidí assety bez .meta souborů, balíčky pro Unity se otevírají pouze pro čtení).

Odeslat balíček

Pro odeslání balíčku je potřeba provést příkaz: npm publish --registry *adresa k úložišti balíčků*.

Instalace a aktualizace balíčků přes Unity Package Manager

Aby bylo možné přidat balíček do projektu Unity, je třeba:

  1. Upravit soubor manifest.json informace o zdrojích balíčků. K tomu je nutné přidat vlastnost scopedRegistries a uvést scope a adresu zdroje, podle kterého budou hledány konkrétní scopy.
    
    "scopedRegistries": [
       {
         "name": "Hlavní",
         "url": "adresa k úložišti balíčků",
         "scopes": [
           "com.plarium"
         ]
       }
     ]
    
  2. Přejděte do Unity a otevřete okno Správce balíčků (práce s vlastními balíčky se neliší od práce se zabudovanými).
  3. Vyberte Všechny balíčky.
  4. Najděte požadovaný balíček a přidejte ho.

Unity Package Manager

Práce se zdrojovými kódy a ladění

Aby se zdroje připojily k projektu, je nutné vytvořit Assembly Definition pro balíček.

Použití balíčků neomezuje možnosti ladění. Při práci s balíčky v Unity však není možné přejít do IDE kliknutím na chybu v konzoli, pokud k chybě došlo v balíčku. Je to dáno tím, že Unity nevidí skripty jako samostatné soubory, protože při použití Assembly Definition jsou shromažďovány do knihovny a připojovány k projektu. Při práci se zdrojovými kódy z projektu je možné přejít do IDE kliknutím.

Skript v projektu s připojeným balíčkem:

Unity Package Manager
Skript z balíčku s funkčním záchytem:

Unity Package Manager

Okamžité provedení oprav v balíčcích

Přidané balíčky Unity v projektu jsou pouze pro čtení, ale je možné je upravovat v mezipaměti balíčků. K tomu je třeba:

  1. Přejděte k balíčku v mezipaměti balíčků.

    Unity Package Manager

  2. Proveďte potřebné změny.
  3. Aktualizujte verzi v souboru package.json.
  4. Odešlete balíček npm publish --registry *adresa k úložišti balíčků*.
  5. Aktualizujte verzi balíčku na opravenou prostřednictvím rozhraní UPM.

Konflikty při importu balíčků

Při importu balíčků mohou nastat následující konflikty GUID:

  1. Balíček - balíček. Pokud při importu balíčku zjistíte, že v již přidaných balíčcích jsou assety se stejným GUID, assety s shodnými GUID z importovaného balíčku nebudou přidány do projektu.
  2. Balíček je projekt. Pokud se během importu balíčku zjistí, že v projektu jsou assety se shodnými GUID, assety z balíčku se do projektu nepřidají. Nicméně assety, které na ně závisí, začnou používat assety z projektu.

Přenos assetů z projektu do balíčku

Pokud přenesete asset z projektu do balíčku při otevřeném Unity, jeho funkcionalita zůstane zachována, a odkazy v závislých assetech začnou používat asset z balíčku.

Je důležité: při kopírování assetu z projektu do balíčku dojde ke konfliktu "Balíček — projekt", jak je popsáno v předchozí části.

Možná řešení konfliktů

  1. Přečíslování GUID podle vlastních algoritmů při importu všech assetů, aby se vyloučily kolize.
  2. Přidání všech assetů do jednoho projektu a jejich následné rozdělení na balíčky.
  3. Vytvoření databáze obsahující GUID všech assetů a provádění validace při odesílání balíčků.

Závěr

UPM je nové řešení pro distribuci sdílených zdrojů v Unity, které může být cennou alternativou k existujícím metodám. Doporučení uvedená v článku vznikla na základě skutečných případů. Doufáme, že vám budou užitečná.

Zdroj: habr.com

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster