„Unity“ yra platforma, kuri egzistuoja ilgą laiką ir nuolat tobulėja. Tačiau dirbdami su keliais projektais vienu metu vis tiek galite susidurti su sunkumais naudojant įprastus šaltinius (.cs), bibliotekas (.dll) ir kitus išteklius (vaizdus, garsus, modelius, surenkamąsias dalis). Šiame straipsnyje papasakosime apie savo patirtį, kaip „Unity“ sprendžiant tokią problemą.
Bendrų išteklių paskirstymo metodai
Yra daugiau nei vienas būdas naudoti bendrus išteklius skirtingiems projektams, tačiau kiekvienas metodas turi savo privalumų ir trūkumų.
1. Dubliavimas – „ranka“ dubliuojame išteklius tarp projektų.
Argumentai "už":
- Tinka visų rūšių ištekliams.
- Jokių priklausomybės problemų.
- Jokių problemų dėl išteklių GUID.
Trūkumai:
- Milžiniškos saugyklos.
- Versijų kūrimo galimybės nėra.
- Sunku stebėti bendrinamų išteklių pakeitimus.
- Sunku atnaujinti bendrinamus išteklius.
2.
Argumentai "už":
- Galite dirbti su šaltiniais.
- Galite platinti turtą.
- Jokių priklausomybės problemų.
Trūkumai:
- Reikalingi git įgūdžiai.
- Git nėra labai draugiškas su dvejetainiais failais – turite įtraukti LFS.
- Prieigos kontrolė saugykloms.
- Sunkumai atnaujinant ir pažeminant.
- Galimi GUID susidūrimai ir nėra vienareikšmio „Unity“ elgesio jas išspręsti.
3. NuGet – bendrinamų bibliotekų platinimas per NuGet paketus.
Argumentai "už":
- Patogus darbas su projektais, kurie nepriklauso nuo Unity.
- Patogus versijų kūrimas ir priklausomybės sprendimas.
Trūkumai:
- „Unity“ nežino, kaip dirbti su „NuGet“ paketais („NuGet Package Manager for Unity“ galite rasti „GitHub“, kuris tai ištaiso, tačiau yra niuansų).
- Sunkumai paskirstant kitų rūšių turtą.
4. Unity Package Manager – bendrinamų išteklių paskirstymas naudojant vietinį Unity sprendimą.
Argumentai "už":
- Natūrali sąsaja darbui su paketais.
- Apsauga nuo .meta failų perrašymo paketuose esant GUID konfliktams.
- Galimybė kurti versijas.
- Galimybė paskirstyti visokius išteklius vienybei.
Trūkumai:
- Vis tiek gali kilti GUID konfliktų.
- Įgyvendinimui dokumentų nėra.
Pastarasis metodas turi daugiau privalumų nei trūkumų. Tačiau dabar jis nėra labai populiarus, nes trūksta dokumentacijos, todėl mes apie tai kalbėsime išsamiai.
Vienybės paketo valdytojas
„Unity Package Manager“ (toliau – UPM) yra paketų valdymo įrankis. Jis buvo įtrauktas į Unity 2018.1 ir buvo naudojamas tik Unity Technologies sukurtiems paketams. Tačiau nuo 2018.3 versijos atsirado galimybė pridėti pasirinktinius paketus.
Unity Package Manager sąsaja
Paketai nepatenka į projekto šaltinius (Assets directory). Jie yra atskirame kataloge. %projectFolder%/Library/PackageCache
ir jokiu būdu neturi įtakos projektui, vienintelis jų paminėjimas šaltinio kode yra faile packages/manifest.json
.
Paketai projekto failų sistemoje
Pakuotės šaltiniai
UPM gali naudoti kelis paketų šaltinius:
1. Failų sistema.
Argumentai "už":
- Įgyvendinimo greitis.
- Nereikia jokių trečiųjų šalių įrankių.
Trūkumai:
- versijų kūrimo sudėtingumas.
- Bendra prieiga prie failų sistemos reikalinga visiems, kurie dirba su projektu.
2. Git saugykla.
Argumentai "už":
- Viskas, ko jums reikia, yra „Git“ saugykla.
Trūkumai:
- Negalite perjungti versijų per UPM langą.
- Neveikia su visomis „Git“ saugyklomis.
3. npm saugykla.
Argumentai "už":
- Visiškai palaiko UPM funkcijas ir yra naudojamas platinti oficialius Unity paketus.
Trūkumai:
- Šiuo metu nepaisoma visų paketų eilučių versijų, išskyrus "-preview".
Toliau apžvelgsime UPM + npm diegimą. Šis paketas patogus, nes leidžia dirbti su bet kokiais ištekliais ir valdyti paketų versijas, taip pat visiškai palaiko vietinę UPM sąsają.
Galite naudoti kaip npm saugyklą
Aplinkos nustatymas
Pirmiausia reikia įdiegti
Sukurkite paketą
Norėdami sukurti paketą, turite įdėti failą package.json
, kuris jį apibūdins, į katalogą su šio paketo turiniu. Turite atlikti šiuos veiksmus:
Eikite į projekto katalogą, kuriame norime sudaryti paketą.
Vykdykite komandą npm init ir dialogo lange įveskite reikiamas reikšmes. Norėdami nurodyti pavadinimą, nurodykite pavadinimą atvirkštiniu domeno formatu, pavyzdžiui, com.plarium.somepackage.
Kad būtų patogu rodyti paketo pavadinimą, prie package.json pridėkite ypatybę displayName ir užpildykite.
Kadangi npm yra orientuotas į js, faile yra pagrindinės ir mums nereikalingos scenarijų savybės, kurių Unity nenaudoja. Geriau juos pašalinti, kad neužsikimštų pakuotės aprašymas. Failas turėtų atrodyti maždaug taip:
- Eikite į projekto katalogą, kuriame norime sudaryti paketą.
- Vykdykite komandą npm init ir dialogo lange įveskite reikiamas reikšmes. Norėdami nurodyti pavadinimą, nurodykite pavadinimą atvirkštiniu domeno formatu, pavyzdžiui, com.plarium.somepackage.
- Kad būtų patogu rodyti paketo pavadinimą, prie package.json pridėkite ypatybę displayName ir užpildykite.
- Kadangi npm yra orientuotas į js, faile yra pagrindinės ir mums nereikalingos scenarijų savybės, kurių Unity nenaudoja. Geriau juos pašalinti, kad neužsikimštų pakuotės aprašymas. Failas turėtų atrodyti maždaug taip:
{ "name": "com.plarium.somepackage", "displayName": "Some Package", "version": "1.0.0", "description": "Some Package Description", "keywords": [ "Unity", "UPM" ], "author": "AUTHOR", "license": "UNLICENSED" }
- Atidarykite „Unity“ ir sugeneruokite „package.json“ .meta failą („Unity“ nemato išteklių be .meta failų, „Unity“ paketai atidaromi tik skaitymui).
Paketo siuntimas
Norėdami išsiųsti paketą, turite paleisti komandą: npm publish --registry *адрес до хранилища пакетов*
.
Paketų diegimas ir atnaujinimas naudojant Unity Package Manager
Norėdami pridėti paketą prie Unity projekto, turite:
- Rašyti į failą
manifest.json
informacija apie paketų šaltinį. Norėdami tai padaryti, turite pridėti nuosavybęscopedRegistries
ir nurodykite apimtis bei šaltinio adresą, pagal kurį bus ieškoma konkrečių sričių."scopedRegistries": [ { "name": "Main", "url": "адрес до хранилища пакетов", "scopes": [ "com.plarium" ] } ]
- Eikite į Unity ir atidarykite paketų tvarkyklės langą (darbas su pasirinktiniais paketais nesiskiria nuo darbo su integruotais).
- Pasirinkite Visi paketai.
- Raskite reikiamą paketą ir pridėkite.
Darbas su šaltiniais ir derinimas
Kad šaltiniai būtų prijungti prie projekto, reikia sukurti
Paketų naudojimas neriboja derinimo galimybių. Tačiau dirbdami su paketais Unity negalite pereiti į IDE spustelėdami klaidą konsolėje, jei klaida įvyko pakete. Taip yra todėl, kad „Unity“ nemato scenarijų kaip atskirų failų, nes naudojant „Assembly Definition“ jie surenkami į biblioteką ir įtraukiami į projektą. Dirbant su šaltiniais iš projekto, galimas perėjimas prie IDE.
Scenarijus projekte su prijungtu paketu:
Scenarijus iš paketo su veikiančiu pertraukos tašku:
Skubūs paketų pataisymai
Prie projekto pridėti „Unity“ paketai yra tik skaitomi, tačiau juos galima redaguoti paketų talpykloje. Tam jums reikia:
- Eikite į paketą paketo talpykloje.
- Atlikite reikiamus pakeitimus.
- Atnaujinti versiją faile
package.json
. - siųsti paketą
npm publish --registry *адрес до хранилища пакетов*
. - Atnaujinkite paketo versiją į pataisytą versiją naudodami UPM sąsają.
Paketų importavimo konfliktai
Importuojant paketus gali kilti šie GUID konfliktai:
- Pakuotė yra pakuotė. Jei importuojant paketą nustatoma, kad jau pridėti paketai turi išteklių su tuo pačiu GUID, ištekliai su atitinkančiais GUID iš importuoto paketo į projektą nebus įtraukti.
- Paketas yra projektas. Jei importuojant paketą nustatoma, kad projektas turi išteklių su atitinkančiais GUID, paketo turtas nebus įtrauktas į projektą. Tačiau nuo jų priklausantis turtas pradės naudoti projekto turtą.
Turto perkėlimas iš projekto į paketą
Jei perkeliate turtą iš projekto į paketą, kai Unity veikia, jo funkcionalumas bus išsaugotas, o priklausomų išteklių nuorodos pradės naudoti paketo išteklius.
Svarbu,: Kopijuojant išteklių iš projekto į paketą, įvyks paketo ir projekto konfliktas, aprašytas aukščiau esančiame skyriuje.
Galimi konfliktų sprendimai
- GUID perskirstymas pagal savo algoritmus, kai importuojamas visas turtas, kad būtų išvengta susidūrimų.
- Viso turto įtraukimas į vieną projektą, vėliau suskirstant į paketus.
- Sukurkite duomenų bazę, kurioje būtų visų išteklių GUID, ir patvirtinkite, kai pateikiate paketus.
išvada
UPM yra naujas sprendimas paskirstyti bendrus išteklius Unity, kuris gali būti verta alternatyva esamiems metodams. Straipsnyje aprašytos rekomendacijos atsirado remiantis tikrais atvejais. Tikimės, kad jie jums bus naudingi.
Šaltinis: www.habr.com