Unity csomagkezelő

A Unity egy olyan platform, amely már régóta létezik, és folyamatosan fejlődik. Ha azonban egyidejűleg több projekttel dolgozik, továbbra is nehézségekbe ütközhet a közös források (.cs), a könyvtárak (.dll) és egyéb eszközök (képek, hangok, modellek, előregyártott elemek) használata. Ebben a cikkben a Unity ilyen problémájának natív megoldásával kapcsolatos tapasztalatainkról fogunk beszélni.

Unity csomagkezelő

Megosztott erőforrás-elosztási módszerek

A megosztott erőforrások különböző projektekhez való felhasználásának egynél több módja van, de mindegyik megközelítésnek megvannak a maga előnyei és hátrányai.

1. Másolás – „kézzel” megkettőzzük az erőforrásokat a projektek között.

Előnyök:

  • Alkalmas mindenféle erőforráshoz.
  • Nincs függőségi probléma.
  • Nincs probléma az eszközök GUID-jeivel.

Hátrányok:

  • Óriás tárhelyek.
  • Verziószámításra nincs lehetőség.
  • Nehézségek nyomon követni a megosztott erőforrások változásait.
  • Nehézségek a megosztott erőforrások frissítésében.

2. Git almodulok - a megosztott erőforrások elosztása külső almodulokon keresztül.

Előnyök:

  • Dolgozhat forrásokkal.
  • Eloszthatja az eszközöket.
  • Nincs függőségi probléma.

Hátrányok:

  • Git képességek szükségesek.
  • A Git nem túl barátságos a bináris fájlokkal – bele kell foglalnia az LFS-t.
  • Hozzáférés-vezérlés a tárhelyekhez.
  • Frissítés és leminősítés nehézségei.
  • GUID ütközések lehetségesek, és a Unity részéről nincs egyértelmű magatartás a megoldásukban.

3. NuGet – megosztott könyvtárak terjesztése NuGet csomagokon keresztül.

Előnyök:

  • Kényelmes munkavégzés olyan projektekkel, amelyek nem függenek a Unity-től.
  • Kényelmes verziókezelés és függőségi felbontás.

Hátrányok:

  • A Unity nem tudja, hogyan kell dolgozni a NuGet csomagokkal (a NuGet Package Manager for Unity a GitHubon található, amely kijavítja ezt, de vannak árnyalatok).
  • Más típusú eszközök elosztásának nehézségei.

4. Unity Package Manager – megosztott erőforrások elosztása a Unity natív megoldásán keresztül.

Előnyök:

  • Natív felület a csomagokkal való munkavégzéshez.
  • Védelem a csomagokban lévő .meta fájlok felülírása ellen GUID-ütközések esetén.
  • Verziókészítési lehetőség.
  • Lehetőség mindenféle erőforrás elosztására a Unity számára.

Hátrányok:

  • GUID-ütközések továbbra is előfordulhatnak.
  • A megvalósításhoz nincs dokumentáció.

Az utóbbi módszernek több előnye van, mint hátránya. Most azonban a dokumentáció hiánya miatt nem túl népszerű, ezért részletesen kitérünk rá.

Unity csomagkezelő

A Unity Package Manager (a továbbiakban: UPM) egy csomagkezelő eszköz. A Unity 2018.1-ben került hozzáadásra, és csak a Unity Technologies által fejlesztett csomagokhoz használták. A 2018.3-as verziótól kezdve azonban lehetővé vált egyéni csomagok hozzáadása.

Unity csomagkezelő
Unity Package Manager felület

A csomagok nem kerülnek a projekt forrásaiba (Assets könyvtár). Külön könyvtárban vannak. %projectFolder%/Library/PackageCache és semmilyen módon nem befolyásolják a projektet, egyetlen említésük a forráskódban található a fájlban packages/manifest.json.

Unity csomagkezelő
Csomagok a projekt fájlrendszerében

Csomag források

Az UPM többféle csomagforrást használhat:

1. Fájlrendszer.

Előnyök:

  • Megvalósítási sebesség.
  • Nem igényel harmadik féltől származó eszközöket.

Hátrányok:

  • verziókészítés bonyolultsága.
  • A fájlrendszerhez való megosztott hozzáférésre mindenkinek szüksége van, aki a projekttel dolgozik.

2. Git repository.

Előnyök:

  • Csak egy Git adattárra van szüksége.

Hátrányok:

  • Az UPM ablakon keresztül nem válthat a verziók között.
  • Nem működik minden Git-tárral.

3. npm adattár.

Előnyök:

  • Teljes mértékben támogatja az UPM funkcióit, és hivatalos Unity-csomagok terjesztésére szolgál.

Hátrányok:

  • Jelenleg figyelmen kívül hagyja a csomagok összes karakterlánc-verzióját, kivéve a "-preview"-t.

Az alábbiakban megnézzük az UPM + npm megvalósítást. Ez a csomag kényelmes, mert lehetővé teszi bármilyen erőforrással való munkát és csomagverziók kezelését, valamint teljes mértékben támogatja a natív UPM felületet.

Npm adattárként használhatja Verdaccio. Részletes a dokumentáció, és szó szerint néhány parancsra van szükség a futtatásához.

Környezet beállítása

Először telepítenie kell node.js.

Hozzon létre egy csomagot

Csomag létrehozásához el kell helyeznie a fájlt package.json, amely leírja, a csomag tartalmát tartalmazó könyvtárba. A következőket kell tennie:

Lépjen a projekt könyvtárba, amelyhez csomagot szeretnénk készíteni.

Futtassa az npm init parancsot, és adja meg a szükséges értékeket a párbeszédpanelen. A névhez adja meg a nevet fordított tartományformátumban, például com.plarium.somepackage.
A csomagnév kényelmes megjelenítéséhez adja hozzá a displayName tulajdonságot a package.json fájlhoz, és töltse ki.

Mivel az npm js-orientált, a fájl tartalmazza azokat a main és scripts tulajdonságokat, amelyekre nincs szükségünk, amelyeket a Unity nem használ. Jobb eltávolítani őket, hogy ne tömítsék el a csomag leírását. A fájlnak valahogy így kell kinéznie:

  1. Lépjen a projekt könyvtárba, amelyhez csomagot szeretnénk készíteni.
  2. Futtassa az npm init parancsot, és adja meg a szükséges értékeket a párbeszédpanelen. A névhez adja meg a nevet fordított tartományformátumban, például com.plarium.somepackage.
  3. A csomagnév kényelmes megjelenítéséhez adja hozzá a displayName tulajdonságot a package.json fájlhoz, és töltse ki.
  4. Mivel az npm js-orientált, a fájl tartalmazza azokat a main és scripts tulajdonságokat, amelyekre nincs szükségünk, amelyeket a Unity nem használ. Jobb eltávolítani őket, hogy ne tömítsék el a csomag leírását. A fájlnak valahogy így kell kinéznie:
    {
     "name": "com.plarium.somepackage",
     "displayName": "Some Package",
     "version": "1.0.0",
     "description": "Some Package Description",
     "keywords": [
       "Unity",
       "UPM"
     ],
     "author": "AUTHOR",
     "license": "UNLICENSED"
    }

  5. Nyissa meg a Unity-t, és hozzon létre egy .meta fájlt a package.json fájlhoz (A Unity nem látja az eszközöket .meta fájlok nélkül, a Unity-csomagok csak olvasható módon nyílnak meg).

Csomag küldése

Csomag küldéséhez futtassa a következő parancsot: npm publish --registry *адрес до хранилища пакетов*.

Csomagok telepítése és frissítése a Unity Package Manager segítségével

Ha csomagot szeretne hozzáadni egy Unity projekthez, a következőket kell tennie:

  1. Írj fájlba manifest.json információkat a csomagok forrásáról. Ehhez hozzá kell adni egy tulajdonságot scopedRegistries és adja meg a hatóköröket és a forrás címét, amely alapján az adott hatóköröket keresni fogja.
    
    "scopedRegistries": [
       {
         "name": "Main",
         "url": "адрес до хранилища пакетов",
         "scopes": [
           "com.plarium"
         ]
       }
     ]
    
  2. Lépjen a Unity oldalra, és nyissa meg a Csomagkezelő ablakot (az egyéni csomagokkal való munka nem különbözik a beépített csomagokkal való munkavégzéstől).
  3. Válassza az Összes csomag lehetőséget.
  4. Keresse meg a kívánt csomagot, és adja hozzá.

Unity csomagkezelő

Munka a forrásokkal és hibakeresés

Ahhoz, hogy a források kapcsolódjanak a projekthez, létre kell hozni Az összeszerelés meghatározása a csomagért.

A csomagok használata nem korlátozza a hibakeresési lehetőségeket. Ha azonban csomagokkal dolgozik a Unity-ben, nem léphet be az IDE-be a konzolon lévő hibára kattintva, ha a hiba a csomagban történt. Ennek az az oka, hogy a Unity nem látja külön fájlként a szkripteket, mivel az Assembly Definition használatakor ezek egy könyvtárba kerülnek, és bekerülnek a projektbe. Ha egy projektből származó forrásokkal dolgozik, átkattintható az IDE-re való áttérés.

Szkript egy projektben egy csatlakoztatott csomaggal:

Unity csomagkezelő
Szkript a csomagból működő törésponttal:

Unity csomagkezelő

Sürgős javítások a csomagokon

A projekthez hozzáadott Unity-csomagok csak olvashatók, de szerkeszthetők a csomag-gyorsítótárban. Ehhez szüksége van:

  1. Nyissa meg a csomagot a csomag-gyorsítótárban.

    Unity csomagkezelő

  2. Végezze el a szükséges változtatásokat.
  3. Frissítse a verziót a fájlban package.json.
  4. csomagot küldeni npm publish --registry *адрес до хранилища пакетов*.
  5. Frissítse a csomag verzióját a javított verzióra az UPM felületén keresztül.

Csomagimportálási ütközések

Csomagok importálásakor a következő GUID ütközések fordulhatnak elő:

  1. A csomag egy csomag. Ha egy csomag importálásakor azt találja, hogy a már hozzáadott csomagok ugyanazzal a GUID-vel rendelkező eszközöket tartalmaznak, akkor az importált csomagból egyező GUID-vel rendelkező eszközök nem kerülnek hozzáadásra a projekthez.
  2. A csomag egy projekt. Ha egy csomag importálásakor azt találja, hogy a projektben egyező GUID-vel rendelkező eszközök vannak, akkor a csomagból származó eszközök nem kerülnek hozzáadásra a projekthez. A tőlük függő eszközök azonban elkezdik használni a projektből származó eszközöket.

Eszközök átvitele projektből csomagba

Ha átvisz egy eszközt egy projektből egy Unity megnyitott csomagba, akkor annak funkcionalitása megmarad, és a függő eszközök hivatkozásai elkezdik használni a csomagban lévő eszközt.

Fontos: Ha egy eszközt projektből csomagba másol, a fenti szakaszban leírt csomag-projekt ütközés lép fel.

Lehetséges megoldások a konfliktusokra

  1. A GUID-k átrendelése saját algoritmusok szerint az összes eszköz importálásakor az ütközések elkerülése érdekében.
  2. Az összes eszköz hozzáadása egy projekthez, majd csomagokba bontása.
  3. Hozzon létre egy adatbázist, amely tartalmazza az összes eszköz GUID-jét, és érvényesítse a csomagok elküldésekor.

Következtetés

Az UPM egy új megoldás a megosztott erőforrások Unity-ben való elosztására, amely méltó alternatívája lehet a meglévő módszereknek. A cikkben leírt ajánlások valós esetek alapján születtek. Reméljük, hogy hasznosnak találja őket.

Forrás: will.com

Hozzászólás