Unity â platvorm, mis eksisteerib juba pikka aega ja areneb pidevalt. Siiski, töötades selles mitme projektiga korraga, vĂ”ib endiselt esineda keerukusi ĂŒhiste lĂ€htekohtade (.cs), raamatukogude (.dll) ja teiste varade (pildid, helid, mudelid, prefabad) kasutamisel. Selles artiklis rÀÀgime meie kogemusest sellise probleemi lahendamiseks Unitys, kasutades kohalikke lahendusi.

Ăhiste ressursside levitamise meetodid
On rohkem kui ĂŒks viis ĂŒhiste ressursside kasutamiseks erinevates projektides, kuid igal lĂ€henemisel on oma plussid ja miinused.
1. Dubleerimine â âkĂ€tegaâ dubleerime ressursid projektide vahel.
Plussid:
- Sobib kĂ”ikide ressursitĂŒĂŒpide jaoks.
- Probleeme sÔltuvustega ei esine.
- Probleeme varade GUIDâidega ei esine.
Miinused:
- Hiiglaslikud hoidlad.
- Ei ole versiooni tegemise vÔimalust.
- Ressursside muudatuste jÀlgimise keerukus.
- Ressursside vÀrskendamise keerukus.
2. â ĂŒhiste ressursside levitamine vĂ€liste alammoodulite kaudu.
Plussid:
- Saab töötada lÀhtekohtadega.
- Saab levitada varasid.
- Probleeme sÔltuvustega ei esine.
Miinused:
- On vajalik oskus töötada Gitiga.
- Git ei ole binaarsete failidega vĂ€ga sĂ”bralik â tuleb kasutada LFS-i.
- JuurdepÀÀsu piiramine hoidlatele.
- Probleemid versiooni tÔstmisel ja langetamisel.
- GUIDâide kollisjonid ja Unity ebaselge kĂ€itumine nende lahendamisel.
3. NuGet â ĂŒhiste raamatukogude levitamine NuGet-packete kaudu.
Plussid:
- Mugav töö projektidega, mis ei sÔltu Unityst.
- Mugav versioonide haldamine ja sÔltuvuste lahendamine.
Miinused:
- Unity ei oska NuGet-pakette âotsast pealeâ kasutada (GitHubis on saadaval NuGet Package Manager for Unity, mis selle probleemi lahendab, kuid on nĂŒansse).
- ĂlejÀÀnud varade levitamise keerukused.
4. Unity Package Manager â ĂŒhiste ressursside levitamine Unity jaoks kohaliku lahenduse kaudu.
Plussid:
- Kohalik liides pakettide haldamiseks.
- Kaitse .meta-failide ĂŒle kirjutamise eest pakettides, kui GUIDâid on konfliktis.
- Versioonimise vÔimalus.
- VĂ”imalus levitada kĂ”iki ressursitĂŒĂŒpe Unity jaoks.
Miinused:
- GUIDâide konfliktid vĂ”ivad endiselt aset leida.
- Dokumentatsiooni puudumine rakendamiseks.
Viimane meetod omab rohkem eeliseid kui puudusi. Siiski ei ole see praegu vĂ€ga populaarne dokumentatsiooni puudumise tĂ”ttu, seega peatume sellel ĂŒksikasjalikumalt.
Unity Package Manager
Unity Package Manager (edasi UPM) on pakettide haldamise tööriist. Seda lisati Unity 2018.1 ja seda kasutati ainult Unity Technologies'i arendatud pakettide jaoks. Kuid alates versioonist 2018.3 on vÔimalik lisada kohandatud pakette.

Unity Package Manageri liides
Pakette ei salvestata projekti lÀhtefailidesse (Assets katalooge). Need asuvad eraldi kataloogis %projectFolder%/Library/PackageCache , ega mÔjuta projekti, nende ainus mainimine lÀhtefailides on failis packages/manifest.json.

Pakettide asukoht projekti failisĂŒsteemis
Pakettide allikad
UPM vÔib kasutada mitmeid pakettide allikaid:
1. FailisĂŒsteem.
Plussid:
- Teostuse kiirus.
- Ei nÔua kolmandate osapoolte tööriistu.
Miinused:
- Versioonihalduse keerukus.
- NĂ”uab, et kĂ”ik, kes projektiga töötavad, pÀÀseksid failisĂŒsteemile juurde.
2. Git-repositoorium.
Plussid:
- NÔutav on ainult Git-repositoorium.
Miinused:
- Ei saa versioonide vahel vahetada UPM aknas.
- Ei toimi kÔikide Git-repositooriumidega.
3. npm-repositoorium.
Plussid:
- Toetab tÀielikult UPM funktsionaalsust ja seda kasutatakse ametlike Unity paketide jaotamiseks.
Miinused:
- Praegu ignoreerib see kÔikide pakettide reaalversioonid, vÀlja arvatud «-preview».
Allpool vaatame UPM + npm rakendust. See kombinatsioon on mugav, kuna vĂ”imaldab töötada mis tahes ressursitĂŒĂŒpidega ja hallata pakettide versioone ning toetab tĂ€ielikult UPM kohalikku liidest.
Npm-repositooriumina saab kasutada . Selle kohta on olemas pÔhjalik , ja selle kÀivitamiseks on vajalik vaid paar kÀsku.
Keskkonna seadistamine
Esialgu tuleb installida .
Paketi loomine
Paketi loomiseks tuleb faili package.json, mis seda kirjeldab, asetada selle paketi sisu katalooge. Peab tegema jÀrgmist:
Minna projekti katalooge, mille soovime paketiks muuta.
Teha kÀsk npm init ja dialooge kÀies sisestada vajalikud vÀÀrtused. Nime jaoks mÀÀrake nimi pööratud domeeni formaadis, nÀiteks com.plarium.somepackage.
Paketi nime mugavaks kuvamiseks â lisage properties displayName faili package.json ja tĂ€itke see.
Kuna npm on js-orienteeritud, sisaldab fail meile mittevajalikke omadusi main ja scripts, mida Unity ei kasuta. Parim on need eemaldada, et mitte paketi kirjeldust segadusse ajada. Fail peaks vÀlja nÀgema jÀrgmine:
- Minna projekti katalooge, mille soovime paketiks muuta.
- Teha kÀsk npm init ja dialooge kÀies sisestada vajalikud vÀÀrtused. Nime jaoks mÀÀrake nimi pööratud domeeni formaadis, nÀiteks com.plarium.somepackage.
- Paketi nime mugavaks kuvamiseks â lisage properties displayName faili package.json ja tĂ€itke see.
- Kuna npm on js-orienteeritud, sisaldab fail meile mittevajalikke omadusi main ja scripts, mida Unity ei kasuta. Parim on need eemaldada, et mitte paketi kirjeldust segadusse ajada. Fail peaks vÀlja nÀgema jÀrgmine:
{ "name": "com.plarium.somepackage", "displayName": "Some Package", "version": "1.0.0", "description": "Some Package Description", "keywords": [ "Unity", "UPM" ], "author": "AUTHOR", "license": "UNLICENSED" } - Ava avatud Unity ja genereerida .meta fail package.json jaoks (Unity ei nĂ€e varasid ilma .meta failideta, Unity paketid avatakse ainult lugemisreĆŸiimis).
Paketie saatmine
Paketi saatmiseks tuleb tÀita kÀsk: npm publish --registry *pakettide hoidla aadress*.
Pakettide installimine ja uuendamine lÀbi Unity Package Manageri
Paketi lisamiseks Unity projekti tuleb:
- TĂ€itke fail
manifest.jsonteave paketide allika kohta. Selleks tuleb lisada omadusscopedRegistriesja mÀÀrata skoopid ja allika aadress, mille kaudu otsitakse konkreetseid skoopide."scopedRegistries": [ { "name": "Main", "url": "pakettide hoidla aadress", "scopes": [ "com.plarium" ] } ] - Liikuge Unity'sse ja avage Package Manageri aken (töö kohandatud pakettidega ei erine sisseehitatud töötamisest).
- Vali KÔik paketid.
- Leia vajalik pakett ja lisa see.

Allikakoodide töötamine ja silumine
Kuna allikakoodid peavad projektiga ĂŒhenduma, tuleb luua paketi jaoks.
Pakettide kasutamine ei piira silumise vĂ”imalusi. Kuid Unity's töötades pakettidega ei saa IDE'sse klikkida veale konsoolis, kui viga tekkis paketis. See on seotud sellega, et Unity ei nĂ€e skripte eraldi failidena ning Assembly Definition'i kasutamisel kogutakse need teegiks ja ĂŒhendatakse projekti. Allikakoodide töötamisel projekti seest on IDE'sse klikkides pÀÀs saadaval.
Projektis, kus on ĂŒhendatud pakett, skript:

Paketi skript koos töötava murdepunktiga:

Kiirete muudatuste tegemine pakettidesse
Projekti lisatud Unity paketid on avatud ainult lugemiseks, kuid neid saab muuta paketide vahemÀlus. Selleks tuleb:
- Liikuge paketti pakettide vahemÀlus.

- Tee vajalikud muudatused.
- Uuendage versioon faili
package.json. - Saada pakett
npm publish --registry *pakettide hoidla aadress*. - Uuendage paketi versioon parandatud lÀbi UPM liidese.
Pakettide importimise konfliktid
Pakettide importimise kÀigus vÔivad ilmneda jÀrgmised GUID konfliktid:
- Pakett â pakett. Kui paketi importimise kĂ€igus tuvastatakse, et juba lisatud pakettides on varasid sama GUID'iga, siis importitava paketi GUID'iga varasid ei lisata projekti.
- Paket on projekt. Kui paketi importimisel selgub, et projektis on varasid, mille GUIDid kattuvad, siis paketi varad ei lisandu projekti. Siiski hakkavad sÔltuvad varad kasutama projekti varasid.
Varade ĂŒlekanne projektist paketti
Kui varandust projektist paketti ĂŒle kanda avatud Unity's, sĂ€ilib selle funktsionaalsus ning sĂ”ltuvate varade lingid hakkavad kasutama varandust paketist.
Oluline: kui varandust projektist paketti kopeerida, toimub konflikt "Paket - projekt", nagu eelnevas osas on kirjeldatud.
VÔimalikud konfliktide lahendused
- GUIDide taas mÀÀramine enda algoritmide jÀrgi, importides kÔik varad, et vÀltida kattumisi.
- KĂ”ikide varade lisamine ĂŒhte projekti, mille jĂ€rgnevalt jagatakse pakettideks.
- Andmebaasi loomine, kuhu on kogutud kÔigi varade GUIDid ja valideerimine pakettide saatmise ajal.
KokkuvÔte
UPM on uus lahendus, et jagada ĂŒldisi ressursse Unity's, mis vĂ”ib olla vÀÀriline alternatiiv olemasolevatele meetoditele. Artiklis toodud soovitused on sĂŒndinud reaalsest praktiseerimisest. Loodame, et need on teile kasulikud.
Allikas: habr.com

