Unity je platforma koja postoji već neko vrijeme i stalno se razvija. Međutim, kada u njemu radite s nekoliko projekata u isto vrijeme, još uvijek možete naići na poteškoće u korištenju zajedničkih izvora (.cs), biblioteka (.dll) i drugih sredstava (slike, zvukovi, modeli, montažni elementi). U ovom ćemo članku govoriti o našem iskustvu s izvornim rješenjem takvog problema 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. Umnožavanje - dupliciramo resurse između projekata "ručno".
Pros:
- Prikladno za sve vrste resursa.
- Nema problema s ovisnošću.
- Nema problema s GUID-ovima sredstava.
Cons:
- Divovska spremišta.
- Ne postoji mogućnost verziranja.
- Poteškoće s praćenjem promjena zajedničkih resursa.
- Poteškoće s ažuriranjem zajedničkih resursa.
2.
Pros:
- Možete raditi s izvorima.
- Možete distribuirati imovinu.
- Nema problema s ovisnošću.
Cons:
- Potrebno Git iskustvo.
- Git nije baš prijateljski raspoložen prema binarnim datotekama - morat ćete spojiti LFS.
- Kontrola pristupa za repozitorije.
- Poteškoće s nadogradnjom i degradacijom verzija.
- Moguće su kolizije GUID-a i ne postoji jasno ponašanje Unityja za njihovo rješavanje.
3. NuGet - distribucija dijeljenih knjižnica putem NuGet paketa.
Pros:
- Zgodan rad s projektima koji ne ovise o Unityju.
- Zgodno upravljanje verzijama i rješavanje ovisnosti.
Cons:
- Unity ne može raditi s NuGet paketima odmah (na GitHubu možete pronaći NuGet Package Manager za Unity, koji to popravlja, ali postoje neke nijanse).
- Poteškoće u raspodjeli drugih vrsta imovine.
4. Unity Package Manager - distribucija zajedničkih resursa kroz nativno rješenje za Unity.
Pros:
- Izvorno sučelje za rad s paketima.
- Zaštita od prepisivanja .meta datoteka u paketima zbog sukoba GUID-a.
- Mogućnost verziranja.
- Sposobnost distribucije svih vrsta resursa za Unity.
Cons:
- I dalje može doći do sukoba GUID-a.
- Ne postoji dokumentacija za realizaciju.
Posljednja metoda ima više prednosti nego nedostataka. Međutim, sada nije jako popularan zbog nedostatka dokumentacije, pa ćemo se detaljnije zadržati na njemu.
Upravitelj paketa Unity
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 sučelje
Paketi ne završavaju u izvorima projekta (direktorij sredstava). Nalaze se u posebnom imeniku %projectFolder%/Library/PackageCache
i ni na koji način ne utječu na projekt, njihovo jedino spominjanje u izvornom kodu je u datoteci packages/manifest.json
.
Paketi u datotečnom sustavu projekta
Izvori paketa
UPM može koristiti nekoliko izvora paketa:
1. Sustav datoteka.
Pros:
- Brzina implementacije.
- Ne zahtijeva alate treće strane.
Cons:
- Poteškoće u verziji.
- Zajednički pristup datotečnom sustavu potreban je za sve koji rade na projektu.
2. Git spremište.
Pros:
- Sve što trebate je Git repozitorij.
Cons:
- Ne možete se prebacivati između verzija kroz UPM prozor.
- Ne radi sa svim Git spremištima.
3. npm spremište.
Pros:
- U potpunosti podržava UPM funkcionalnost i koristi se za distribuciju službenih Unity paketa.
Cons:
- Trenutačno zanemaruje sve verzije nizova paketa osim "-preview".
U nastavku ćemo pogledati UPM + npm implementaciju. Ovaj je paket prikladan jer vam omogućuje rad s bilo kojom vrstom resursa i upravljanje verzijama paketa, a također u potpunosti podržava izvorno UPM sučelje.
Možete ga koristiti kao npm repozitorij
Postavljanje okruženja
Prvo morate instalirati
Izrada paketa
Da biste kreirali paket, morate postaviti datoteku package.json
, koji će ga opisati, u direktorij sa sadržajem ovog paketa. Morate učiniti sljedeće:
Idite u direktorij projekta za koji želimo napraviti paket.
Pokrenite naredbu npm init i unesite potrebne vrijednosti tijekom dijaloškog okvira. Za naziv navedite naziv u obrnutom formatu domene, na primjer com.plarium.somepackage.
Za prikladan prikaz naziva paketa dodajte svojstvo displayName u package.json i ispunite ga.
Budući da je npm orijentiran na js, datoteka sadrži main i scripts svojstva koja nam ne trebaju, a koja Unity ne koristi. Bolje ih je ukloniti kako ne bi zatrpali opis paketa. Datoteka bi trebala izgledati otprilike ovako:
- Idite u direktorij projekta za koji želimo napraviti paket.
- Pokrenite naredbu npm init i unesite potrebne vrijednosti tijekom dijaloškog okvira. Za naziv navedite naziv u obrnutom formatu domene, na primjer com.plarium.somepackage.
- Za prikladan prikaz naziva paketa dodajte svojstvo displayName u package.json i ispunite ga.
- Budući da je npm orijentiran na js, datoteka sadrži main i scripts svojstva koja nam ne trebaju, a koja Unity ne koristi. Bolje ih je ukloniti kako ne bi zatrpali opis paketa. Datoteka bi trebala 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 imovinu bez .meta datoteka, paketi za Unity otvaraju se samo za čitanje).
Slanje paketa
Za slanje paketa potrebno je pokrenuti naredbu: npm publish --registry *адрес до хранилища пакетов*
.
Instaliranje i ažuriranje paketa putem Unity Package Managera
Da biste dodali paket u Unity projekt, trebate:
- Dodaj u datoteku
manifest.json
informacije o izvoru paketa. Da biste to učinili, morate dodati svojstvoscopedRegistries
i navedite opsege i izvornu adresu gdje će se pretraživati određeni opsegi."scopedRegistries": [ { "name": "Main", "url": "адрес до хранилища пакетов", "scopes": [ "com.plarium" ] } ]
- Idite na Unity i otvorite prozor Package Manager (rad s prilagođenim paketima ne razlikuje se od rada s ugrađenim).
- Odaberite Svi paketi.
- Pronađite paket koji vam je potreban i dodajte ga.
Rad s izvorima i otklanjanje pogrešaka
Kako bi se izvori mogli povezati s projektom, potrebno je izraditi
Korištenje paketa ne ograničava vaše mogućnosti otklanjanja pogrešaka. Međutim, kada radite s paketima u Unityju, ne možete otići na IDE klikom na pogrešku u konzoli ako se pogreška dogodila u paketu. To je zbog činjenice da Unity ne vidi skripte kao zasebne datoteke, budući da se prilikom korištenja Definicije sklopa skupljaju u biblioteku i uključuju u projekt. Kada radite s izvorima iz projekta, dostupno je klikanje na IDE.
Skripta u projektu s povezanim paketom:
Skripta iz paketa s radnom točkom prekida:
Hitni popravci paketa
Unity paketi dodani projektu samo su za čitanje, ali se mogu uređivati u predmemorij paketa. Da biste to učinili potrebno vam je:
- Idi na paket u predmemoriju paketa.
- Napravite potrebne promjene.
- Ažurirajte verziju u datoteci
package.json
. - Pošalji paket
npm publish --registry *адрес до хранилища пакетов*
. - Ažurirajte verziju paketa na ispravljenu putem UPM sučelja.
Sukobi pri uvozu paketa
Prilikom uvoza paketa mogu se pojaviti sljedeći sukobi GUID-a:
- Paket - paket. Ako se prilikom uvoza paketa otkrije da već dodani paketi sadrže sredstva s istim GUID-om, sredstva s odgovarajućim GUID-ovima iz uvezenog paketa neće biti dodana u projekt.
- Paket je projekt. Ako se prilikom uvoza paketa otkrije da projekt sadrži sredstva s odgovarajućim GUID-ovima, tada sredstva iz paketa neće biti dodana u projekt. Međutim, sredstva koja ovise o njima počet će koristiti sredstva iz projekta.
Prijenos sredstava iz projekta u paket
Ako prenesete sredstvo iz projekta u paket dok je Unity otvoren, njegova će se funkcionalnost očuvati, a veze u ovisnim sredstvima počet će koristiti sredstvo iz paketa.
To je važno: Prilikom kopiranja sredstva iz projekta u paket, dogodit će se sukob "Paket - Projekt" opisan u gornjem odjeljku.
Moguća rješenja sukoba
- Ponovno dodjeljivanje GUID-ova korištenjem naših vlastitih algoritama prilikom uvoza svih sredstava kako bi se uklonili kolizije.
- Dodavanje svih sredstava u jedan projekt, a zatim njihovo dijeljenje u pakete.
- Stvaranje baze podataka koja sadrži GUID-ove svih sredstava i provođenje provjere valjanosti prilikom slanja paketa.
Zaključak
UPM je novo rješenje za distribuciju zajedničkih resursa u Unityju, koje može biti dostojna alternativa postojećim metodama. Preporuke opisane u članku temeljene su na stvarnim slučajevima. Nadamo se da će vam biti od koristi.
Izvor: www.habr.com