Unity Package Manager

Unity je platforma, která existuje už poměrně dlouho a neustále se vyvíjí. Při práci v něm s více projekty současně však stále můžete narazit na potíže s používáním společných zdrojů (.cs), knihoven (.dll) a dalších aktiv (obrázky, zvuky, modely, prefabrikáty). V tomto článku si povíme o našich zkušenostech s nativním řešením takového problému pro Unity.

Unity Package Manager

Metody distribuce sdílených zdrojů

Existuje více způsobů, jak využít sdílené zdroje pro různé projekty, ale každý přístup má své klady a zápory.

1. Duplikace – duplikujeme zdroje mezi projekty „ručně“.

výhody:

  • Vhodné pro všechny druhy zdrojů.
  • Žádné problémy se závislostí.
  • Nejsou žádné problémy s aktivy GUID.

nevýhody:

  • Obří úložiště.
  • Neexistuje žádná možnost verzování.
  • Potíže se sledováním změn sdílených zdrojů.
  • Potíže s aktualizací sdílených zdrojů.

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

výhody:

  • Můžete pracovat se zdroji.
  • Můžete distribuovat aktiva.
  • Žádné problémy se závislostí.

nevýhody:

  • Vyžaduje se zkušenost Git.
  • Git není příliš přátelský s binárními soubory - budete muset připojit LFS.
  • Řízení přístupu k úložištím.
  • Potíže s upgradováním a downgradem verzí.
  • Kolize GUID jsou možné a ze strany Unity neexistuje žádné jasné chování, které by je vyřešilo.

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

výhody:

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

nevýhody:

  • Unity nemůže pracovat s balíčky NuGet ihned po vybalení (na GitHubu můžete najít NuGet Package Manager for Unity, který to opravuje, ale jsou zde určité nuance).
  • Potíže s distribucí jiných typů aktiv.

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

výhody:

  • Nativní rozhraní pro práci s balíčky.
  • Ochrana proti přepsání souborů .meta v balíčcích kvůli konfliktům GUID.
  • Možnost verzování.
  • Schopnost distribuovat všechny typy zdrojů pro Unity.

nevýhody:

  • Stále může docházet ke konfliktům GUID.
  • Neexistuje žádná dokumentace k realizaci.

Poslední způsob má více výhod než nevýhod. Nyní však není příliš populární kvůli chybějící dokumentaci, a proto se u něj podrobně zastavíme.

Unity Package Manager

Unity Package Manager (UPM) je nástroj pro správu balíčků. Byl přidán v Unity 2018.1 a byl použit pouze pro balíčky, které byly vyvinuty Unity Technologies. Počínaje verzí 2018.3 však bylo možné přidávat vlastní balíčky.

Unity Package Manager
Rozhraní Unity Package Manager

Balíčky neskončí ve zdrojích projektu (adresář Assets). Jsou v samostatném adresáři %projectFolder%/Library/PackageCache a projekt nijak neovlivňují, jejich jediná zmínka ve zdrojovém kódu je v souboru packages/manifest.json.

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

Zdroje balíčků

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

1. Systém souborů.

výhody:

  • Rychlost realizace.
  • Nevyžaduje nástroje třetích stran.

nevýhody:

  • Obtížnost verzování.
  • Sdílený přístup k systému souborů je vyžadován pro každého, kdo s projektem pracuje.

2. Git úložiště.

výhody:

  • Vše, co potřebujete, je úložiště Git.

nevýhody:

  • Přes okno UPM nelze přepínat mezi verzemi.
  • Nefunguje se všemi repozitáři Git.

3. úložiště npm.

výhody:

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

nevýhody:

  • V současnosti ignoruje všechny verze řetězců balíčků kromě "-preview".

Níže se podíváme na implementaci UPM + npm. Tento balíček je pohodlný, protože vám umožňuje pracovat s jakýmkoli typem zdroje a spravovat verze balíčků a také plně podporuje nativní rozhraní UPM.

Můžete jej použít jako úložiště npm Verdaccio. Je tam podrobné dokumentacia ke spuštění je potřeba jen pár příkazů.

Nastavení prostředí

Nejprve je třeba nainstalovat node.js.

Vytvoření balíčku

Chcete-li vytvořit balíček, musíte soubor umístit package.json, který jej bude popisovat, do adresáře s obsahem tohoto balíčku. Musíte provést následující:

Přejděte do adresáře projektu, ve kterém chceme vytvořit balíček.

Spusťte příkaz npm init a během dialogu zadejte požadované hodnoty. Jako název zadejte název ve formátu reverzní domény, například com.plarium.somepackage.
Chcete-li pohodlně zobrazit název balíčku, přidejte vlastnost displayName do package.json a vyplňte ji.

Protože npm je orientovaný na js, soubor obsahuje vlastnosti main a scripts, které nepotřebujeme, což Unity nepoužívá. Je lepší je odstranit, aby nedošlo k nepořádku v popisu balení. Soubor by měl vypadat nějak takto:

  1. Přejděte do adresáře projektu, ve kterém chceme vytvořit balíček.
  2. Spusťte příkaz npm init a během dialogu zadejte požadované hodnoty. Jako název zadejte název ve formátu reverzní domény, například com.plarium.somepackage.
  3. Chcete-li pohodlně zobrazit název balíčku, přidejte vlastnost displayName do package.json a vyplňte ji.
  4. Protože npm je orientovaný na js, soubor obsahuje vlastnosti main a scripts, které nepotřebujeme, což Unity nepoužívá. Je lepší je odstranit, aby nedošlo k nepořádku v popisu balení. Soubor by měl vypadat nějak takto:
    {
     "name": "com.plarium.somepackage",
     "displayName": "Some Package",
     "version": "1.0.0",
     "description": "Some Package Description",
     "keywords": [
       "Unity",
       "UPM"
     ],
     "author": "AUTHOR",
     "license": "UNLICENSED"
    }

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

Odeslání balíčku

Chcete-li odeslat balíček, musíte spustit příkaz: npm publish --registry *адрес до хранилища пакетов*.

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

Chcete-li přidat balíček do projektu Unity, potřebujete:

  1. Přidat do souboru manifest.json informace o zdroji balíčků. Chcete-li to provést, musíte přidat vlastnost scopedRegistries a uveďte obory a zdrojovou adresu, kde budou konkrétní obory prohledávány.
    
    "scopedRegistries": [
       {
         "name": "Main",
         "url": "адрес до хранилища пакетов",
         "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 s vestavěnými).
  3. Vyberte Všechny balíčky.
  4. Najděte balíček, který potřebujete, a přidejte jej.

Unity Package Manager

Práce se zdroji a ladění

Aby mohly být zdroje připojeny k projektu, musíte vytvořit Definice sestavy za balíček.

Používání balíčků neomezuje možnosti ladění. Při práci s balíčky v Unity však nemůžete přejít do IDE kliknutím na chybu v konzole, pokud se chyba vyskytla v balíčku. To je způsobeno skutečností, že Unity nevidí skripty jako samostatné soubory, protože při použití definice sestavy jsou shromažďovány do knihovny a zahrnuty do projektu. Při práci se zdroji z projektu je dostupné kliknutí do IDE.

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

Unity Package Manager
Skript z balíčku s funkčním bodem přerušení:

Unity Package Manager

Naléhavé opravy balíčků

Unity balíčky přidané do projektu jsou pouze pro čtení, ale lze je upravovat v mezipaměti balíčků. K tomu potřebujete:

  1. Přejděte na balíček v mezipaměti balíčku.

    Unity Package Manager

  2. Proveďte potřebné změny.
  3. Aktualizujte verzi v souboru package.json.
  4. Odeslat balíček npm publish --registry *адрес до хранилища пакетов*.
  5. Aktualizujte verzi balíčku na opravenou přes rozhraní UPM.

Konflikty importu balíčku

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

  1. Balíček - balík. Pokud se při importu balíčku zjistí, že již přidané balíčky obsahují aktiva se stejným GUID, nebudou položky s odpovídajícími GUID z importovaného balíčku přidány do projektu.
  2. Balíček je projekt. Pokud se při importu balíčku zjistí, že projekt obsahuje položky s odpovídajícími identifikátory GUID, nebudou položky z balíčku přidány do projektu. Aktiva, která na nich závisí, však začnou využívat aktiva z projektu.

Převod aktiv z projektu do balíčku

Pokud přenesete aktivum z projektu do balíčku, zatímco je Unity otevřené, jeho funkčnost zůstane zachována a odkazy v závislých aktivech začnou používat aktivum z balíčku.

Je to důležité,: Při kopírování položky z projektu do balíčku dojde ke konfliktu „Package – Project“ popsanému v části výše.

Možná řešení konfliktů

  1. Změna přiřazení identifikátorů GUID pomocí našich vlastních algoritmů při importu všech prostředků, abychom eliminovali kolize.
  2. Přidání všech aktiv do jednoho projektu a jejich rozdělení do balíčků.
  3. Vytvoření databáze obsahující GUID všech aktiv a provedení ověření 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 vhodnou alternativou ke stávajícím metodám. Doporučení popsaná v článku byla založena na skutečných případech. Doufáme, že jsou pro vás užitečné.

Zdroj: www.habr.com

Přidat komentář