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.
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.
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 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
.
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
Környezet beállítása
Először telepítenie kell
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:
- 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:
{ "name": "com.plarium.somepackage", "displayName": "Some Package", "version": "1.0.0", "description": "Some Package Description", "keywords": [ "Unity", "UPM" ], "author": "AUTHOR", "license": "UNLICENSED" }
- 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:
- Írj fájlba
manifest.json
információkat a csomagok forrásáról. Ehhez hozzá kell adni egy tulajdonságotscopedRegistries
é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" ] } ]
- 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).
- Válassza az Összes csomag lehetőséget.
- Keresse meg a kívánt csomagot, és adja hozzá.
Munka a forrásokkal és hibakeresés
Ahhoz, hogy a források kapcsolódjanak a projekthez, létre kell hozni
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:
Szkript a csomagból működő törésponttal:
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:
- Nyissa meg a csomagot a csomag-gyorsítótárban.
- Végezze el a szükséges változtatásokat.
- Frissítse a verziót a fájlban
package.json
. - csomagot küldeni
npm publish --registry *адрес до хранилища пакетов*
. - 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ő:
- 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.
- 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
- 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.
- Az összes eszköz hozzáadása egy projekthez, majd csomagokba bontása.
- 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