Unity Package Manager

Unity — njĂ« platformĂ« qĂ« egziston prej kohĂ«sh dhe vazhdon tĂ« zhvillohet. MegjithatĂ«, punimi me disa projekte njĂ«kohĂ«sisht ende mund tĂ« sjellĂ« vĂ«shtirĂ«si nĂ« pĂ«rdorimin e burimeve tĂ« pĂ«rbashkĂ«ta (.cs), bibliotekave (.dll) dhe aseteve tĂ« tjera (imazhe, tinguj, modele, prefabs). NĂ« kĂ«tĂ« artikull do tĂ« ndajmĂ« pĂ«rvojĂ«n tonĂ« pĂ«r tĂ« zgjidhur natyrshĂ«m kĂ«tĂ« problem nĂ« Unity.

Unity Package Manager

Metodat e shpërndarjes së burimeve të përbashkëta

Ka më shumë se një mënyrë për të përdorur burime të përbashkëta për projekte të ndryshme, por secili qasje ka avantazhet dhe disavantazhet e saj.

1. Dublimi — «me duar» dubloni burimet mes projekteve.

Avantazhet:

  • PĂ«rshtatet pĂ«r tĂ« gjitha llojet e burimeve.
  • Nuk ka probleme me varĂ«sitĂ«.
  • Nuk ka probleme me GUID-tĂ« e aseteve.

Disavantazhet:

  • Repo tĂ« mĂ«dha.
  • Nuk ka mundĂ«si versionimi.
  • VĂ«shtirĂ«si nĂ« ndjekjen e ndryshimeve nĂ« burimet e pĂ«rbashkĂ«ta.
  • VĂ«shtirĂ«si nĂ« pĂ«rditĂ«simin e burimeve tĂ« pĂ«rbashkĂ«ta.

2. Git submodules — shpĂ«rndarja e burimeve tĂ« pĂ«rbashkĂ«ta pĂ«rmes nĂ«nmodulave tĂ« jashtĂ«m.

Avantazhet:

  • Mund tĂ« punoni me burime tĂ« kodit.
  • Mund tĂ« shpĂ«rndahen asete.
  • Nuk ka probleme me varĂ«sitĂ«.

Disavantazhet:

  • Nevojitet aftĂ«sia pĂ«r tĂ« punuar me Git.
  • Git nuk Ă«shtĂ« shumĂ« miqĂ«sor ndaj skedarĂ«ve binarĂ« — do tĂ« duhet tĂ« aktivizoni LFS.
  • ShkĂ«putja e aksesit pĂ«r repo.
  • VĂ«shtirĂ«si nga pĂ«rmirĂ«simi dhe ulja e versionit.
  • Mund tĂ« ndodhin kolizione GUID-esh dhe nuk ka sjellje tĂ« qartĂ« nga ana e Unity pĂ«r zgjidhjen e tyre.

3. NuGet — shpĂ«rndarja e bibliotekave tĂ« pĂ«rbashkĂ«ta pĂ«rmes paketimeve NuGet.

Avantazhet:

  • PunĂ« e lehtĂ« me projekte qĂ« nuk varen nga Unity.
  • Versionim dhe zgjidhje varĂ«sish e lehtĂ«.

Disavantazhet:

  • Unity nuk di tĂ« punojĂ« me paketet NuGet «nga kutia» (nĂ« GitHub mund tĂ« gjeni Menaxherin e Paketeve NuGet pĂ«r Unity, qĂ« e ndihmon kĂ«tĂ«, por ka nuanca).
  • VĂ«shtirĂ«si gjatĂ« shpĂ«rndarjes sĂ« llojeve tĂ« tjera tĂ« aseteve.

4. Menaxher i Paketave Unity — shpĂ«rndarja e burimeve tĂ« pĂ«rbashkĂ«ta pĂ«rmes zgjidhjes sĂ« natyrshme pĂ«r Unity.

Avantazhet:

  • NdĂ«rfaqe natyrore pĂ«r punĂ«n me paketa.
  • Mbrojtja nga rinovimi i skedave .meta nĂ« paketa gjatĂ« kolizioneve me GUID-tĂ«.
  • MundĂ«sia e versionimit.
  • MundĂ«sia e shpĂ«rndarjes sĂ« tĂ« gjitha llojeve tĂ« burimeve pĂ«r Unity.

Disavantazhet:

  • Akoma mund tĂ« ndodhin konflikte GUID-esh.
  • Nuk ka dokumentacion pĂ«r implementim.

Mënyra e fundit ka më shumë përparësi sesa disavantazhe. Megjithatë, ajo aktualisht nuk është shumë popullore për shkak të mungesës së dokumentacionit, dhe për këtë arsye ne do ta shqyrtojmë atë në detaje.

Unity Package Manager

Menaxheri i Paketave Unity (më pas UPM) është një mjet për menaxhimin e paketimeve. Ai u shtua në Unity 2018.1 dhe u përdor vetëm për paketat e zhvilluara nga Unity Technologies. Megjithatë, duke filluar nga versioni 2018.3, ra mundësia e shtimit të paketimeve të personalizuara.

Unity Package Manager
Ndërfaqja e Menaxherit të Paketave Unity

Paketa nuk hyjnë në kodin burimor të projektit (direktorinë Assets). Ato ndodhen në një direktor të veçantë %projectFolder%/Library/PackageCache dhe nuk ndodhin fare në projekt, përmendja e tyre e vetme në kodin burimor është në skedarin packages/manifest.json.

Unity Package Manager
Paketa në sistemin e skedarëve të projektit

Burimet e paketa

UPM mund të përdorë disa burime paketa:

1. Sistemi i skedarëve.

Avantazhet:

  • ShpejtĂ«si implementimi.
  • Nuk kĂ«rkon mjete tĂ« jashtme.

Disavantazhet:

  • VĂ«shtirĂ«si nĂ« versionim.
  • Nevojitet qasje e pĂ«rbashkĂ«t nĂ« sistemin e skedarĂ«ve pĂ«r tĂ« gjithĂ« ata qĂ« punojnĂ« me projektin.

2. Repository Git.

Avantazhet:

  • KĂ«rkohet vetĂ«m repository Git.

Disavantazhet:

  • Nuk mund tĂ« kalosh mes versioneve pĂ«rmes dritares UPM.
  • Nuk funksionon me tĂ« gjitha repository Git.

3. Repository npm.

Avantazhet:

  • PlotĂ«sisht mbĂ«shtet funksionalitetin e UPM dhe pĂ«rdoret pĂ«r shpĂ«rndarjen e paketave zyrtare tĂ« Unity.

Disavantazhet:

  • Aktualisht injoron tĂ« gjitha versionet string tĂ« paketimeve, pĂ«rveç «-preview».

Më poshtë do të shqyrtojmë implementimin e UPM + npm. Kjo lidhje është e përshtatshme, pasi lejon punën me të gjitha llojet e burimeve dhe menaxhimin e versioneve të paketimeve, si dhe mbështetje të plotë për ndërfaqen natyrore UPM.

Si repository npm mund të përdoret Verdaccio. Ka një përshkrim të detajuar dokumentacija, dhe për ta nisur do të nevojiten vetëm disa komanda.

Konfigurimi i mjedisit

Së pari, duhet të instaloni node.js.

Krijimi i paketës

Për të krijuar një paketë, duhet të vendosni skedarin package.json, i cili do ta përshkruajë atë, në direktorinë e përmbajtjes së kësaj pakete. Duhet të bëni si më poshtë:

Shkoni në direktorinë e projektit, të cilën dëshironi ta bëni paketë.

Ekzekutoni komandën npm init dhe gjatë dialogut jepni vlerat e nevojshme. Për name jepni emrin në formatin e rreth të kundërt të domenit, për shembull com.plarium.somepackage.
PĂ«r njĂ« paraqitje tĂ« rehatshme tĂ« emrit tĂ« paketĂ«s — shtoni pronĂ«n displayName nĂ« package.json dhe plotĂ«soni atĂ«.

Duke qenë se npm është i orientuar ndaj js, skedari ka disa prona që nuk na duhen, si main dhe scripts, të cilat Unity nuk i përdor. Më mirë t'i fshini ato, që të mos ndoten përshkrimi i paketës. Skedari duhet të duket diçka si kjo:

  1. Shkoni në direktorinë e projektit, të cilën dëshironi ta bëni paketë.
  2. Ekzekutoni komandën npm init dhe gjatë dialogut jepni vlerat e nevojshme. Për name jepni emrin në formatin e rreth të kundërt të domenit, për shembull com.plarium.somepackage.
  3. PĂ«r njĂ« paraqitje tĂ« rehatshme tĂ« emrit tĂ« paketĂ«s — shtoni pronĂ«n displayName nĂ« package.json dhe plotĂ«soni atĂ«.
  4. Duke qenë se npm është i orientuar ndaj js, skedari ka disa prona që nuk na duhen, si main dhe scripts, të cilat Unity nuk i përdor. Më mirë t'i fshini ato, që të mos ndoten përshkrimi i paketës. Skedari duhet të duket diçka si kjo:
    {
     "name": "com.plarium.somepackage",
     "displayName": "Some Package",
     "version": "1.0.0",
     "description": "Some Package Description",
     "keywords": [
       "Unity",
       "UPM"
     ],
     "author": "AUTHOR",
     "license": "UNLICENSED"
    }

  5. Hapni Unity dhe krijoni një skedë .meta për package.json (Unity nuk sheh asetet pa skedat .meta, paketat për Unity hapen vetëm për lexim).

Dërgimi i paketës

Për të dërguar paketën, duhet të kryeni komandën: npm publish --registry *adresa e depozitës së paketave*.

Instalimi dhe përditësimi i paketimeve përmes Unity Package Manager

Për të shtuar një paketë në projektin Unity, duhet:

  1. Të shtoni në skedën manifest.json informacionin mbi burimet e paketave. Për këtë, është e nevojshme të shtoni pronën scopedRegistries dhe të tregoni skopet dhe adresën e burimit, ku do të kërkohen skopet specifike.
    
    "scopedRegistries": [
       {
         "name": "Main",
         "url": "adresa e depozitës së paketave",
         "scopes": [
           "com.plarium"
         ]
       }
     ]
    
  2. Shkoni në Unity dhe hapni dritaren e Package Manager (puna me paketat e personalizuara nuk ndryshon nga puna me ato të integruara).
  3. Zgjidhni TĂ« Gjitha Paketat.
  4. Gjeni paketën e nevojshme dhe shtoni atë.

Unity Package Manager

Puna me kodet burimore dhe debugimi

Për të lidhur kodet burimore me projektin, është e nevojshme të krijoni Assembly Definition për paketën.

Përdorimi i paketave nuk e kufizon mundësinë për debugim. Megjithatë, gjatë punës me paketat në Unity, nuk është e mundur të kaloni në IDE me një klik mbi gabimin në konsolë, nëse gabimi ndodhi në paketë. Kjo është për shkak se Unity nuk i sheh skriptet si skedarë të veçantë, pasi kur përdoren Assembly Definition ato organizohen në një bibliotekë dhe lidhen me projektin. Gjatë punës me kodet burimore nga projekti, kalimi në IDE me një klik është i disponueshëm.

Skripti në projektin me paketën e lidhur:

Unity Package Manager
Skripti nga paketa me një pikë ndërprerjeje funksionale:

Unity Package Manager

Ndërhyrje urgjente në paketat

Paketat e bashkëngjitura në projektin Unity janë vetëm për lexim, por mund të modifikohen në cache-n e paketave. Për këtë, është e nevojshme:

  1. Të kaloni në paketën në cache-n e paketave.

    Unity Package Manager

  2. Të bëni ndryshimet e nevojshme.
  3. Të përditësoni versionin në skedën package.json.
  4. Të dërgoni paketën npm publish --registry *adresa e depozitës së paketave*.
  5. Të përditësoni versionin e paketës në versionin e rregulluar përmes ndërfaqes UPM.

Konfliktet e importit të paketave

Gjatë importimit të paketave mund të ndodhin konflikte të mëposhtme me GUID'ët:

  1. Paketë - paketë. Nëse gjatë importimit të një pakete zbulohet se në paketat e tashme ka asete me të njëjtin GUID, asetet me GUID të përputhura nga paketa e importuar nuk do të shtohen në projekt.
  2. Paketë - projekt. Nëse gjatë importimit të një pakete zbulohet se në projekt ka asete me GUID të përputhura, atëherë asetet nga paketa nuk do të shtohen në projekt. Megjithatë, asetet që varen prej tyre do të fillojnë të përdorin asetet nga projekti.

Transferimi i aseteve nga projekti në paketë

Nëse transferoni një aset nga projekti në paketë gjatë kohës që Unity është hapur, atëherë funksionaliteti i tij do të ruhet, dhe lidhjet në asetet e varura do të fillojnë të përdorin asetet nga paketa.

E rëndësishme: gjatë kopjimit të asetet nga projekti në paketë do të ndodhë një konflikt "Paketë - projekt", siç përshkruhet në seksionin më sipër.

Zgjidhjet e mundshme të konflikteve

  1. Rinegjistrimi i GUID'ëve sipas algoritme vetjake gjatë importimit të të gjitha aseteve, për të shmangur kolizionet.
  2. Shtimi i të gjitha aseteve në një projekt dhe ndarja e tyre në paketat më vonë.
  3. Krijimi i një databaze që përmban GUID'ët e të gjitha aseteve dhe zhvillimi i një validimi gjatë dërgimit të paketimeve.

Përfundimi

UPM është një zgjidhje e re për shpërndarjen e burimeve të zakonshme në Unity, që mund të bëhet një alternativë e denjë për metodat ekzistuese. Rekomandimet e përshkruara në këtë artikull lindën nga raste reale. Shpresojmë se ato do t'ju duken të dobishme.

Burimi: habr.com

Bleni hostim tĂ« besueshĂ«m pĂ«r faqe me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Bleni hostim tĂ« besueshĂ«m pĂ«r faqe me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster