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.

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. â 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.

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.

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 . Ka një përshkrim të detajuar , dhe për ta nisur do të nevojiten vetëm disa komanda.
Konfigurimi i mjedisit
Së pari, duhet të instaloni .
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:
- 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:
{ "name": "com.plarium.somepackage", "displayName": "Some Package", "version": "1.0.0", "description": "Some Package Description", "keywords": [ "Unity", "UPM" ], "author": "AUTHOR", "license": "UNLICENSED" } - 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:
- Të shtoni në skedën
manifest.jsoninformacionin mbi burimet e paketave. Për këtë, është e nevojshme të shtoni pronënscopedRegistriesdhe 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" ] } ] - Shkoni në Unity dhe hapni dritaren e Package Manager (puna me paketat e personalizuara nuk ndryshon nga puna me ato të integruara).
- Zgjidhni TĂ« Gjitha Paketat.
- Gjeni paketën e nevojshme dhe shtoni atë.

Puna me kodet burimore dhe debugimi
Për të lidhur kodet burimore me projektin, është e nevojshme të krijoni 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:

Skripti nga paketa me një pikë ndërprerjeje funksionale:

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:
- Të kaloni në paketën në cache-n e paketave.

- Të bëni ndryshimet e nevojshme.
- Të përditësoni versionin në skedën
package.json. - Të dërgoni paketën
npm publish --registry *adresa e depozitës së paketave*. - 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:
- 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.
- 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
- Rinegjistrimi i GUID'ëve sipas algoritme vetjake gjatë importimit të të gjitha aseteve, për të shmangur kolizionet.
- Shtimi i të gjitha aseteve në një projekt dhe ndarja e tyre në paketat më vonë.
- 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

