Unity Package Manager

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.

Unity Package Manager

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. sottomoduli Git - distribuzione di risorse spartuti attraversu sottumoduli esterni.

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

Unity Package Manager
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 Verdacciu. Ci hè un detallatu documentazione, è solu un paru di cumandamenti sò necessarii per eseguisce.

Stabbilimentu di l'ambiente

Prima vi tuccherà à stallà node.js.

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:

  1. Andà à u cartulare di u prughjettu chì vulemu fà un pacchettu.
  2. 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.
  3. Per vede convenientemente u nome di u pacchettu, aghjunghje a pruprietà displayName à package.json è riempie.
  4. 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"
    }

  5. 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:

  1. 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"
         ]
       }
     ]
    
  2. Andate à Unità è apre a finestra di u Manager di Pacchetti (travaglià cù pacchetti persunalizati ùn hè micca sfarente di travaglià cù quelli integrati).
  3. Selezziunà tutti i pacchetti.
  4. Truvate u pacchettu chì avete bisognu è aghjunghje.

Unity Package Manager

U travagliu cù fonti è debugging

Per esse cunnessi cù e fonti à u prugettu, avete bisognu di creà Definizione di l'Assemblea per u pacchettu.

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:

Unity Package Manager
Scrittura da u pacchettu cù un breakpoint di travagliu:

Unity Package Manager

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:

  1. Vai à u pacchettu in u pacchettu cache.

    Unity Package Manager

  2. Fate i cambiamenti necessarii.
  3. Aggiorna a versione in u schedariu package.json.
  4. Mandate u pacchettu npm publish --registry *адрес до хранилища пакетов*.
  5. 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:

  1. 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.
  2. 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

  1. Riassegnazione di GUID utilizendu i nostri algoritmi quandu importate tutti l'assi per eliminà e scontri.
  2. Aghjunghjite tutti l'assi à un prughjettu è poi dividite in pacchetti.
  3. 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

Add a comment