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.
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.
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 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
.
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
Postavljanje okruženja
Prvo morate instalirati
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:
- 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:
{ "name": "com.plarium.somepackage", "displayName": "Some Package", "version": "1.0.0", "description": "Some Package Description", "keywords": [ "Unity", "UPM" ], "author": "AUTHOR", "license": "UNLICENSED" }
- 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:
- Dodaj u fajl
manifest.json
informacije o izvoru paketa. Da biste to učinili, morate dodati svojstvoscopedRegistries
i naznačite opsege i izvornu adresu na kojoj će se pretraživati određeni opsegi."scopedRegistries": [ { "name": "Main", "url": "адрес до хранилища пакетов", "scopes": [ "com.plarium" ] } ]
- Idite na Unity i otvorite prozor Package Manager (rad sa prilagođenim paketima se ne razlikuje od rada sa ugrađenim).
- Odaberite Svi paketi.
- Pronađite paket koji vam je potreban i dodajte ga.
Rad sa izvorima i otklanjanje grešaka
Da bi se izvori povezali sa projektom, potrebno je kreirati
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:
Skripta iz paketa sa radnom tačkom prekida:
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:
- Idite na paket u kešu paketa.
- Napravite potrebne promjene.
- Ažurirajte verziju u fajlu
package.json
. - Pošalji paket
npm publish --registry *адрес до хранилища пакетов*
. - Ažurirajte verziju paketa na ispravljenu preko UPM interfejsa.
Konflikti uvoza paketa
Sljedeći GUID konflikti mogu se pojaviti prilikom uvoza paketa:
- 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.
- 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
- Ponovno dodjeljivanje GUID-ova korištenjem vlastitih algoritama prilikom uvoza svih sredstava kako bi se eliminisale kolizije.
- Dodavanje svih sredstava u jedan projekat, a zatim njihovo dijeljenje u pakete.
- 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