Unity hija pjattaforma li ilha żmien mhux ħażin u qed tevolvi kontinwament. Madankollu, meta taħdem fiha ma 'diversi proġetti fl-istess ħin, xorta tista' tiltaqa 'ma' diffikultajiet biex tuża sorsi komuni (.cs), libreriji (.dll) u assi oħra (immaġini, ħsejjes, mudelli, prefabs). F'dan l-artikolu se nitkellmu dwar l-esperjenza tagħna b'soluzzjoni nattiva għal problema bħal din għall-Unità.
Metodi ta' Distribuzzjoni tar-Riżorsi Kondiviżi
Hemm aktar minn mod wieħed kif tuża riżorsi kondiviżi għal proġetti differenti, iżda kull approċċ għandu l-vantaġġi u l-iżvantaġġi tiegħu.
1. Duplikazzjoni - aħna nidduplikaw ir-riżorsi bejn proġetti "bl-idejn."
Pros:
- Adattat għat-tipi kollha ta 'riżorsi.
- Ebda problemi ta 'dipendenza.
- M'hemm l-ebda problemi bil-GUIDs tal-assi.
Cons:
- Repożitorji ġganti.
- M'hemm l-ebda possibbiltà ta 'verżjoni.
- Diffikultà fit-traċċar tal-bidliet fir-riżorsi kondiviżi.
- Diffikultà biex taġġorna r-riżorsi kondiviżi.
2.
Pros:
- Tista 'taħdem mas-sorsi.
- Tista 'tqassam l-assi.
- Ebda problemi ta 'dipendenza.
Cons:
- Esperjenza Git meħtieġa.
- Git mhux faċli ħafna mal-fajls binarji - ser ikollok tikkonnettja LFS.
- Kontroll tal-aċċess għar-repożitorji.
- Diffikultà fl-upgrading u downgrading verżjonijiet.
- Il-ħabtiet GUID huma possibbli u m'hemm l-ebda imġieba ċara min-naħa ta 'Unity biex issolvihom.
3. NuGet - distribuzzjoni ta 'libreriji kondiviżi permezz ta' pakketti NuGet.
Pros:
- Xogħol konvenjenti bi proġetti li ma jiddependux fuq Unity.
- Verżjoni konvenjenti u riżoluzzjoni tad-dipendenza.
Cons:
- Unity ma tistax taħdem ma 'pakketti NuGet barra mill-kaxxa (fuq GitHub tista' ssib NuGet Package Manager għal Unity, li jiffissa dan, iżda hemm xi sfumaturi).
- Diffikultajiet fid-distribuzzjoni ta' tipi oħra ta' assi.
4. Unity Package Manager - distribuzzjoni ta' riżorsi kondiviżi permezz ta' soluzzjoni nattiva għal Unity.
Pros:
- Interfaċċja nattiva biex taħdem ma 'pakketti.
- Protezzjoni kontra l-kitba fuq il-fajls .meta f'pakketti minħabba kunflitti GUID.
- Possibbiltà ta 'verżjoni.
- Kapaċità li tqassam kull tip ta 'riżorsi għall-Unità.
Cons:
- Konflitti GUID xorta jistgħu jseħħu.
- M'hemm l-ebda dokumentazzjoni għall-implimentazzjoni.
L-aħħar metodu għandu aktar vantaġġi milli żvantaġġi. Madankollu, issa mhux popolari ħafna minħabba n-nuqqas ta 'dokumentazzjoni, u għalhekk se noqogħdu fuqha fid-dettall.
Maniġer tal-Pakkett tal-Unità
Unity Package Manager (UPM) hija għodda għall-ġestjoni tal-pakketti. Ġie miżjud f'Unity 2018.1 u ntuża biss għal pakketti li ġew żviluppati minn Unity Technologies. Madankollu, li tibda bil-verżjoni 2018.3, sar possibbli li jiżdiedu pakketti tad-dwana.
Interface tal-Maniġer tal-Pakketti tal-Unità
Il-pakketti ma jispiċċawx fis-sorsi tal-proġett (direttorju tal-Assi). Huma f'direttorju separat %projectFolder%/Library/PackageCache
u ma jaffettwawx il-proġett bl-ebda mod, l-uniku isem tagħhom fil-kodiċi tas-sors huwa fil-fajl packages/manifest.json
.
Pakketti fis-sistema tal-fajl tal-proġett
Sorsi tal-pakkett
UPM jista' juża diversi sorsi ta' pakketti:
1. Sistema ta 'fajls.
Pros:
- Veloċità tal-implimentazzjoni.
- Ma teħtieġx għodda ta 'parti terza.
Cons:
- Diffikultà fil-verżjoni.
- Aċċess kondiviż għas-sistema tal-fajls huwa meħtieġ għal kull min jaħdem mal-proġett.
2. Repożitorju Git.
Pros:
- Kulma għandek bżonn huwa repożitorju Git.
Cons:
- Ma tistax taqleb bejn verżjonijiet mit-tieqa tal-UPM.
- Ma taħdimx mar-repożitorji Git kollha.
3. repożitorju npm.
Pros:
- Jappoġġja bis-sħiħ il-funzjonalità tal-UPM u jintuża biex iqassam pakketti uffiċjali tal-Unity.
Cons:
- Bħalissa tinjora l-verżjonijiet kollha tal-istring tal-pakketti ħlief "-preview".
Hawn taħt se nħarsu lejn l-implimentazzjoni UPM + npm. Dan il-pakkett huwa konvenjenti għaliex jippermettilek taħdem ma 'kwalunkwe tip ta' riżorsi u timmaniġġja l-verżjonijiet tal-pakketti, u wkoll tappoġġja bis-sħiħ l-interface nattiva tal-UPM.
Tista' tużah bħala repożitorju npm
It-twaqqif tal-ambjent
L-ewwel trid tinstalla
Ħolqien ta 'pakkett
Biex toħloq pakkett, trid tpoġġi l-fajl package.json
, li se jiddeskriviha, fid-direttorju bil-kontenut ta' dan il-pakkett. Trid tagħmel dan li ġej:
Mur fid-direttorju tal-proġett li rridu nagħmlu pakkett.
Mexxi l-kmand npm init u daħħal il-valuri meħtieġa waqt id-djalogu. Għall-isem, speċifika l-isem fil-format tad-dominju invers, pereżempju com.plarium.somepackage.
Biex turi b'mod konvenjenti l-isem tal-pakkett, żid il-proprjetà displayName ma package.json u imla.
Peress li npm huwa orjentat lejn js, il-fajl fih il-proprjetajiet prinċipali u skripts li m'għandniex bżonn, li Unity ma tużax. Huwa aħjar li jitneħħew sabiex ma jħajrux id-deskrizzjoni tal-pakkett. Il-fajl għandu jidher xi ħaġa bħal din:
- Mur fid-direttorju tal-proġett li rridu nagħmlu pakkett.
- Mexxi l-kmand npm init u daħħal il-valuri meħtieġa waqt id-djalogu. Għall-isem, speċifika l-isem fil-format tad-dominju invers, pereżempju com.plarium.somepackage.
- Biex turi b'mod konvenjenti l-isem tal-pakkett, żid il-proprjetà displayName ma package.json u imla.
- Peress li npm huwa orjentat lejn js, il-fajl fih il-proprjetajiet prinċipali u skripts li m'għandniex bżonn, li Unity ma tużax. Huwa aħjar li jitneħħew sabiex ma jħajrux id-deskrizzjoni tal-pakkett. Il-fajl għandu jidher xi ħaġa bħal din:
{ "name": "com.plarium.somepackage", "displayName": "Some Package", "version": "1.0.0", "description": "Some Package Description", "keywords": [ "Unity", "UPM" ], "author": "AUTHOR", "license": "UNLICENSED" }
- Iftaħ Unity u ġġenera fajl .meta għal package.json (Unity ma tarax assi mingħajr fajls .meta, il-pakketti għal Unity jinfetħu għall-qari biss).
Tibgħat pakkett
Biex tibgħat il-pakkett trid tħaddem il-kmand: npm publish --registry *адрес до хранилища пакетов*
.
L-installazzjoni u l-aġġornament tal-pakketti permezz tal-Unity Package Manager
Biex iżżid pakkett ma' proġett Unity, għandek bżonn:
- Żid mal-fajl
manifest.json
informazzjoni dwar is-sors tal-pakketti. Biex tagħmel dan għandek bżonn iżżid il-proprjetàscopedRegistries
u indika l-ambiti u l-indirizz tas-sors fejn se jiġu mfittxija ambiti speċifiċi."scopedRegistries": [ { "name": "Main", "url": "адрес до хранилища пакетов", "scopes": [ "com.plarium" ] } ]
- Mur fl-Unità u iftaħ it-tieqa tal-Maniġer tal-Pakketti (il-ħidma b'pakketti tad-dwana mhix differenti milli taħdem ma 'dawk inkorporati).
- Agħżel il-Pakketti Kollha.
- Sib il-pakkett li għandek bżonn u żidu.
Ħidma ma 'sorsi u debugging
Sabiex is-sorsi jkunu konnessi mal-proġett, għandek bżonn toħloq
L-użu ta 'pakketti ma jillimitax l-għażliet tiegħek ta' debugging. Madankollu, meta taħdem ma 'pakketti fl-Unity, ma tistax tmur għall-IDE billi tikklikkja fuq żball fil-console jekk l-iżball seħħ fil-pakkett. Dan minħabba l-fatt li Unity ma tarax l-iskripts bħala fajls separati, peress li meta tuża d-Definizzjoni tal-Assembly huma miġbura f'librerija u inklużi fil-proġett. Meta taħdem ma 'sorsi minn proġett, tikklikkja għall-IDE hija disponibbli.
Skript fi proġett b'pakkett konness:
Skript mill-pakkett b'waqfa tax-xogħol:
Soluzzjonijiet urġenti għall-pakketti
Il-pakketti Unity miżjuda ma' proġett jinqraw biss, iżda jistgħu jiġu editjati fil-cache tal-pakkett. Biex tagħmel dan għandek bżonn:
- Mur fil-pakkett fil-cache tal-pakkett.
- Agħmel il-bidliet meħtieġa.
- Aġġorna l-verżjoni fil-fajl
package.json
. - Ibgħat pakkett
npm publish --registry *адрес до хранилища пакетов*
. - Aġġorna l-verżjoni tal-pakkett għal dik ikkoreġuta permezz tal-interface UPM.
Konflitti ta 'importazzjoni ta' pakketti
Il-kunflitti GUID li ġejjin jistgħu jseħħu meta jiġu importati pakketti:
- Pakkett - pakkett. Jekk, meta jiġi importat pakkett, jiġi skopert li pakketti diġà miżjuda fihom assi bl-istess GUID, assi b'GUIDs li jaqblu mill-pakkett importat ma jiġux miżjuda mal-proġett.
- Pakkett huwa proġett. Jekk, meta jiġi importat pakkett, jiġi skopert li l-proġett fih assi b'GUIDs li jaqblu, allura l-assi mill-pakkett ma jiġux miżjuda mal-proġett. Madankollu, assi li jiddependu minnhom se jibdew jużaw assi mill-proġett.
It-trasferiment tal-assi minn proġett għal pakkett
Jekk tittrasferixxi assi minn proġett għal pakkett waqt li Unity tkun miftuħa, il-funzjonalità tagħha tiġi ppreservata, u links f'assi dipendenti jibdew jużaw l-assi mill-pakkett.
Huwa importanti: Meta tikkopja assi minn proġett għal pakkett, se jseħħ il-kunflitt "Pakkett - Proġett" deskritt fit-taqsima ta' hawn fuq.
Soluzzjonijiet possibbli għall-kunflitti
- Assenjazzjoni mill-ġdid tal-GUIDs bl-użu tal-algoritmi tagħna stess meta timporta l-assi kollha biex telimina l-ħabtiet.
- Iżżid l-assi kollha għal proġett wieħed u mbagħad taqsamhom f'pakketti.
- Il-ħolqien ta' database li jkun fiha l-GUIDs tal-assi kollha u t-twettiq tal-validazzjoni meta tibgħat pakketti.
Konklużjoni
UPM hija soluzzjoni ġdida għad-distribuzzjoni tar-riżorsi kondiviżi f'Unity, li tista' tkun alternattiva denja għall-metodi eżistenti. Ir-rakkomandazzjonijiet deskritti fl-artiklu kienu bbażati fuq każijiet reali. Nittamaw li ssibhom utli.
Sors: www.habr.com