Unity Package Manager

Unity — platvorm, mis on olemas olnud juba mõnda aega ja pidevalt areneb. Siiski, töötades selle keskkonna all mitmete projektidega, võib endiselt sattuda keerukusteni, mis on seotud ühiste allikate (.cs), raamatukogude (.dll) ja muude varade (pildid, helid, mudelid, prefabricated) kasutamisega. Selles artiklis jagame oma kogemust natiivse lahenduse osas selle probleemi lahendamiseks Unitys.

Unity Package Manager

Ühiste ressursside levitamise meetodid

Ühiste ressursside kasutamiseks erinevates projektides on rohkem kui üks viis, kuid igal lähenemisel on omad eelised ja puudused.

1. Dubleerimine — „kätega” dubleerime ressursid projektide vahel.

Plussid:

  • Sobib igat tüüpi ressursside jaoks.
  • Pole probleeme sõltuvustega.
  • Pole probleeme ressursi GUID'idega.

Miinused:

  • Hiiglaslikud hoidlad.
  • Versioonihalduse võimalused puuduvad.
  • Raskused ühisressursside muudatuste jälgimisel.
  • Raskused ühisressursside uuendamisel.

2. Git alamhulgad — ühiste ressursside levitamine läbi välistest alamhulkadest.

Plussid:

  • Saab töötada allikatega.
  • Saab levitada varasid.
  • Pole probleeme sõltuvustega.

Miinused:

  • Vajalik on Git teadmiste oskus.
  • Git ei ole väga sõbralik binaarsete failide suhtes — tuleb kasutada LFS'i.
  • Repoortide juurdepääsu piiramine.
  • Versiooni suurendamise ja vähendamisega seotud keerukused.
  • GUID'ide konfliktid on võimalikud ning Unity käitumine nende lahendamisel ei ole üheselt mõistetav.

3. NuGet — üldiste raamatukogude levitamine NuGet-pakettide kaudu.

Plussid:

  • Mugav töö projektidega, mis ei sõltu Unity'st.
  • Mugav versioneerimine ja sõltuvuste lahendamine.

Miinused:

  • Unity ei suuda NuGet-pakette «välja kasta» töötada (GitHubist on võimalik leida NuGet Package Manager for Unity, mis seda parandab, kuid seal on nüansse).
  • Muude varade levitamisega seotud keerukused.

4. Unity Package Manager — üldiste ressursside levitamine Unity sisemise lahenduse kaudu.

Plussid:

  • Pakkide haldamiseks mõeldud natiivne liides.
  • Kaitse .meta failide ülekirjutamise eest pakettides GUID'ide konfliktide korral.
  • Versioneerimise võimalus.
  • Võimalus levitada kõiki ressursse Unity jaoks.

Miinused:

  • GUID'ide konfliktid võivad endiselt esineda.
  • Rakendamiseks puudub dokumentatsioon.

Viimane meetod omab rohkem eeliseid kui puudusi. Siiski ei ole see praegu väga populaarne dokumentatsiooni puudumise tõttu, mistõttu käsitleme seda üksikasjalikult.

Unity Package Manager

Unity Package Manager (edasi UPM) on pakettide haldamise tööriist. See lisati Unity 2018.1 ja seda kasutati algselt ainult Unity Technologies'i arendatud pakettide jaoks. Alates 2018.3 versioonist on saadaval võimalus lisada kohandatud pakette.

Unity Package Manager
Unity Package Manageri liides

Pakette ei salvestata projekti allikatesse (Assets kataloog). Need asuvad eraldi kataloogis. %projectFolder%/Library/PackageCache ja nad ei mõjuta projekti, nende ainus mainimine allikates on failis. packages/manifest.json.

Unity Package Manager
Pakettide asukohad projekti failisüsteemis

Pakettide allikad

UPM võib kasutada mitmeid pakettide allikaid:

1. Failisüsteem.

Plussid:

  • Rakenduse kiirus.
  • Ei nõua kolmandate osapoolte tööriistu.

Miinused:

  • Versioonihalduse keerukus.
  • Vajalik on üldine juurdepääs failisüsteemile kõigile, kes projektiga töötavad.

2. Git-repositoorium.

Plussid:

  • Nõutakse ainult Git-repositooriumit.

Miinused:

  • Ei saa vahetada versioonide vahel UPM aknas.
  • Ei toimi kõigi Git-repostitega.

3. npm-repositoorium.

Plussid:

  • Täielikult toetab UPM funktsionaalsust ja seda kasutatakse Unity ametlike pakettide levitamiseks.

Miinused:

  • Praeguseks ignoreerib see kõiki pakettide stringiversioone, välja arvatud '-preview'.

Allpool vaatame UPM + npm rakendust. See kombinatsioon on mugav, kuna see võimaldab töötada erinevate ressursitüüpidega ja hallata paketiversioone, samuti toetab täielikult kohandatud UPM liidest.

npm-repositoryna saab kasutada Verdaccio. Selle kohta on olemas põhjalik dokumentatsioon, ja selle käivitamiseks on vaja vaid paar käsku.

Keskkonna seadistamine

Esiteks tuleb installida node.js.

Paketi loomine

Paketi loomiseks tuleb lisada fail package.json, mis seda kirjeldab, paketi sisu katalooge. Tuleb teha järgmist:

Minna projekti kataloogi, mille tahame paketiks muuta.

Käivita käsk npm init ja dialooge järgides sisesta vajalikud väärtused. Nime jaoks märgi rikka nime formaadis, näiteks com.plarium.somepackage.
Paketi nime mugavaks kuvamiseks — lisa omadus displayName failile package.json ja täida see.

Kuna npm on js-orienteritud, siis fail sisaldab meile mittevajalikke omadusi main ja scripts, mida Unity ei kasuta. Paremini on need eemaldada, et mitte segada paketi kirjeldust. Fail peaks välja nägema umbes selline:

  1. Minna projekti kataloogi, mille tahame paketiks muuta.
  2. Käivita käsk npm init ja dialooge järgides sisesta vajalikud väärtused. Nime jaoks märgi rikka nime formaadis, näiteks com.plarium.somepackage.
  3. Paketi nime mugavaks kuvamiseks — lisa omadus displayName failile package.json ja täida see.
  4. Kuna npm on js-orienteritud, siis fail sisaldab meile mittevajalikke omadusi main ja scripts, mida Unity ei kasuta. Paremini on need eemaldada, et mitte segada paketi kirjeldust. Fail peaks välja nägema umbes selline:
    {
     "name": "com.plarium.somepackage",
     "displayName": "Some Package",
     "version": "1.0.0",
     "description": "Some Package Description",
     "keywords": [
       "Unity",
       "UPM"
     ],
     "author": "AUTHOR",
     "license": "UNLICENSED"
    }

  5. Ava ühtsust Unity ja genereeri .meta fail package.json jaoks (Unity ei näe varasid ilma .meta failideta, pakette Unitys avatakse ainult lugemisrežiimis).

Paketi saatmine

Paketi saatmiseks tuleb käivitada käsk: npm publish --registry *pakettide hoidla aadress*.

Pakettide installimine ja värskendamine läbi Unity Package Manageri

Paketi lisamiseks Unity projekti tuleb:

  1. Töötada välja fail manifest.json pakettide allika teave. Selle jaoks tuleb lisada omadus scopedRegistries ja määrata ulatused ning allika aadress, kust otsitakse konkreetseid ulatusi.
    
    "scopedRegistries": [
       {
         "name": "Main",
         "url": "pakettide hoidla aadress",
         "scopes": [
           "com.plarium"
         ]
       }
     ]
    
  2. Mine Unitys ja avage Package Manageri aken (kohandatud pakettidega töötamine ei erine sisseehitatud pakettidega töötamisest).
  3. Vali All Packages.
  4. Leia vajalik pakett ja lisa see.

Unity Package Manager

Töötamine lähtekoodide ja tõrkeotsinguga

Et lähtekoodid projekti ühenduksid, tuleb luua Assembly Definition paketi jaoks.

Pakettide kasutamine ei piira silumise võimalusi. Siiski, kui töötate Unity pakettidega, ei saa te konsolil klõpsates IDE-sse hüpata, kui viga on tekkinud paketist. See on tingitud sellest, et Unity ei näe skripte eraldi failidena, kuna Assembly Definitioni kasutamisel kogutakse need raamatukokku ja lisatakse projekti. Kui töötate projekti allikatega, on klõpsamine IDE-sse saadaval.

Skript projektis, kus paketid on ühendatud:

Unity Package Manager
Skript paketist, millel on toimiv katkestuspunkt:

Unity Package Manager

Kiired muudatused pakettidesse

Projektile lisatud Unity paketid on ainult lugemiseks, kuid neid saab muuta paketikaustas. Selleks on vajalik:

  1. Minge paketti paketikaustas.

    Unity Package Manager

  2. Tehke vajalikud muudatused.
  3. Uuendage versioon faili package.json.
  4. Saatke pakkett npm publish --registry *pakettide hoidla aadress*.
  5. Uuendage paketi versioon parandustega UPM liideses.

Pakettide importimise konfliktid

Pakettide importimisel võivad esineda järgmised GUID konfliktid:

  1. Pakkett — pakkett. Kui paketi importimisel ilmneb, et juba lisatud pakettides on varasid sama GUID-iga, ei lisata importitava paketi sama GUID-iga varasid projekti.
  2. Paket — projekt. Kui paketi importimisel tuvastatakse, et projektis on varasid, mille GUID’id kattuvad, siis paketi varasid projekti ei lisata. Siiski hakkavad projekti varad kasutama paketi varasid.

Varade üleviimine projektist paketti

Kui viia vara projektist paketti avatud Unity's, siis tal säilib oma funktsionaalsus ja sõltuvustes olevad varad hakkavad kasutama vara paketist.

Oluline: vara kopeerimisel projektist paketti tekib konflikt „Paket — projekt”, nagu on kirjeldatud ülaltoodud jaotis.

Konfliktide võimalikud lahendused

  1. GUID’ide määramine vastavalt enda algoritmidele kõigi varade importimisel, et vältida kokkupõrkeid.
  2. Koguvarade lisamine ühte projekti nende edasise jaotamisega pakettideks.
  3. Andmebaasi loomine, mis sisaldab kõigi varade GUID’e, ja valideerimise teostamine pakettide saatmisel.

Kokkuvõte

UPM — uus lahendus ühiste ressursside levitamiseks Unity's, mis võib olla väärikas alternatiiv olemasolevatele meetoditele. Artiklis toodud soovitused on tulnud reaalsest kogemusest. Loodame, et need osutuvad kasulikuks.

Allikas: habr.com

Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster