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.
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.
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.
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
.
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
Nastavení prostředí
Nejprve je třeba nainstalovat
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:
- 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:
{ "name": "com.plarium.somepackage", "displayName": "Some Package", "version": "1.0.0", "description": "Some Package Description", "keywords": [ "Unity", "UPM" ], "author": "AUTHOR", "license": "UNLICENSED" }
- 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:
- Přidat do souboru
manifest.json
informace o zdroji balíčků. Chcete-li to provést, musíte přidat vlastnostscopedRegistries
a uveďte obory a zdrojovou adresu, kde budou konkrétní obory prohledávány."scopedRegistries": [ { "name": "Main", "url": "адрес до хранилища пакетов", "scopes": [ "com.plarium" ] } ]
- 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).
- Vyberte Všechny balíčky.
- Najděte balíček, který potřebujete, a přidejte jej.
Práce se zdroji a ladění
Aby mohly být zdroje připojeny k projektu, musíte vytvořit
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:
Skript z balíčku s funkčním bodem přerušení:
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:
- Přejděte na balíček v mezipaměti balíčku.
- Proveďte potřebné změny.
- Aktualizujte verzi v souboru
package.json
. - Odeslat balíček
npm publish --registry *адрес до хранилища пакетов*
. - 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:
- 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.
- 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ů
- Změna přiřazení identifikátorů GUID pomocí našich vlastních algoritmů při importu všech prostředků, abychom eliminovali kolize.
- Přidání všech aktiv do jednoho projektu a jejich rozdělení do balíčků.
- 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