Unity — një platformë që ekziston prej një kohe të gjatë dhe vazhdon të zhvillohet. Megjithatë, duke punuar me disa projekte njëkohësisht, ende mund të ndeshni vështirësi në përdorimin e burimeve të përbashkëta (.cs), bibliotekave (.dll) dhe aseteve të tjera (imazhe, tinguj, modele, prefabrikate). Në këtë artikull do të flasim për përvojën tonë në zgjidhjen native të këtij problemi për Unity.

Metodat e shpërndarjes së burimeve të përbashkëta
Ekzistojnë më shumë se një mënyrë për të përdorur burime të përbashkëta për projekte të ndryshme, por çdo qasje ka avantazhet dhe disavantazhet e saj.
1. Dublimi — "duke u bërë" dublimin e burimeve mes projekteve.
Avantazhet:
- Përshtatet për të gjitha llojet e burimeve.
- Nuk ka probleme me varësitë.
- Nuk ka probleme me GUID-at e aseteve.
Disavantazhet:
- Repo të mëdha.
- Nuk ka mundësi për versionim.
- 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 burimet burimore.
- Mund të shpërndani asete.
- Nuk ka probleme me varësitë.
Disavantazhet:
- Kërkon aftësi në përdorimin e Git.
- Git nuk është shumë i përputhshëm me skedarët binar — do t'ju duhet të aktivizoni LFS.
- Shkëputja e aksesit për repot.
- Vështirësi me rritjen dhe uljen e versioneve.
- Mund të ndodhin kolizionet e GUID-eve dhe nuk ka një sjellje të qartë nga ana e Unity për t’i zgjidhur ato.
3. NuGet — shpërndarja e bibliotekave të përbashkëta përmes paketeve NuGet.
Avantazhet:
- Punë e leverdishme me projekte që nuk varen nga Unity.
- Versionim i lehtë dhe zgjidhje e varësive.
Disavantazhet:
- Unity nuk e menaxhon dot paketat NuGet "nga fabrika" (në GitHub mund të gjeni Menaxherin e Paketave NuGet për Unity, i cili e rregullon këtë, por ka nuanca).
- Vështirësi në shpërndarjen e llojeve të tjera të aseteve.
4. Menaxheri i Paketave të Unity — shpërndarja e burimeve të përbashkëta përmes një zgjidhjeje native për Unity.
Avantazhet:
- Interfejsi native për punën me paketa.
- Mbrojtja nga ri-shkruajtja e skedarëve .meta në paketa në rast të kolizionit të GUID-eve.
- Mundësia e versionimit.
- Mundësia për shpërndarjen e të gjitha llojeve të burimeve për Unity.
Disavantazhet:
- Ende mund të ndodhin konflikte GUID-e.
- Nuk ka dokumentacion për implementimin.
Mënyra e fundit ka më shumë përfitime se disavantazhe. Megjithatë, momentalisht nuk është shumë i popullarizuar për shkak të mungesës së dokumentacionit, dhe për këtë arsye do të ndalemi në të në detaje.
Menaxheri i Paketave të Unity
Menaxheri i Paketave Unity (më pas UPM) është një mjet për menaxhimin e pakove. Ai u shtua në Unity 2018.1 dhe është përdorur vetëm për paketat që ishin zhvilluar nga Unity Technologies. Megjithatë, që nga versioni 2018.3, u krijua mundësia për të shtuar paketa të personalizuara.

Ndërfaqja e Menaxherit të Paketave Unity
Paketat nuk përfshihen në kodin burimor të projektit (direktoria Assets). Ato ndodhen në një direktori të veçantë %projectFolder%/Library/PackageCache dhe nuk kanë asnjë ndikim në projekt, përmendja e vetme e tyre në kodin burimor është në skedarin packages/manifest.json.

Paketat në sistemin e skedarëve të projektit
Burimet e pakove
UPM mund të përdorë disa burime pakosh:
1. Sistemi i skedarëve.
Avantazhet:
- Shpejtësia e zbatimit.
- Nuk kërkon mjete të jashtme.
Disavantazhet:
- Vështirësia në versionim.
- Kërkohet qasje e përbashkët në sistemin e skedarëve për të gjithë ata që punojnë me projektin.
2. Repozitori Git.
Avantazhet:
- Kërkohet vetëm një repo Git.
Disavantazhet:
- Nuk mund të kaloni midis versioneve përmes dritares UPM.
- Nuk funksionon me të gjithë repozitorët Git.
3. Repozitori 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ë pakove, përveç «-preview».
Më poshtë do të shqyrtojmë zbatimin e UPM + npm. Kjo lidhje është e përshtatshme pasi lejon punën me çdo lloj burimi dhe menaxhimin e versioneve të pakove, si dhe plotësisht mbështet ndërfaqen nativ të UPM.
Si një repo npm mund të përdoret . Ka dokumentacion të detajuar , dhe për ta nisur do të nevojiten vetëm disa komanda.
Konfigurimi i mjedisit
Për të filluar duhet të instaloni .
Krijimi i paketës
Për të krijuar një paketë, është e nevojshme 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 vijon:
Të kaloni në direktorinë e projektit, që dëshironi ta bëni paketë.
Të ekzekutoni komandën npm init dhe gjatë dialogut të vendosni vlerat e nevojshme. Për emrin, tregoni një emër në formatin e reversit të domainit, për shembull com.plarium.somepackage.
Për një shfaqje më të lehtë 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, në skedar ka disa prona të panevojshme main dhe scripts, të cilat Unity nuk i përdor. Është më mirë t’i hiqni ato, për të mos e mbushur përshkrimin e paketës. Skedari duhet të duket kështu:
- Të kaloni në direktorinë e projektit, që dëshironi ta bëni paketë.
- Të ekzekutoni komandën npm init dhe gjatë dialogut të vendosni vlerat e nevojshme. Për emrin, tregoni një emër në formatin e reversit të domainit, për shembull com.plarium.somepackage.
- Për një shfaqje më të lehtë 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, në skedar ka disa prona të panevojshme main dhe scripts, të cilat Unity nuk i përdor. Është më mirë t’i hiqni ato, për të mos e mbushur përshkrimin e paketës. Skedari duhet të duket kështu:
{ "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 krijo një skedar .meta për package.json (Unity nuk i 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ë ekzekutosh komandën: npm publish --registry *adresa e depozitës së pakove*.
Instalimi dhe azhurnimi i pakove përmes Menaxherit të Pakove të Unity
Për të shtuar një paketë në projektin Unity, duhet:
- Të bësh ndryshime në skedarin
manifest.jsoninformacionin mbi burimet e pakove. Për këtë, duhet të shtosh pronënscopedRegistriesdhe të specifikosh skopet dhe adresën e burimit, ku do të kërkohen skopet e caktuara."scopedRegistries": [ { "name": "Main", "url": "adresa e depozitës së pakove", "scopes": [ "com.plarium" ] } ] - Kaloni në Unity dhe hapni dritaren e Menaxherit të Pakove (puna me paketat personalizuar nuk ndryshon nga puna me ato të ndërtuara brenda).
- Zgjidhni Të gjitha Paketat.
- Gjeni paketën e nevojshme dhe shtoni atë.

Puna me burime dhe debugimi
Për të lidhur burimet me projektin, duhet të krijosh për paketën.
Përdorimi i pakove nuk kufizon mundësitë për debugim. Sidoqoftë, kur punoni me pakot në Unity, nuk mund të kaloni në IDE duke klikuar mbi një gabim në konsolë, nëse gabimi ka ndodhur në paketë. Kjo vjen si rezultat i faktit se Unity nuk i sheh skritat si skedarë të veçantë, pasi që kur përdoren Definimet e Asamblesë, ato mblidhen në bibliotekë dhe lidhen me projektin. Kur punoni me burimet nga projekti, kalimi në IDE është i disponueshëm me një klik.
Skripti në projektin me paketën e lidhur:

Skripti nga paketa me një pikë ndalimi të funksionuar:

Një rregullim urgjent në paketa
Pakot e shtuar në projektin Unity janë të hapura vetëm për lexim, por ato mund të redaktohen në cache-in e pakove. Për këtë, duhet:
- Të kalosh në paketën në cache-in e pakove.

- Të bësh ndryshimet e nevojshme.
- Të azhurnosh versionin në skedarin
package.json. - Të dërgosh paketën
npm publish --registry *adresa e depozitës së pakove*. - Të azhurnosh versionin e paketës në versionin e rregulluar përmes ndërfaqes UPM.
Konkfliktet e importit të paketave
Gjatë importit të paketave, mund të ndodhin konfliktet e mëposhtme të GUID-eve:
- Paketë — paketë. Nëse gjatë importit të paketit zbulon se në paketat e already are janë aset me të njëjtin GUID, asetet me GUID të përputhshëm nga paketa e importuar nuk do të shtohen në projekt.
- Paketa është një projekt. Nëse gjatë importit të paketës zbulohen asete me GUID të njëjtë në projekt, asetet nga paketa nuk do të përfshihen në projekt. Megjithatë, asetet që varen nga to 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ë kur Unity është e hapur, funksionaliteti i tij do të ruhet, dhe lidhjet në asetet që varen do të fillojnë të përdorin asetin nga paketa.
Ëhtë e rëndësishme: gjatë kopjimit të një aseti nga projekti në paketë ndodhin konflikte "Paketë - projekt", të përshkruara në seksionin e mësipërm.
Zgjidhjet e mundshme të konflikteve
- Rinominimi i GUID-ve sipas algoritmeve të veta gjatë importit të të gjithë aseteve për të shmangur kolizionet.
- Shtimi i të gjithë aseteve në një projekt me ndarjen e mëvonshme në paketa.
- Krijimi i një baze të dhënash që përmban GUID-të e të gjithë aseteve dhe kryerja e validimit gjatë dërgimit të paketimeve.
Përfundim
UPM është një zgjidhje e re për shpërndarjen e burimeve të përbashkëta në Unity, e cila mund të jetë një alternativë e denjë për metodat ekzistuese. Rekomandimet e përshkruara në artikull kanë lindur nga raste reale. Shpresojmë që ato t'ju ndihmojnë.
Burimi: habr.com

