Unity Package Manager

Unity je platforma koja postoji već duže vrijeme i koja se stalno razvija. Međutim, kada radite u njemu sa nekoliko projekata istovremeno, i dalje možete naići na poteškoće u korišćenju uobičajenih izvora (.cs), biblioteka (.dll) i drugih sredstava (slike, zvukovi, modeli, prefabovi). U ovom članku ćemo govoriti o našem iskustvu s izvornim rješenjem za takav problem za Unity.

Unity Package Manager

Metode distribucije zajedničkih resursa

Postoji više od jednog načina korištenja zajedničkih resursa za različite projekte, ali svaki pristup ima svoje prednosti i nedostatke.

1. Dupliranje - dupliramo resurse između projekata „ručno“.

Pros:

  • Pogodno za sve vrste resursa.
  • Nema problema sa zavisnošću.
  • Nema problema sa GUID-ovima sredstava.

Cons:

  • Giant repositories.
  • Ne postoji mogućnost verzije.
  • Poteškoće u praćenju promjena na zajedničkim resursima.
  • Poteškoće s ažuriranjem zajedničkih resursa.

2. Git podmoduli — distribucija zajedničkih resursa kroz eksterne podmodule.

Pros:

  • Možete raditi sa izvorima.
  • Možete distribuirati imovinu.
  • Nema problema sa zavisnošću.

Cons:

  • Git iskustvo potrebno.
  • Git nije baš prijatelj sa binarnim fajlovima - moraćete da povežete LFS.
  • Kontrola pristupa za spremišta.
  • Poteškoće s nadogradnjom i degradacijom verzija.
  • GUID kolizije su moguće i ne postoji jasno ponašanje Unity-a da ih riješi.

3. NuGet - distribucija zajedničkih biblioteka kroz NuGet pakete.

Pros:

  • Pogodan rad sa projektima koji ne zavise od Unity-a.
  • Pogodno upravljanje verzijama i razlučivanje zavisnosti.

Cons:

  • Unity ne može raditi sa NuGet paketima iz kutije (na GitHubu možete pronaći NuGet Package Manager za Unity, koji ovo popravlja, ali postoje neke nijanse).
  • Poteškoće u distribuciji drugih vrsta imovine.

4. Unity Package Manager - distribucija zajedničkih resursa kroz izvorno rješenje za Unity.

Pros:

  • Izvorni interfejs za rad sa paketima.
  • Zaštita od prepisivanja .meta datoteka u paketima zbog GUID sukoba.
  • Mogućnost verzije.
  • Sposobnost distribucije svih vrsta resursa za Unity.

Cons:

  • GUID konflikti se i dalje mogu pojaviti.
  • Ne postoji dokumentacija za implementaciju.

Posljednja metoda ima više prednosti nego nedostataka. Međutim, sada nije jako popularan zbog nedostatka dokumentacije, pa ćemo se na njemu detaljno zadržati.

Unity Package Manager

Unity Package Manager (UPM) je alat za upravljanje paketima. Dodan je u Unity 2018.1 i korišten je samo za pakete koje je razvila Unity Technologies. Međutim, počevši od verzije 2018.3, postalo je moguće dodati prilagođene pakete.

Unity Package Manager
Unity Package Manager Interface

Paketi ne završavaju u izvorima projekta (direktoriju imovine). Oni su u posebnom imeniku %projectFolder%/Library/PackageCache i ni na koji način ne utiču na projekat, njihovo jedino spominjanje u izvornom kodu je u datoteci packages/manifest.json.

Unity Package Manager
Paketi u sistemu datoteka projekta

Izvori paketa

UPM može koristiti nekoliko izvora paketa:

1. Sistem datoteka.

Pros:

  • Brzina implementacije.
  • Ne zahtijeva alate treće strane.

Cons:

  • Poteškoće u verziji.
  • Zajednički pristup sistemu datoteka je neophodan za sve koji rade na projektu.

2. Git spremište.

Pros:

  • Sve što vam treba je Git repozitorij.

Cons:

  • Ne možete prelaziti između verzija kroz UPM prozor.
  • Ne radi sa svim Git repozitorijumima.

3. npm spremište.

Pros:

  • Potpuno podržava UPM funkcionalnost i koristi se za distribuciju službenih Unity paketa.

Cons:

  • Trenutno zanemaruje sve string verzije paketa osim "-preview".

U nastavku ćemo pogledati implementaciju UPM + npm. Ovaj paket je zgodan jer vam omogućava rad s bilo kojom vrstom resursa i upravljanje verzijama paketa, a također u potpunosti podržava izvorni UPM interfejs.

Možete ga koristiti kao npm spremište Verdaccio. Postoji detaljan dokumentaciju, i potrebno je samo nekoliko naredbi za njegovo pokretanje.

Postavljanje okruženja

Prvo morate instalirati node.js.

Kreiranje paketa

Da biste kreirali paket, morate postaviti datoteku package.json, koji će ga opisati, u direktorij sa sadržajem ovog paketa. Potrebno je da uradite sledeće:

Idite u direktorij projekta u koji želimo napraviti paket.

Pokrenite naredbu npm init i unesite potrebne vrijednosti tokom dijaloga. Za ime navedite ime u formatu obrnutog domena, na primjer com.plarium.somepackage.
Da biste prikladno prikazali ime paketa, dodajte svojstvo displayName u package.json i popunite ga.

Pošto je npm orijentisan na js, datoteka sadrži glavna svojstva i svojstva skripte koja nam nisu potrebna, a koja Unity ne koristi. Bolje ih je ukloniti kako ne biste zatrpali opis paketa. Fajl bi trebao izgledati otprilike ovako:

  1. Idite u direktorij projekta u koji želimo napraviti paket.
  2. Pokrenite naredbu npm init i unesite potrebne vrijednosti tokom dijaloga. Za ime navedite ime u formatu obrnutog domena, na primjer com.plarium.somepackage.
  3. Da biste prikladno prikazali ime paketa, dodajte svojstvo displayName u package.json i popunite ga.
  4. Pošto je npm orijentisan na js, datoteka sadrži glavna svojstva i svojstva skripte koja nam nisu potrebna, a koja Unity ne koristi. Bolje ih je ukloniti kako ne biste zatrpali opis paketa. Fajl bi trebao izgledati otprilike ovako:
    {
     "name": "com.plarium.somepackage",
     "displayName": "Some Package",
     "version": "1.0.0",
     "description": "Some Package Description",
     "keywords": [
       "Unity",
       "UPM"
     ],
     "author": "AUTHOR",
     "license": "UNLICENSED"
    }

  5. Otvorite Unity i generirajte .meta datoteku za package.json (Unity ne vidi sredstva bez .meta datoteka, paketi za Unity se otvaraju samo za čitanje).

Slanje paketa

Da pošaljete paket potrebno je da pokrenete naredbu: npm publish --registry *адрес до хранилища пакетов*.

Instaliranje i ažuriranje paketa putem Unity Package Managera

Da dodate paket u Unity projekat, trebate:

  1. Dodaj u fajl manifest.json informacije o izvoru paketa. Da biste to učinili, morate dodati svojstvo scopedRegistries i naznačite opsege i izvornu adresu na kojoj će se pretraživati ​​određeni opsegi.
    
    "scopedRegistries": [
       {
         "name": "Main",
         "url": "адрес до хранилища пакетов",
         "scopes": [
           "com.plarium"
         ]
       }
     ]
    
  2. Idite na Unity i otvorite prozor Package Manager (rad sa prilagođenim paketima se ne razlikuje od rada sa ugrađenim).
  3. Odaberite Svi paketi.
  4. Pronađite paket koji vam je potreban i dodajte ga.

Unity Package Manager

Rad sa izvorima i otklanjanje grešaka

Da bi se izvori povezali sa projektom, potrebno je kreirati Definicija sklopa za paket.

Korištenje paketa ne ograničava vaše mogućnosti otklanjanja grešaka. Međutim, kada radite sa paketima u Unity-u, ne možete otići u IDE klikom na grešku u konzoli ako se greška dogodila u paketu. To je zbog činjenice da Unity ne vidi skripte kao zasebne datoteke, jer se prilikom korištenja definicije sklopa skupljaju u biblioteku i uključuju u projekat. Kada radite sa izvorima iz projekta, dostupno je klikanje na IDE.

Skripta u projektu sa povezanim paketom:

Unity Package Manager
Skripta iz paketa sa radnom tačkom prekida:

Unity Package Manager

Hitna popravka paketa

Unity paketi dodati projektu su samo za čitanje, ali se mogu uređivati ​​u kešu paketa. Da biste to uradili potrebno vam je:

  1. Idite na paket u kešu paketa.

    Unity Package Manager

  2. Napravite potrebne promjene.
  3. Ažurirajte verziju u fajlu package.json.
  4. Pošalji paket npm publish --registry *адрес до хранилища пакетов*.
  5. Ažurirajte verziju paketa na ispravljenu preko UPM interfejsa.

Konflikti uvoza paketa

Sljedeći GUID konflikti mogu se pojaviti prilikom uvoza paketa:

  1. Paket - paket. Ako se prilikom uvoza paketa otkrije da već dodati paketi sadrže sredstva sa istim GUID-om, sredstva sa odgovarajućim GUID-ovima iz uvezenog paketa neće biti dodana u projekat.
  2. Paket je projekat. Ako se prilikom uvoza paketa otkrije da projekat sadrži sredstva s odgovarajućim GUID-ovima, tada sredstva iz paketa neće biti dodana projektu. Međutim, sredstva koja zavise od njih će početi koristiti sredstva iz projekta.

Prijenos sredstava iz projekta u paket

Ako prenesete sredstvo iz projekta u paket dok je Unity otvoren, njegova funkcionalnost će biti očuvana, a veze u zavisnim sredstvima počet će koristiti sredstvo iz paketa.

važno: Prilikom kopiranja sredstva iz projekta u paket, doći će do sukoba “Paket - Projekt” opisan u gornjem dijelu.

Moguća rješenja sukoba

  1. Ponovno dodjeljivanje GUID-ova korištenjem vlastitih algoritama prilikom uvoza svih sredstava kako bi se eliminisale kolizije.
  2. Dodavanje svih sredstava u jedan projekat, a zatim njihovo dijeljenje u pakete.
  3. Kreiranje baze podataka koja sadrži GUID-ove svih sredstava i provođenje validacije prilikom slanja paketa.

zaključak

UPM je novo rješenje za distribuciju zajedničkih resursa u Unity-u, koje može biti dostojna alternativa postojećim metodama. Preporuke opisane u članku zasnovane su na stvarnim slučajevima. Nadamo se da će vam biti korisni.

izvor: www.habr.com

Dodajte komentar