Unity Package Manager

Unity — en plattform som har funnits lĂ€nge och stĂ€ndigt utvecklas. Men nĂ€r man arbetar med flera projekt samtidigt kan man fortfarande stöta pĂ„ svĂ„righeter med att anvĂ€nda gemensamma kĂ€llfiler (.cs), bibliotek (.dll) och andra tillgĂ„ngar (bilder, ljud, modeller, prefabs). I denna artikel delar vi med oss av vĂ„r erfarenhet av en nativ lösning pĂ„ detta problem för Unity.

Unity Package Manager

Metoder för att sprida gemensamma resurser

Det finns mer Àn ett sÀtt att anvÀnda gemensamma resurser för olika projekt, men varje metod har sina fördelar och nackdelar.

1. Duplicering — manuellt duplicera resurser mellan projekten.

Fördelar:

  • LĂ€mplig för alla typer av resurser.
  • Inga problem med beroenden.
  • Inga problem med GUID:er för tillgĂ„ngar.

Nackdelar:

  • Gigantiska bibliotek.
  • Inga möjligheter till versionshantering.
  • SvĂ„righeter att spĂ„ra förĂ€ndringar i gemensamma resurser.
  • SvĂ„righeter att uppdatera gemensamma resurser.

2. Git-submoduler — spridning av gemensamma resurser genom externa submoduler.

Fördelar:

  • Möjligt att arbeta med kĂ€llfiler.
  • Möjligt att sprida tillgĂ„ngar.
  • Inga problem med beroenden.

Nackdelar:

  • KrĂ€ver kunskap om Git.
  • Git fungerar inte sĂ€rskilt bra med binĂ€ra filer — LFS mĂ„ste anlitas.
  • BehörighetsavgrĂ€nsning för repository.
  • SvĂ„righeter vid upp- och nedgraderingar.
  • Möjliga GUID-kollisioner och oklarheter i hur Unity hanterar dem.

3. NuGet — spridning av gemensamma bibliotek genom NuGet-paket.

Fördelar:

  • Enkel hantering av projekt som inte Ă€r beroende av Unity.
  • Enkel versionshantering och lösning av beroenden.

Nackdelar:

  • Unity kan inte hantera NuGet-paket "ur lĂ„dan" (du kan hitta NuGet Package Manager for Unity pĂ„ GitHub, som Ă„tgĂ€rdar detta, men det finns vissa förbehĂ„ll).
  • SvĂ„righeter vid spridning av andra typer av tillgĂ„ngar.

4. Unity Package Manager — spridning av gemensamma resurser genom en nativ lösning för Unity.

Fördelar:

  • Nativt grĂ€nssnitt för att arbeta med paket.
  • Skydd mot överskrivning av .meta-filer i paket vid GUID-konflikter.
  • Möjlighet till versionshantering.
  • Möjlighet att sprida alla typer av resurser för Unity.

Nackdelar:

  • Konflikter med GUID:er kan fortfarande intrĂ€ffa.
  • Ingen dokumentation för implementation.

Den senaste metoden har fler fördelar Àn nackdelar. Men den Àr för nÀrvarande inte sÀrskilt populÀr pÄ grund av brist pÄ dokumentation, sÄ vi kommer att gÄ in pÄ den i detalj.

Unity Package Manager

Unity Package Manager (hÀdanefter UPM) Àr ett verktyg för paketledning. Det lades till i Unity 2018.1 och anvÀndes enbart för paket som utvecklades av Unity Technologies. Men frÄn och med version 2018.3 blev det möjligt att lÀgga till anpassade paket.

Unity Package Manager
GrÀnssnittet för Unity Package Manager

Paket hamnar inte i projektets kÀllfiler (mappen Assets). De finns i en separat mapp. %projectFolder%/Library/PackageCache och pÄverkar inte projektet; den enda referensen i kÀllfilerna finns i filen packages/manifest.json.

Unity Package Manager
Paket i projektets filsystem

PaketkÀllor

UPM kan anvÀnda flera paketkÀllor:

1. Filsystem.

Fördelar:

  • Genomförande hastighet.
  • KrĂ€ver inga externa verktyg.

Nackdelar:

  • Versioneringens komplexitet.
  • Gemensam Ă„tkomst till filsystemet krĂ€vs för alla som arbetar med projektet.

2. Git-repository.

Fördelar:

  • Endast ett Git-repository behövs.

Nackdelar:

  • Kan inte byta versioner via UPM-fönstret.
  • Fungerar inte med alla Git-repositories.

3. npm-repository.

Fördelar:

  • Stöder fullt ut UPM:s funktionalitet och anvĂ€nds för distribution av officiella Unity-paket.

Nackdelar:

  • För nĂ€rvarande ignorerar den alla strĂ€ngversioner av paket utom »-preview«.

Nedan kommer vi att titta pÄ genomförandet av UPM + npm. Denna kombination Àr praktisk eftersom den gör det möjligt att arbeta med alla typer av resurser och hantera paketversioner, och stöder Àven UPM:s ursprungliga grÀnssnitt helt.

Som npm-repository kan man anvÀnda Verdaccio. Det finns en detaljerad dokumentation, och för att köra det behövs bokstavligen nÄgra kommandon.

MiljöinstÀllning

För att börja, installera node.js.

Skapa paket

För att skapa ett paket mÄste filen package.json, som kommer att beskriva det, placeras i katalogen med innehÄllet för detta paket. Gör följande:

GÄ till projektmappen som vi vill göra till ett paket.

Kör kommandot npm init och ange nödvÀndiga vÀrden under dialogen. För namn anger vi namnet i omvÀnd domÀnformat, till exempel com.plarium.somepackage.
För att smidigt visa paketnamnet — lĂ€gg till egenskapen displayName i package.json och fyll i det.

Eftersom npm Àr js-orienterat, finns det i filen onödiga egenskaper som main och scripts, som Unity inte anvÀnder. Det Àr bÀttre att ta bort dem för att inte överbelasta paketbeskrivningen. Filen bör se ut ungefÀr sÄ hÀr:

  1. GÄ till projektmappen som vi vill göra till ett paket.
  2. Kör kommandot npm init och ange nödvÀndiga vÀrden under dialogen. För namn anger vi namnet i omvÀnd domÀnformat, till exempel com.plarium.somepackage.
  3. För att smidigt visa paketnamnet — lĂ€gg till egenskapen displayName i package.json och fyll i det.
  4. Eftersom npm Àr js-orienterat, finns det i filen onödiga egenskaper som main och scripts, som Unity inte anvÀnder. Det Àr bÀttre att ta bort dem för att inte överbelasta paketbeskrivningen. Filen bör se ut ungefÀr sÄ hÀr:
    {
     "name": "com.plarium.somepackage",
     "displayName": "NÄgot Paket",
     "version": "1.0.0",
     "description": "Beskrivning av NÄgot Paket",
     "keywords": [
       "Unity",
       "UPM"
     ],
     "author": "FÖRFATTARE",
     "license": "OBEHOVLIG"
    }

  5. Öppna Unity och generera en .meta-fil för package.json (Unity ser inte tillgĂ„ngarna utan .meta-filer; paket för Unity öppnas endast för lĂ€sning).

Skicka paketet

För att skicka paketet, mÄste du köra kommandot: npm publish --registry *adress till paketlagret*.

Installation och uppdatering av paket via Unity Package Manager

För att lÀgga till ett paket i ett Unity-projekt mÄste du:

  1. Föra in i filen manifest.json information om paketkÀllor. För detta mÄste du lÀgga till egenskapen scopedRegistries och ange scopes och adressen till kÀllan dÀr specifika scopes ska sökas.
    
    "scopedRegistries": [
       {
         "name": "Huvud",
         "url": "adress till paketlagret",
         "scopes": [
           "com.plarium"
         ]
       }
     ]
    
  2. GÄ till Unity och öppna Package Manager-fönstret (hantering av anpassade paket skiljer sig inte frÄn hantering av inbyggda).
  3. VĂ€lj Alla Paket.
  4. Hitta det nödvÀndiga paketet och lÀgg till det.

Unity Package Manager

Arbete med kÀllkod och felsökning

För att kÀllkoden ska kopplas till projektet mÄste du skapa en Assembly Definition för paketet.

AnvÀndningen av paket begrÀnsar inte möjligheterna till felsökning. Men vid arbete med paket i Unity kan du inte gÄ till IDE genom att klicka pÄ ett fel i konsolen, om felet intrÀffade i paketet. Detta beror pÄ att Unity inte ser skripten som enskilda filer, eftersom de sammanstÀlls i ett bibliotek och kopplas till projektet vid anvÀndning av Assembly Definition. Vid arbete med kÀllkoden frÄn projektet Àr övergÄng till IDE möjlig.

Skript i projektet med kopplad paket:

Unity Package Manager
Skript frÄn paketet med fungerande brytpunkt:

Unity Package Manager

Akut Àndring av paket

Paketen som har lagts till i projektet Àr endast skrivskyddade, men de kan redigeras i paketens cache. För detta mÄste du:

  1. GĂ„ till paketet i paketens cache.

    Unity Package Manager

  2. Göra nödvÀndiga Àndringar.
  3. Uppdatera versionen i filen package.json.
  4. Skicka paketet npm publish --registry *adress till paketlagret*.
  5. Uppdatera paketversionen till den korrigerade genom UPM-grÀnssnittet.

Konflikter vid import av paket

Vid import av paket kan följande GUID-konflikter intrÀffa:

  1. Paket – paket. Om det vid import av paket upptĂ€cks att det finns tillgĂ„ngar med samma GUID redan i de tillagda paketen, kommer tillgĂ„ngar med matchande GUID frĂ„n det importerade paketet inte att lĂ€ggas till i projektet.
  2. Paketet Àr ett projekt. Om det upptÀckts att det finns tillgÄngar med samma GUID:er i projektet vid import av paketet, kommer inte tillgÄngarna frÄn paketet att lÀggas till i projektet. Dock kommer tillgÄngar som Àr beroende av dem att börja anvÀnda tillgÄngarna frÄn projektet.

Överföring av tillgĂ„ngar frĂ„n projektet till paketet

Om du överför en tillgÄng frÄn projektet till paketet med Unity öppen, kommer dess funktionalitet att bevaras, och referenser i beroende tillgÄngar kommer att börja anvÀnda tillgÄngen frÄn paketet.

Det Àr viktigt: vid kopiering av en tillgÄng frÄn projektet till paketet uppstÄr konflikten "Paket - projekt", som beskrivits i avsnittet ovan.

Möjliga lösningar pÄ konflikter

  1. Omdefiniera GUID:er med egna algoritmer vid import av alla tillgÄngar för att undvika kollisioner.
  2. Samla alla tillgÄngar i ett projekt och dela dem upp i paket senare.
  3. Skapa en databas som innehÄller GUID:erna för alla tillgÄngar och validera vid sÀndning av paket.

Slutsats

UPM Àr en ny lösning för distribution av gemensamma resurser pÄ Unity, som kan bli ett vÀrdigt alternativ till befintliga metoder. Riktlinjerna som beskrivs i artikeln har kommit fram genom verkliga fall. Vi hoppas att de Àr till hjÀlp.

KĂ€lla: habr.com

Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster