Unity hè una piattaforma chì hè stata per un bellu pezzu è hè in constante evoluzione. In ogni casu, quandu u travagliu in questu cù parechji prughjetti à u stessu tempu, pudete ancu scontru difficultà à utilizà fonti cumuni (.cs), biblioteche (.dll) è altri bè (imaghjini, soni, mudelli, prefabs). In questu articulu avemu da parlà di a nostra sperienza cù una suluzione nativa à un tali prublema per Unity.
Metodi di Distribuzione di Risorse Shared
Ci hè più di una manera d'utilizà risorse spartute per diversi prughjetti, ma ogni accostu hà i so pros è cuns.
1. Duplicazione - duplicemu risorse trà i prughjetti "a manu".
Pros:
- Adatta à tutti i tipi di risorse.
- Nisun prublema di dipendenza.
- Ùn ci sò micca prublemi cù i GUID di l'assi.
Cons:
- Repositori giganti.
- Ùn ci hè micca pussibilità di versioning.
- Difficultà à seguità i cambiamenti à e risorse spartute.
- Difficultà à aghjurnà e risorse spartute.
2.
Pros:
- Pudete travaglià cù e fonti.
- Pudete distribuisce l'assi.
- Nisun prublema di dipendenza.
Cons:
- Esperienza Git necessaria.
- Git ùn hè micca assai amichevule cù i schedarii binari - avete da cunnette LFS.
- Cuntrolla d'accessu per i repositori.
- Difficultà cù l'aghjurnamentu è u downgrading versioni.
- I scontri GUID sò pussibuli è ùn ci hè micca un cumpurtamentu chjaru da parte di Unity per risolve.
3. NuGet - distribuzione di biblioteche sparte per i pacchetti NuGet.
Pros:
- U travagliu convenientu cù prughjetti chì ùn dependenu micca di Unity.
- Versione conveniente è risoluzione di dipendenza.
Cons:
- Unity ùn pò micca travaglià cù pacchetti NuGet fora di a scatula (in GitHub pudete truvà NuGet Package Manager per Unity, chì risolve questu, ma ci sò qualchi sfumature).
- Difficultà in a distribuzione di altri tipi di assi.
4. Unity Package Manager - distribuzione di risorse spartute attraversu una suluzione nativa per Unity.
Pros:
- Interfaccia nativa per travaglià cù pacchetti.
- Prutezzione contr'à a sovrascrittura di i schedari .meta in pacchetti per via di cunflitti GUID.
- Possibilità di versioning.
- Capacità di distribuisce tutti i tipi di risorse per Unity.
Cons:
- I cunflitti GUID ponu sempre accade.
- Ùn ci hè micca documentazione per l'implementazione.
L'ultimu metudu hà più vantaghji chì disadvantages. Tuttavia, ùn hè micca assai pupulare avà per via di a mancanza di ducumentazione, è per quessa avemu da esse in u dettu.
Unity Package Manager
Unity Package Manager (UPM) hè un strumentu di gestione di pacchetti. Hè stata aghjunta in Unity 2018.1 è hè stata utilizata solu per i pacchetti sviluppati da Unity Technologies. Tuttavia, cuminciendu cù a versione 2018.3, hè diventatu pussibule di aghjunghje pacchetti persunalizati.
Unity Package Manager Interfaccia
I pacchetti ùn finiscinu micca in i fonti di u prugettu (directory Assets). Sò in un repertoriu separatu %projectFolder%/Library/PackageCache
è ùn affettanu u prughjettu in ogni modu, a so sola menzione in u codice fonte hè in u schedariu packages/manifest.json
.
Pacchetti in u sistema di schedariu di prughjettu
Fonti di pacchettu
UPM pò aduprà parechje fonti di pacchetti:
1. Sistema di schedari.
Pros:
- Velocità di implementazione.
- Ùn hè micca bisognu di strumenti di terzu partitu.
Cons:
- Difficultà in a versione.
- L'accessu cumunu à u sistema di fugliale hè necessariu per tutti chì travaglianu cù u prugettu.
2. Repositoriu Git.
Pros:
- Tuttu ciò chì avete bisognu hè un repository Git.
Cons:
- Ùn pudete micca cambià trà e versioni attraversu a finestra UPM.
- Ùn funziona micca cù tutti i repositori Git.
3. repository npm.
Pros:
- Supporta cumplettamente a funziunalità UPM è hè utilizatu per distribuisce pacchetti ufficiali Unity.
Cons:
- Attualmente ignora tutte e versioni di stringa di pacchetti eccettu "-preview".
Quì sottu, guardemu l'implementazione UPM + npm. Stu bundle hè cunvene perchè vi permette di travaglià cù qualsiasi tipu di risorsa è gestisce e versioni di pacchettu, è ancu sustene cumplettamente l'interfaccia UPM nativa.
Pudete aduprà cum'è un repository npm
Stabbilimentu di l'ambiente
Prima vi tuccherà à stallà
Crià un pacchettu
Per creà un pacchettu, avete bisognu di mette u schedariu package.json
, chì u descriverà, à u cartulare cù u cuntenutu di stu pacchettu. Avete bisognu di fà i seguenti:
Andà à u cartulare di u prughjettu chì vulemu fà un pacchettu.
Eseguite u cumandimu npm init è inserite i valori richiesti durante u dialogu. Per nome, specificate u nome in formatu di duminiu inversu, per esempiu com.plarium.somepackage.
Per vede convenientemente u nome di u pacchettu, aghjunghje a pruprietà displayName à package.json è riempie.
Siccomu npm hè orientatu à js, u schedariu cuntene e proprietà principali è scripts chì ùn avemu micca bisognu, chì Unity ùn usa micca. Hè megliu sguassate per ùn sbulicà a descrizzione di u pacchettu. U schedariu deve esse simile à questu:
- Andà à u cartulare di u prughjettu chì vulemu fà un pacchettu.
- Eseguite u cumandimu npm init è inserite i valori richiesti durante u dialogu. Per nome, specificate u nome in formatu di duminiu inversu, per esempiu com.plarium.somepackage.
- Per vede convenientemente u nome di u pacchettu, aghjunghje a pruprietà displayName à package.json è riempie.
- Siccomu npm hè orientatu à js, u schedariu cuntene e proprietà principali è scripts chì ùn avemu micca bisognu, chì Unity ùn usa micca. Hè megliu sguassate per ùn sbulicà a descrizzione di u pacchettu. U schedariu deve esse simile à questu:
{ "name": "com.plarium.somepackage", "displayName": "Some Package", "version": "1.0.0", "description": "Some Package Description", "keywords": [ "Unity", "UPM" ], "author": "AUTHOR", "license": "UNLICENSED" }
- Open Unity è generà un schedariu .meta per package.json (Unity ùn vede micca l'assi senza i schedari .meta, i pacchetti per Unity sò aperti solu in lettura).
Mandendu un pacchettu
Per mandà u pacchettu, avete bisognu di eseguisce u cumandimu: npm publish --registry *адрес до хранилища пакетов*
.
Installà è aghjurnà i pacchetti via Unity Package Manager
Per aghjunghje un pacchettu à un prughjettu Unity, avete bisognu:
- Aghjunghjite à u schedariu
manifest.json
infurmazione nantu à a fonte di i pacchetti. Per fà questu, avete bisognu di aghjunghje a pruprietàscopedRegistries
è indicà l'ambiti è l'indirizzu di l'urigine induve l'ambiti specifichi seranu cercati."scopedRegistries": [ { "name": "Main", "url": "адрес до хранилища пакетов", "scopes": [ "com.plarium" ] } ]
- Andate à Unità è apre a finestra di u Manager di Pacchetti (travaglià cù pacchetti persunalizati ùn hè micca sfarente di travaglià cù quelli integrati).
- Selezziunà tutti i pacchetti.
- Truvate u pacchettu chì avete bisognu è aghjunghje.
U travagliu cù fonti è debugging
Per esse cunnessi cù e fonti à u prugettu, avete bisognu di creà
L'usu di pacchetti ùn limita micca e vostre opzioni di debugging. Tuttavia, quandu travagliate cù pacchetti in Unity, ùn pudete micca andà à l'IDE clicchendu nantu à un errore in a cunsola se l'errore hè accadutu in u pacchettu. Questu hè duvuta à u fattu chì Unità ùn vede micca scripts cum'è schedarii separati, postu chì quandu si usanu a Definizione di l'Assemblea sò cullati in una biblioteca è inclusi in u prugettu. Quandu u travagliu cù fonti da un prughjettu, cliccà à l'IDE hè dispunibule.
Scrittura in un prughjettu cù un pacchettu cunnessu:
Scrittura da u pacchettu cù un breakpoint di travagliu:
Correzioni urgenti à i pacchetti
I pacchetti Unity aghjuntu à un prughjettu sò di sola lettura, ma ponu esse editati in a cache di u pacchettu. Per fà questu avete bisognu:
- Vai à u pacchettu in u pacchettu cache.
- Fate i cambiamenti necessarii.
- Aggiorna a versione in u schedariu
package.json
. - Mandate u pacchettu
npm publish --registry *адрес до хранилища пакетов*
. - Aghjurnate a versione di u pacchettu à a corretta via l'interfaccia UPM.
Cunflitti di impurtazione di pacchetti
I seguenti cunflitti GUID ponu accade quandu importate pacchetti:
- Pacchettu - pacchettu. Se, quandu importa un pacchettu, hè scupertu chì i pacchetti digià aghjuntu cuntenenu assi cù u stessu GUID, l'assi cù GUID currispondenti da u pacchettu impurtatu ùn saranu micca aghjuntu à u prugettu.
- Un pacchettu hè un prughjettu. Se, quandu importa un pacchettu, hè scupertu chì u prughjettu cuntene attivi cù GUID currispondenti, allora l'assi da u pacchettu ùn saranu micca aghjuntu à u prugettu. Tuttavia, l'assi chì dependenu di elli cumincianu à aduprà l'assi da u prugettu.
Trasferendu l'assi da un prughjettu à un pacchettu
Se trasferete un attivu da un prughjettu à un pacchettu mentre Unità hè aperta, a so funziunalità serà cunservata, è i ligami in l'attivu dipendente cumincianu à aduprà l'attivu da u pacchettu.
impurtanti: Quandu copiate un attivu da un prughjettu à un pacchettu, u cunflittu "Pacchettu - Prughjettu" deskrittu in a sezione di sopra si farà.
Possibili suluzione à i cunflitti
- Riassegnazione di GUID utilizendu i nostri algoritmi quandu importate tutti l'assi per eliminà e scontri.
- Aghjunghjite tutti l'assi à un prughjettu è poi dividite in pacchetti.
- Crià una basa di dati chì cuntene i GUID di tutti l'assi è cunducendu validazione quandu invià i pacchetti.
cunchiusioni
UPM hè una nova suluzione per a distribuzione di risorse sparte in Unità, chì pò esse una alternativa degna à i metudi esistenti. I cunsiglii descritti in l'articulu sò basati nantu à casi reali. Speremu chì li trovate utili.
Source: www.habr.com