Manager de pachete Unity

Unity este o platformă care există de ceva timp și este în continuă evoluție. Cu toate acestea, atunci când lucrați în el cu mai multe proiecte în același timp, puteți întâmpina în continuare dificultăți în utilizarea surselor comune (.cs), biblioteci (.dll) și a altor active (imagini, sunete, modele, prefabricate). În acest articol vom vorbi despre experiența noastră cu o soluție nativă la o astfel de problemă pentru Unity.

Manager de pachete Unity

Metode de distribuire a resurselor partajate

Există mai multe modalități de a utiliza resursele partajate pentru diferite proiecte, dar fiecare abordare are avantajele și dezavantajele sale.

1. Duplicare - duplicăm resursele între proiecte „de mână”.

Pro-uri:

  • Potrivit pentru toate tipurile de resurse.
  • Fara probleme de dependenta.
  • Nu există probleme cu GUID-urile activelor.

Contra:

  • Depozite uriașe.
  • Nu există nicio posibilitate de versiuni.
  • Dificultăți de urmărire a modificărilor aduse resurselor partajate.
  • Dificultate la actualizarea resurselor partajate.

2. submodule Git — distribuirea resurselor partajate prin submodule externe.

Pro-uri:

  • Puteți lucra cu sursele.
  • Puteți distribui active.
  • Fara probleme de dependenta.

Contra:

  • Este necesară experiența Git.
  • Git nu este foarte prietenos cu fișierele binare - va trebui să vă conectați LFS.
  • Controlul accesului pentru depozite.
  • Dificultate la upgrade și downgrade versiuni.
  • Ciocnirile GUID sunt posibile și nu există un comportament clar din partea Unity pentru a le rezolva.

3. NuGet - distribuție de biblioteci partajate prin pachete NuGet.

Pro-uri:

  • Lucru convenabil cu proiecte care nu depind de Unity.
  • Versiune convenabilă și rezoluție a dependențelor.

Contra:

  • Unity nu poate funcționa cu pachetele NuGet din cutie (pe GitHub puteți găsi NuGet Package Manager pentru Unity, care remediază acest lucru, dar există câteva nuanțe).
  • Dificultăți în distribuirea altor tipuri de active.

4. Unity Package Manager - distribuirea resurselor partajate printr-o soluție nativă pentru Unity.

Pro-uri:

  • Interfață nativă pentru lucrul cu pachete.
  • Protecție împotriva suprascrierii fișierelor .meta în pachete din cauza conflictelor GUID.
  • Posibilitate de versiuni.
  • Abilitatea de a distribui toate tipurile de resurse pentru Unity.

Contra:

  • Conflictele GUID pot apărea în continuare.
  • Nu există documentație pentru implementare.

Această din urmă metodă are mai multe avantaje decât dezavantaje. Cu toate acestea, nu este foarte popular acum din cauza lipsei de documentație și, prin urmare, ne vom opri asupra ei în detaliu.

Manager de pachete Unity

Unity Package Manager (UPM) este un instrument de gestionare a pachetelor. A fost adăugat în Unity 2018.1 și a fost folosit doar pentru pachetele care au fost dezvoltate de Unity Technologies. Cu toate acestea, începând cu versiunea 2018.3, a devenit posibilă adăugarea pachetelor personalizate.

Manager de pachete Unity
Interfața managerului de pachete Unity

Pachetele nu ajung în sursele proiectului (directorul Assets). Sunt într-un director separat %projectFolder%/Library/PackageCache și nu afectează în niciun fel proiectul, singura lor mențiune în codul sursă este în fișier packages/manifest.json.

Manager de pachete Unity
Pachete în sistemul de fișiere de proiect

Sursele pachetelor

UPM poate folosi mai multe surse de pachete:

1. Sistem de fișiere.

Pro-uri:

  • Viteza de implementare.
  • Nu necesită instrumente terțe.

Contra:

  • Dificultate în versiunea.
  • Accesul partajat la sistemul de fișiere este necesar pentru toți cei care lucrează cu proiectul.

2. Depozitul Git.

Pro-uri:

  • Tot ce aveți nevoie este un depozit Git.

Contra:

  • Nu puteți comuta între versiuni prin fereastra UPM.
  • Nu funcționează cu toate depozitele Git.

3. depozitul npm.

Pro-uri:

  • Suportă pe deplin funcționalitatea UPM și este folosit pentru a distribui pachete oficiale Unity.

Contra:

  • În prezent, ignoră toate versiunile de șir ale pachetelor, cu excepția „-preview”.

Mai jos ne vom uita la implementarea UPM + npm. Acest pachet este convenabil deoarece vă permite să lucrați cu orice tip de resursă și să gestionați versiunile de pachet și, de asemenea, acceptă pe deplin interfața nativă UPM.

Îl puteți folosi ca depozit npm Verdaccio. Există un detaliat documentație, și sunt necesare doar câteva comenzi pentru a-l rula.

Configurarea mediului

Mai întâi trebuie să instalați node.js.

Crearea unui pachet

Pentru a crea un pachet, trebuie să plasați fișierul package.json, care îl va descrie, în directorul cu conținutul acestui pachet. Trebuie să faceți următoarele:

Accesați directorul de proiect pe care vrem să facem un pachet.

Rulați comanda npm init și introduceți valorile necesare în timpul dialogului. Pentru nume, specificați numele în format de domeniu invers, de exemplu com.plarium.somepackage.
Pentru a afișa convenabil numele pachetului, adăugați proprietatea displayName la package.json și completați-o.

Deoarece npm este orientat spre js, fișierul conține proprietățile principale și scripturile de care nu avem nevoie, pe care Unity nu le folosește. Este mai bine să le eliminați pentru a nu aglomera descrierea pachetului. Fișierul ar trebui să arate cam așa:

  1. Accesați directorul de proiect pe care vrem să facem un pachet.
  2. Rulați comanda npm init și introduceți valorile necesare în timpul dialogului. Pentru nume, specificați numele în format de domeniu invers, de exemplu com.plarium.somepackage.
  3. Pentru a afișa convenabil numele pachetului, adăugați proprietatea displayName la package.json și completați-o.
  4. Deoarece npm este orientat spre js, fișierul conține proprietățile principale și scripturile de care nu avem nevoie, pe care Unity nu le folosește. Este mai bine să le eliminați pentru a nu aglomera descrierea pachetului. Fișierul ar trebui să arate cam așa:
    {
     "name": "com.plarium.somepackage",
     "displayName": "Some Package",
     "version": "1.0.0",
     "description": "Some Package Description",
     "keywords": [
       "Unity",
       "UPM"
     ],
     "author": "AUTHOR",
     "license": "UNLICENSED"
    }

  5. Deschideți Unity și generați un fișier .meta pentru package.json (Unity nu vede activele fără fișiere .meta, pachetele pentru Unity sunt deschise doar în citire).

Trimiterea unui pachet

Pentru a trimite pachetul trebuie să rulați comanda: npm publish --registry *адрес до хранилища пакетов*.

Instalarea și actualizarea pachetelor prin Unity Package Manager

Pentru a adăuga un pachet la un proiect Unity, aveți nevoie de:

  1. Adăugați la fișier manifest.json informații despre sursa pachetelor. Pentru a face acest lucru, trebuie să adăugați proprietatea scopedRegistries și indicați domeniile și adresa sursei unde vor fi căutate domenii specifice.
    
    "scopedRegistries": [
       {
         "name": "Main",
         "url": "адрес до хранилища пакетов",
         "scopes": [
           "com.plarium"
         ]
       }
     ]
    
  2. Accesați Unity și deschideți fereastra Manager de pachete (lucrarea cu pachete personalizate nu este diferită de lucrul cu cele încorporate).
  3. Selectați Toate pachetele.
  4. Găsiți pachetul de care aveți nevoie și adăugați-l.

Manager de pachete Unity

Lucrul cu surse și depanare

Pentru ca sursele să fie conectate la proiect, trebuie să creați Definiția ansamblului pentru pachet.

Utilizarea pachetelor nu limitează opțiunile de depanare. Cu toate acestea, atunci când lucrați cu pachete în Unity, nu puteți merge la IDE făcând clic pe o eroare din consolă dacă eroarea a apărut în pachet. Acest lucru se datorează faptului că Unity nu vede scripturile ca fișiere separate, deoarece atunci când se utilizează definiția de asamblare, acestea sunt colectate într-o bibliotecă și incluse în proiect. Când lucrați cu surse dintr-un proiect, este disponibil să faceți clic pe IDE.

Script într-un proiect cu un pachet conectat:

Manager de pachete Unity
Script din pachet cu un punct de întrerupere de lucru:

Manager de pachete Unity

Remedieri urgente la pachete

Pachetele Unity adăugate la un proiect sunt doar pentru citire, dar pot fi editate în memoria cache a pachetelor. Pentru a face acest lucru aveți nevoie de:

  1. Accesați pachetul în cache-ul pachetului.

    Manager de pachete Unity

  2. Faceți modificările necesare.
  3. Actualizați versiunea în fișier package.json.
  4. Trimite pachetul npm publish --registry *адрес до хранилища пакетов*.
  5. Actualizați versiunea pachetului la cea corectată prin interfața UPM.

Conflicte de import de pachete

Următoarele conflicte GUID pot apărea la importarea pachetelor:

  1. Pachet - pachet. Dacă, la importul unui pachet, se descoperă că pachetele deja adăugate conțin active cu același GUID, activele cu GUID-uri potrivite din pachetul importat nu vor fi adăugate la proiect.
  2. Un pachet este un proiect. Dacă, la importul unui pachet, se descoperă că proiectul conține active cu GUID-uri potrivite, atunci activele din pachet nu vor fi adăugate la proiect. Cu toate acestea, activele care depind de acestea vor începe să utilizeze active din proiect.

Transferarea activelor dintr-un proiect într-un pachet

Dacă transferați un activ dintr-un proiect într-un pachet în timp ce Unity este deschis, funcționalitatea acestuia va fi păstrată, iar linkurile din activele dependente vor începe să folosească activul din pachet.

Este important: Când copiați un activ dintr-un proiect într-un pachet, va apărea conflictul „Pachet - Proiect” descris în secțiunea de mai sus.

Soluții posibile la conflicte

  1. Reatribuirea GUID-urilor folosind propriii algoritmi atunci când importăm toate activele pentru a elimina coliziunile.
  2. Adăugarea tuturor activelor la un proiect și apoi împărțirea lor în pachete.
  3. Crearea unei baze de date care să conțină GUID-urile tuturor activelor și efectuarea validării la trimiterea pachetelor.

Concluzie

UPM este o nouă soluție pentru distribuirea resurselor partajate în Unity, care poate fi o alternativă demnă la metodele existente. Recomandările descrise în articol s-au bazat pe cazuri reale. Sperăm să le găsiți utile.

Sursa: www.habr.com

Adauga un comentariu