Ühtsuse paketihaldur

Unity on platvorm, mis on olnud olemas juba mõnda aega ja areneb pidevalt. Samas võib mitme projektiga korraga töötades tekkida raskusi tavaliste allikate (.cs), teekide (.dll) ja muude varade (pildid, helid, mudelid, prefab) kasutamisel. Selles artiklis räägime oma kogemustest Unity jaoks sellise probleemi loomuliku lahendusega.

Ühtsuse paketihaldur

Jagatud ressursside jaotamise meetodid

Erinevate projektide jaoks jagatud ressursside kasutamiseks on rohkem kui üks viis, kuid igal lähenemisviisil on oma plussid ja miinused.

1. Dubleerimine – dubleerime ressursse projektide vahel käsitsi.

plussid:

  • Sobib igat tüüpi ressurssidele.
  • Sõltuvusprobleeme pole.
  • Varade GUID-idega probleeme pole.

miinuseid:

  • Hiiglaslikud hoidlad.
  • Versioonide loomise võimalus puudub.
  • Jagatud ressursside muudatuste jälgimise raskused.
  • Raskused jagatud ressursside värskendamisel.

2. Giti alammoodulid — jagatud ressursside jaotamine väliste alammoodulite kaudu.

plussid:

  • Saate töötada allikatega.
  • Saate varasid levitada.
  • Sõltuvusprobleeme pole.

miinuseid:

  • Nõutav Git kogemus.
  • Git ei ole binaarfailidega eriti sõbralik - peate ühendama LFS-i.
  • Juurdepääsu kontroll hoidlatele.
  • Raskused versioonide uuendamisel ja alandamisel.
  • GUID-i kokkupõrked on võimalikud ja Unity ei suuda neid lahendada.

3. NuGet – jagatud teekide levitamine NuGeti pakettide kaudu.

plussid:

  • Mugav töö Unityst mitte sõltuvate projektidega.
  • Mugav versioonide loomine ja sõltuvuse lahendamine.

miinuseid:

  • Unity ei saa töötada NuGeti pakettidega (GitHubist leiate Unity jaoks mõeldud NuGet Package Manageri, mis selle parandab, kuid seal on mõned nüansid).
  • Raskused muud tüüpi varade jaotamisel.

4. Unity Package Manager – jagatud ressursside jagamine Unity jaoks mõeldud natiivse lahenduse kaudu.

plussid:

  • Natiivne liides pakettidega töötamiseks.
  • Kaitse GUID-konfliktide tõttu pakettides olevate metafailide ülekirjutamise eest.
  • Versioonimise võimalus.
  • Võimalus levitada Unity jaoks igat tüüpi ressursse.

miinuseid:

  • GUID-konfliktid võivad siiski esineda.
  • Rakendamiseks dokumentatsioon puudub.

Viimasel meetodil on rohkem eeliseid kui puudusi. Praegu pole see aga dokumentatsiooni puudumise tõttu kuigi populaarne ja seetõttu peatume sellel üksikasjalikult.

Ühtsuse paketihaldur

Unity Package Manager (UPM) on paketihaldustööriist. See lisati Unity 2018.1-s ja seda kasutati ainult Unity Technologiesi välja töötatud pakettide jaoks. Alates versioonist 2018.3 sai aga võimalikuks kohandatud pakettide lisamine.

Ühtsuse paketihaldur
Unity paketihalduri liides

Paketid ei satu projekti allikatesse (varade kataloog). Need on eraldi kataloogis %projectFolder%/Library/PackageCache ja ei mõjuta projekti mingil moel, nende ainus mainimine lähtekoodis on failis packages/manifest.json.

Ühtsuse paketihaldur
Paketid projekti failisüsteemis

Paketi allikad

UPM saab kasutada mitut paketi allikat:

1. Failisüsteem.

plussid:

  • Rakendamise kiirus.
  • Ei vaja kolmanda osapoole tööriistu.

miinuseid:

  • Raskused versioonide loomisel.
  • Jagatud juurdepääs failisüsteemile on vajalik kõigile, kes projektiga töötavad.

2. Giti hoidla.

plussid:

  • Kõik, mida vajate, on Giti hoidla.

miinuseid:

  • Te ei saa UPM-i akna kaudu versioonide vahel vahetada.
  • Ei tööta kõigi Giti hoidlate puhul.

3. npm hoidla.

plussid:

  • Toetab täielikult UPM-i funktsioone ja seda kasutatakse ametlike Unity pakettide levitamiseks.

miinuseid:

  • Praegu ignoreerib kõiki pakettide stringversioone, välja arvatud "-preview".

Allpool vaatleme UPM + npm rakendust. See pakett on mugav, kuna see võimaldab teil töötada mis tahes tüüpi ressurssidega ja hallata paketi versioone ning toetab täielikult ka UPM-i loomulikku liidest.

Saate seda kasutada npm-hoidlana Verdaccio. Seal on üksikasjalik dokumentatsiooni, ja selle käivitamiseks on vaja vaid paari käsku.

Keskkonna seadistamine

Kõigepealt peate installima node.js.

Paketi koostamine

Paketi loomiseks peate faili paigutama package.json, mis seda kirjeldab, selle paketi sisuga kataloogi. Peate tegema järgmist.

Minge projektikataloogi, mille jaoks tahame paketti teha.

Käivitage käsk npm init ja sisestage dialoogiaknas vajalikud väärtused. Nime jaoks määrake nimi vastupidises domeenivormingus, näiteks com.plarium.somepackage.
Paketi nime mugavaks kuvamiseks lisage faili package.json atribuut displayName ja täitke see.

Kuna npm on js-orienteeritud, sisaldab fail põhi- ja skriptide atribuute, mida me ei vaja ja mida Unity ei kasuta. Parem on need eemaldada, et mitte segada pakendi kirjeldust. Fail peaks välja nägema umbes selline:

  1. Minge projektikataloogi, mille jaoks tahame paketti teha.
  2. Käivitage käsk npm init ja sisestage dialoogiaknas vajalikud väärtused. Nime jaoks määrake nimi vastupidises domeenivormingus, näiteks com.plarium.somepackage.
  3. Paketi nime mugavaks kuvamiseks lisage faili package.json atribuut displayName ja täitke see.
  4. Kuna npm on js-orienteeritud, sisaldab fail põhi- ja skriptide atribuute, mida me ei vaja ja mida Unity ei kasuta. Parem on need eemaldada, et mitte segada pakendi kirjeldust. Fail peaks välja nägema umbes selline:
    {
     "name": "com.plarium.somepackage",
     "displayName": "Some Package",
     "version": "1.0.0",
     "description": "Some Package Description",
     "keywords": [
       "Unity",
       "UPM"
     ],
     "author": "AUTHOR",
     "license": "UNLICENSED"
    }

  5. Avage Unity ja genereerige faili package.json jaoks meta-fail (Unity ei näe varasid ilma metafailideta, Unity paketid avatakse kirjutuskaitstud kujul).

Paki saatmine

Paki saatmiseks peate käivitama käsu: npm publish --registry *адрес до хранилища пакетов*.

Pakettide installimine ja värskendamine Unity Package Manageri kaudu

Unity projekti paketi lisamiseks vajate:

  1. Lisa faili manifest.json teave pakettide allika kohta. Selleks tuleb vara lisada scopedRegistries ja märkige ulatused ja lähteaadress, kust konkreetseid ulatusi otsitakse.
    
    "scopedRegistries": [
       {
         "name": "Main",
         "url": "адрес до хранилища пакетов",
         "scopes": [
           "com.plarium"
         ]
       }
     ]
    
  2. Minge Unity'i ja avage paketihalduri aken (kohandatud pakettidega töötamine ei erine tööst sisseehitatud pakettidega).
  3. Valige Kõik paketid.
  4. Otsige üles vajalik pakett ja lisage see.

Ühtsuse paketihaldur

Allikatega töötamine ja silumine

Selleks, et allikad oleksid projektiga ühendatud, peate looma Assamblee definitsioon paketi jaoks.

Pakettide kasutamine ei piira teie silumisvõimalusi. Kuid Unity pakettidega töötades ei saa te IDE-sse minna, klõpsates konsoolis veale, kui viga ilmnes paketis. Selle põhjuseks on asjaolu, et Unity ei näe skripte eraldi failidena, kuna koostedefinitsiooni kasutamisel kogutakse need teeki ja kaasatakse projekti. Projekti allikatega töötades on saadaval IDE klõpsamine.

Skript ühendatud paketiga projektis:

Ühtsuse paketihaldur
Skript paketist koos töötava katkestuspunktiga:

Ühtsuse paketihaldur

Pakettide kiireloomulised parandused

Projektile lisatud ühtsuse paketid on kirjutuskaitstud, kuid neid saab muuta paketi vahemälus. Selleks vajate:

  1. Avage pakett paketi vahemälus.

    Ühtsuse paketihaldur

  2. Tehke vajalikud muudatused.
  3. Värskenda failis olevat versiooni package.json.
  4. Saada pakk npm publish --registry *адрес до хранилища пакетов*.
  5. Värskendage paketi versiooni parandatud versiooniks UPM-i liidese kaudu.

Pakettimpordi konfliktid

Pakettide importimisel võivad tekkida järgmised GUID-konfliktid:

  1. Pakend – pakend. Kui paketi importimisel avastatakse, et juba lisatud paketid sisaldavad sama GUID-ga varasid, siis imporditud paketist vastavate GUID-dega varasid projekti ei lisata.
  2. Pakett on projekt. Kui paketi importimisel avastatakse, et projekt sisaldab varasid, millel on kattuvad GUID-id, siis paketist varasid projekti ei lisata. Nendest sõltuvad varad hakkavad aga kasutama projekti varasid.

Varade ülekandmine projektist paketti

Kui teisaldate vara projektist paketti ajal, mil Unity on avatud, siis selle funktsionaalsus säilib ja sõltuvate varade lingid hakkavad paketist pärit vara kasutama.

Oluline: vara kopeerimisel projektist paketti tekib ülaltoodud jaotises kirjeldatud konflikt „Pakett – projekt”.

Võimalikud lahendused konfliktidele

  1. GUID-de ümbermääramine meie enda algoritmide abil kõigi varade importimisel, et vältida kokkupõrkeid.
  2. Kõigi varade lisamine ühte projekti ja seejärel pakettideks jagamine.
  3. Kõigi varade GUID-sid sisaldava andmebaasi loomine ja pakettide saatmisel valideerimise läbiviimine.

Järeldus

UPM on uus lahendus Unity jagatud ressursside jaotamiseks, mis võib olla väärt alternatiiv olemasolevatele meetoditele. Artiklis kirjeldatud soovitused põhinesid reaalsetel juhtumitel. Loodame, et need on teile kasulikud.

Allikas: www.habr.com

Lisa kommentaar