Unity Package Manager

Unity — platforma, ki obstaja že dolgo časa in se nenehno razvija. Vendar pa se, ko delate na več projektih hkrati, še vedno lahko srečate z izzivi pri uporabi skupnih izvorov (.cs), knjižnic (.dll) in drugih sredstev (slike, zvoki, modeli, prednastavitve). V tem članku bomo delili naše izkušnje z uporabo nativne rešitve za to težavo v Unity.

Unity Package Manager

Metode distribucije skupnih virov

Obstaja več načinov za uporabo skupnih virov za različne projekte, vendar ima vsak pristop svoje prednosti in slabosti.

1. Podvzgledovanje — ročno podvajanje virov med projekti.

Prednosti:

  • Primerno za vse vrste virov.
  • Brez težav z odvisnostmi.
  • Brez težav z GUID-ji sredstev.

Mane:

  • Ogromna repozitorija.
  • Brez možnosti verzioniranja.
  • Težave pri sledenju spremembam v skupnih virih.
  • Težave pri posodabljanju skupnih virov.

2. Git podmoduli — distribucija skupnih virov preko zunanjih podmodulov.

Prednosti:

  • Lahko delate z izvorno kodo.
  • Lahko distribuirate sredstva.
  • Brez težav z odvisnostmi.

Mane:

  • Potrebna je znanje o delu z Git.
  • Git ni posebej prijazen z binarnimi datotekami — potrebno je vključiti LFS.
  • Ločevanje dostopa do repozitorijev.
  • Težave pri nadgrajevanju in zniževanju različice.
  • Možne kolizije GUID-jev in ni enoznačnega obnašanja s strani Unity za njihovo reševanje.

3. NuGet — distribucija skupnih knjižnic preko NuGet paketov.

Prednosti:

  • Enostavno delo s projekti, ki niso odvisni od Unity.
  • Enostavno verzioniranje in reševanje odvisnosti.

Mane:

  • Unity ne zna delati z NuGet paketi "iz škatle" (na GitHubu lahko najdete NuGet Package Manager for Unity, ki to uredi, vendar so tukaj nekatere težave).
  • Težave pri distribuciji drugih vrst sredstev.

4. Unity Package Manager — distribucija skupnih virov preko nativne rešitve za Unity.

Prednosti:

  • Nativen vmesnik za delo s paketi.
  • Zaščita pred prepisovanjem .meta datotek v paketih pri konfliktih GUID-jev.
  • Možnost verzioniranja.
  • Možnost distribucije vseh vrst virov za Unity.

Mane:

  • Še vedno se lahko pojavijo konflikti GUID-jev.
  • Brez dokumentacije za izvedbo.

Zadnji način ima več prednosti kot slabosti. Vendar pa trenutno ni zelo priljubljen zaradi pomanjkanja dokumentacije, zato se bomo na tem podrobneje osredotočili.

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é společností Unity Technologies. Od verze 2018.3 však došlo k možnosti přidávání vlastních balíčků.

Unity Package Manager
Rozhraní Unity Package Manager

Balíčky se nedostanou do zdrojů projektu (adresář Assets). Jsou umístěny v samostatném adresáři. %projectFolder%/Library/PackageCache a nijak neovlivňují projekt, jejich jediná zmínka ve zdrojích je v souboru packages/manifest.json.

Unity Package Manager
Balíčky ve filesystému projektu

Zdrojové balíčky

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

1. Souborový systém.

Prednosti:

  • Rychlost realizace.
  • Nevyžaduje žádné externí nástroje.

Mane:

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

2. Git-repozitář.

Prednosti:

  • Potřebujete pouze Git-repozitář.

Mane:

  • Nelze přepínat mezi verzemi přes okno UPM.
  • Nepracuje se všemi Git-repozitáři.

3. npm-repozitář.

Prednosti:

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

Mane:

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

Níže se podíváme na implementaci UPM + npm. Tato vazba je výhodná, protože umožňuje pracovat s jakýmikoli typy zdrojů a spravovat verze balíčků, a také plně podporuje nativní rozhraní UPM.

Jako npm-repozitář můžete použít Verdaccio. K němu je podrobná dokumentacija, a k jeho spuštění bude potřebovat doslova pár příkazů.

Nastavení prostředí

Nejprve je nutné nainstalovat node.js.

Vytvoření balíčku

Aby bylo možné vytvořit balíček, je nutné umístit soubor package.json, který jej popisuje, do adresáře se obsahem tohoto balíčku. Je třeba udělat následující:

Přejít do adresáře projektu, který chceme vytvořit jako balíček.

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

Jelikož je npm orientovaný na js, v souboru se nacházejí nám nepotřebné vlastnosti main a scripts, které Unity nepoužívá. Je lepší je odstranit, aby se popis balíčku neznečišťoval. Soubor by měl vypadat zhruba takto:

  1. Přejít do adresáře projektu, který chceme vytvořit jako balíček.
  2. Spustit příkaz npm init a během dialogu zadat potřebné hodnoty. Pro název uveďte jméno ve formátu reverzní domény, například com.plarium.somepackage.
  3. Pro pohodlné zobrazení názvu balíčku - přidejte vlastnost displayName do package.json a vyplňte ji.
  4. Jelikož je npm orientovaný na js, v souboru se nacházejí nám nepotřebné vlastnosti main a scripts, které Unity nepoužívá. Je lepší je odstranit, aby se popis balíčku neznečišťoval. Soubor by měl vypadat zhruba takto:
    {
     "name": "com.plarium.somepackage",
     "displayName": "Nekateri paket",
     "version": "1.0.0",
     "description": "Opis nekaterih paketov",
     "keywords": [
       "Unity",
       "UPM"
     ],
     "author": "AVTOR",
     "license": "UNLICENSED"
    }

  5. Odprite Unity in ustvarite .meta datoteko za package.json (Unity ne vidi virov brez .meta datotek, paketi za Unity se odpirajo le za branje).

Pošiljanje paketa

Za pošiljanje paketa je treba izvesti ukaz: npm publish --registry *naslov shranjevanja paketov*.

Namestitev in posodabljanje paketov prek Unity Package Managerja

Za dodajanje paketa v Unity projekt je potrebno:

  1. V datoteko manifest.json vpisati informacije o virih paketov. Za to je treba dodati lastnost scopedRegistries in navesti obsege in naslov vira, po katerem se bodo iskali določeni obsegi.
    
    "scopedRegistries": [
       {
         "name": "Main",
         "url": "naslov shranjevanja paketov",
         "scopes": [
           "com.plarium"
         ]
       }
     ]
    
  2. Prejdite v Unity in odprite okno Package Manager (delo s prilagojenimi paketi se ne razlikuje od dela s vgrajenimi).
  3. Izberite Vse pakete.
  4. Poiščite želeni paket in ga dodajte.

Unity Package Manager

Delo z izvorno kodo in odpravljanje napak

Da se izvorne kode povežejo s projektom, je treba ustvariti Assembly Definition za paket.

Uporaba paketov ne omejuje možnosti za odpravljanje napak. Vendar pa pri delu s paketi v Unity ni mogoče preiti v IDE s klikom na napako v konzoli, če je napaka nastala v paketu. To je povezano s tem, da Unity ne vidi skriptov kot ločenih datotek, saj so pri uporabi Assembly Definition zbrane v knjižnico in povezane s projektom. Pri delu z izvorno kodo iz projekta je prehod v IDE s klikom mogoč.

Skript v projektu s povezanim paketom:

Unity Package Manager
Skript iz paketa z delujočo točko prekinjanja:

Unity Package Manager

Nujne popravke v pakete

Paketi, dodani v projekt Unity, so samo za branje, vendar jih je mogoče urejati v predpomnilniku paketov. Za to je treba:

  1. Pojdite v paket v predpomnilniku paketov.

    Unity Package Manager

  2. Uredite potrebne spremembe.
  3. Posodobite različico v datoteki package.json.
  4. Pošljite paket npm publish --registry *naslov shranjevanja paketov*.
  5. Posodobite različico paketa na popravljeno prek vmesnika UPM.

Konflikti pri uvozu paketov

Pri uvozu paketov lahko pride do naslednjih konfliktov GUID-ov:

  1. Paket — paket. Če se pri uvozu paketa ugotovi, da so v že dodanih paketih sredstva s takim istim GUID-om, sredstva s podvojenimi GUID-i iz uvoženega paketa ne bodo dodana v projekt.
  2. Paket je projekt. Ako se prilikom uvoza paketa otkrije da u projektu postoje resursi s istim GUID-ovima, resursi iz paketa neće biti dodani u projekt. Ipak, resursi koji ovise o njima počet će koristiti resurse iz projekta.

Premještanje resursa iz projekta u paket

Ako premjestite resurs iz projekta u paket dok je Unity otvoren, njegova funkcionalnost će ostati sačuvana, a veze u ovisnim resursima počet će koristiti resurs iz paketa.

Pomembno: prilikom kopiranja resursa iz projekta u paket doći će do sukoba „Paket — projekt“, opisanog u prethodnom odjeljku.

Moguća rješenja sukoba

  1. Ponovno dodjeljivanje GUID-ova prema vlastitim algoritmima prilikom uvoza svih resursa kako bi se isključile kolizije.
  2. Dodavanje svih resursa u jedan projekt s njihovim naknadnim razdvajanjem na pakete.
  3. Kreiranje baze podataka koja sadrži GUID-ove svih resursa, te provođenje validacije prilikom slanja paketa.

Zaključek

UPM je nova solucija za distribuciju zajedničkih resursa na Unity-ju, koja može biti dostojna alternativa postojećim metodama. Preporuke opisane u članku proizašle su iz stvarnih slučajeva. Nadamo se da će vam biti korisne.

Izvor: habr.com

Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki 🔥 Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki | ProHoster