Vienybės paketo valdytojas

„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ą.

Vienybės paketo valdytojas

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. Git submoduliai - bendrų išteklių paskirstymas per išorinius submodulius.

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.

Vienybės paketo valdytojas
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.

Vienybės paketo valdytojas
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ą Verdaccio. Jis turi išsamų dokumentacija, o norint jį paleisti, reikia kelių komandų.

Aplinkos nustatymas

Pirmiausia reikia įdiegti node.js.

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:

  1. Eikite į projekto katalogą, kuriame norime sudaryti paketą.
  2. 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.
  3. Kad būtų patogu rodyti paketo pavadinimą, prie package.json pridėkite ypatybę displayName ir užpildykite.
  4. 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"
    }

  5. 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:

  1. 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"
         ]
       }
     ]
    
  2. Eikite į Unity ir atidarykite paketų tvarkyklės langą (darbas su pasirinktiniais paketais nesiskiria nuo darbo su integruotais).
  3. Pasirinkite Visi paketai.
  4. Raskite reikiamą paketą ir pridėkite.

Vienybės paketo valdytojas

Darbas su šaltiniais ir derinimas

Kad šaltiniai būtų prijungti prie projekto, reikia sukurti Surinkimo apibrėžimas už pakuotę.

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:

Vienybės paketo valdytojas
Scenarijus iš paketo su veikiančiu pertraukos tašku:

Vienybės paketo valdytojas

Skubūs paketų pataisymai

Prie projekto pridėti „Unity“ paketai yra tik skaitomi, tačiau juos galima redaguoti paketų talpykloje. Tam jums reikia:

  1. Eikite į paketą paketo talpykloje.

    Vienybės paketo valdytojas

  2. Atlikite reikiamus pakeitimus.
  3. Atnaujinti versiją faile package.json.
  4. siųsti paketą npm publish --registry *адрес до хранилища пакетов*.
  5. Atnaujinkite paketo versiją į pataisytą versiją naudodami UPM sąsają.

Paketų importavimo konfliktai

Importuojant paketus gali kilti šie GUID konfliktai:

  1. 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.
  2. 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

  1. GUID perskirstymas pagal savo algoritmus, kai importuojamas visas turtas, kad būtų išvengta susidūrimų.
  2. Viso turto įtraukimas į vieną projektą, vėliau suskirstant į paketus.
  3. 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

Добавить комментарий