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.
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.
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.
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
.
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
Keskkonna seadistamine
Kõigepealt peate installima
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:
- 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:
{ "name": "com.plarium.somepackage", "displayName": "Some Package", "version": "1.0.0", "description": "Some Package Description", "keywords": [ "Unity", "UPM" ], "author": "AUTHOR", "license": "UNLICENSED" }
- 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:
- Lisa faili
manifest.json
teave pakettide allika kohta. Selleks tuleb vara lisadascopedRegistries
ja märkige ulatused ja lähteaadress, kust konkreetseid ulatusi otsitakse."scopedRegistries": [ { "name": "Main", "url": "адрес до хранилища пакетов", "scopes": [ "com.plarium" ] } ]
- Minge Unity'i ja avage paketihalduri aken (kohandatud pakettidega töötamine ei erine tööst sisseehitatud pakettidega).
- Valige Kõik paketid.
- Otsige üles vajalik pakett ja lisage see.
Allikatega töötamine ja silumine
Selleks, et allikad oleksid projektiga ühendatud, peate looma
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:
Skript paketist koos töötava katkestuspunktiga:
Pakettide kiireloomulised parandused
Projektile lisatud ühtsuse paketid on kirjutuskaitstud, kuid neid saab muuta paketi vahemälus. Selleks vajate:
- Avage pakett paketi vahemälus.
- Tehke vajalikud muudatused.
- Värskenda failis olevat versiooni
package.json
. - Saada pakk
npm publish --registry *адрес до хранилища пакетов*
. - Värskendage paketi versiooni parandatud versiooniks UPM-i liidese kaudu.
Pakettimpordi konfliktid
Pakettide importimisel võivad tekkida järgmised GUID-konfliktid:
- 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.
- 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
- GUID-de ümbermääramine meie enda algoritmide abil kõigi varade importimisel, et vältida kokkupõrkeid.
- Kõigi varade lisamine ühte projekti ja seejärel pakettideks jagamine.
- 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