Unity estas platformo, kiu ekzistas de sufiĉe da tempo kaj konstante evoluas. Tamen, kiam vi laboras en ĝi kun pluraj projektoj samtempe, vi ankoraŭ povas renkonti malfacilaĵojn en uzado de komunaj fontoj (.cs), bibliotekoj (.dll) kaj aliaj valoraĵoj (bildoj, sonoj, modeloj, prefabaĵoj). En ĉi tiu artikolo ni parolos pri nia sperto kun indiĝena solvo al tia problemo por Unity.
Komunaj Rimedaj Distribuaj Metodoj
Estas pli ol unu maniero uzi komunajn rimedojn por malsamaj projektoj, sed ĉiu aliro havas siajn avantaĝojn kaj malavantaĝojn.
1. Duobligo - ni duobligas rimedojn inter projektoj "mane".
Pros:
- Taŭga por ĉiuj specoj de rimedoj.
- Neniuj dependecaj problemoj.
- Ne estas problemoj kun valoraĵaj GUID-oj.
Kons:
- Gigantaj deponejoj.
- Ne estas ebleco de versionado.
- Malfacilaĵo spuri ŝanĝojn al komunaj rimedoj.
- Malfacilaĵo ĝisdatigi komunajn rimedojn.
2.
Pros:
- Vi povas labori kun la fontoj.
- Vi povas distribui valoraĵojn.
- Neniuj dependecaj problemoj.
Kons:
- Git-sperto bezonata.
- Git ne tre amikas kun binaraj dosieroj - vi devos konekti LFS.
- Kontrolo de aliro por deponejoj.
- Malfacilaĵo kun ĝisdatigo kaj malpliigo de versioj.
- GUID-kolizioj estas eblaj kaj ne ekzistas klara konduto flanke de Unity por solvi ilin.
3. NuGet - distribuado de komunaj bibliotekoj per NuGet-pakaĵoj.
Pros:
- Konvena laboro kun projektoj, kiuj ne dependas de Unity.
- Konvena versio kaj dependeca rezolucio.
Kons:
- Unity ne povas funkcii kun NuGet-pakaĵoj el la skatolo (sur GitHub vi povas trovi NuGet Package Manager por Unity, kiu riparas ĉi tion, sed estas kelkaj nuancoj).
- Malfacilaĵoj en distribuado de aliaj specoj de aktivaĵoj.
4. Unity Package Manager - distribuado de komunaj rimedoj per denaska solvo por Unity.
Pros:
- Denaska interfaco por labori kun pakaĵoj.
- Protekto kontraŭ anstataŭigo de .meta dosieroj en pakaĵoj pro GUID-konfliktoj.
- Eblo de versionado.
- Kapablo distribui ĉiajn rimedojn por Unity.
Kons:
- GUID-konfliktoj ankoraŭ povas okazi.
- Ne ekzistas dokumentaro por efektivigo.
Ĉi-lasta metodo havas pli da avantaĝoj ol malavantaĝoj. Tamen, ĝi ne estas tre populara nun pro la manko de dokumentado, kaj tial ni detale pritraktos ĝin.
Unity Package Manager
Unity Package Manager (UPM) estas paka administra ilo. Ĝi estis aldonita en Unity 2018.1 kaj estis uzata nur por pakaĵoj, kiuj estis evoluigitaj de Unity Technologies. Tamen, ekde versio 2018.3, eblis aldoni kutimajn pakaĵojn.
Unity Package Manager Interfaco
La pakaĵoj ne finiĝas en la projektfontoj (Assets dosierujo). Ili estas en aparta dosierujo %projectFolder%/Library/PackageCache
kaj neniel influas la projekton, ilia nura mencio en la fontkodo estas en la dosiero packages/manifest.json
.
Pakoj en la projekta dosiersistemo
Pakaj fontoj
UPM povas uzi plurajn pakajn fontojn:
1. Dosiersistemo.
Pros:
- Rapido de efektivigo.
- Ne postulas triajn ilojn.
Kons:
- Malfacilo en versionado.
- Komuna aliro al la dosiersistemo estas postulata por ĉiuj laborantaj kun la projekto.
2. Git-deponejo.
Pros:
- Ĉio, kion vi bezonas, estas Git-deponejo.
Kons:
- Vi ne povas ŝanĝi inter versioj per la fenestro de UPM.
- Ne funkcias kun ĉiuj Git-deponejoj.
3. npm-deponejo.
Pros:
- Plene subtenas UPM-funkciecon kaj estas uzata por distribui oficialajn Unity-pakaĵojn.
Kons:
- Nuntempe ignoras ĉiujn ĉenajn versiojn de pakaĵoj krom "-preview".
Malsupre ni rigardos la efektivigon de UPM + npm. Ĉi tiu pakaĵo estas oportuna ĉar ĝi permesas vin labori kun ajna tipo de rimedoj kaj administri pakaĵversiojn, kaj ankaŭ plene subtenas la denaskan UPM-interfacon.
Vi povas uzi ĝin kiel npm-deponejon
Agordo de la medio
Unue vi devas instali
Kreante pakaĵon
Por krei pakaĵon, vi devas meti la dosieron package.json
, kiu priskribos ĝin, al la dosierujo kun la enhavo de ĉi tiu pako. Vi devas fari la jenon:
Iru al la projekta dosierujo, kiun ni volas fari pakaĵon.
Rulu la komandon npm init kaj enigu la postulatajn valorojn dum la dialogo. Por nomo, specifu la nomon en inversa domajna formato, ekzemple com.plarium.somepackage.
Por oportune montri la pakaĵnomon, aldonu la displayName-posedaĵon al package.json kaj plenigu ĝin.
Ĉar npm estas js-orientita, la dosiero enhavas la ĉefajn kaj skriptojn, kiujn ni ne bezonas, kiujn Unity ne uzas. Pli bone estas forigi ilin por ne malordigi la pakaĵpriskribon. La dosiero devus aspekti kiel ĉi tio:
- Iru al la projekta dosierujo, kiun ni volas fari pakaĵon.
- Rulu la komandon npm init kaj enigu la postulatajn valorojn dum la dialogo. Por nomo, specifu la nomon en inversa domajna formato, ekzemple com.plarium.somepackage.
- Por oportune montri la pakaĵnomon, aldonu la displayName-posedaĵon al package.json kaj plenigu ĝin.
- Ĉar npm estas js-orientita, la dosiero enhavas la ĉefajn kaj skriptojn, kiujn ni ne bezonas, kiujn Unity ne uzas. Pli bone estas forigi ilin por ne malordigi la pakaĵpriskribon. La dosiero devus aspekti kiel ĉi tio:
{ "name": "com.plarium.somepackage", "displayName": "Some Package", "version": "1.0.0", "description": "Some Package Description", "keywords": [ "Unity", "UPM" ], "author": "AUTHOR", "license": "UNLICENSED" }
- Malfermu Unity kaj generu .meta dosieron por package.json (Unity ne vidas aktivaĵojn sen .meta dosieroj, pakoj por Unity estas malfermitaj nurlegebla).
Sendante pakaĵon
Por sendi la pakaĵon vi devas ruli la komandon: npm publish --registry *адрес до хранилища пакетов*
.
Instali kaj ĝisdatigi pakaĵojn per Unity Package Manager
Por aldoni pakaĵon al Unity-projekto, vi bezonas:
- Aldoni al dosiero
manifest.json
informoj pri la fonto de la pakaĵoj. Por fari tion, vi devas aldoni la posedaĵonscopedRegistries
kaj indiku la ampleksojn kaj la fontadreson kie specifaj medioj estos serĉataj."scopedRegistries": [ { "name": "Main", "url": "адрес до хранилища пакетов", "scopes": [ "com.plarium" ] } ]
- Iru al Unity kaj malfermu la fenestron de Paka Administranto (labori kun kutimaj pakaĵoj ne diferencas de labori kun enkonstruitaj).
- Elektu Ĉiuj Pakoj.
- Trovu la pakaĵon, kiun vi bezonas kaj aldonu ĝin.
Laborante kun fontoj kaj senararigado
Por ke la fontoj estu konektitaj al la projekto, vi devas krei
Uzado de pakaĵoj ne limigas viajn sencimigajn elektojn. Tamen, kiam vi laboras kun pakaĵoj en Unity, vi ne povas iri al la IDE alklakante eraron en la konzolo se la eraro okazis en la pakaĵo. Ĉi tio estas pro la fakto, ke Unity ne vidas skriptojn kiel apartajn dosierojn, ĉar kiam oni uzas la Asemblean Difinon, ili estas kolektitaj en bibliotekon kaj inkluzivitaj en la projekto. Kiam vi laboras kun fontoj de projekto, alklaki al la IDE estas disponebla.
Skripto en projekto kun konektita pako:
Skripto de la pakaĵo kun funkcia rompopunkto:
Urĝaj korektoj al pakaĵoj
Unity-pakaĵoj aldonitaj al projekto estas nurlegeblaj, sed redakteblaj en la paka kaŝmemoro. Por fari tion vi bezonas:
- Iru al pakaĵo en pakaĵkaŝmemoro.
- Faru la necesajn ŝanĝojn.
- Ĝisdatigu version en dosiero
package.json
. - Sendu pakon
npm publish --registry *адрес до хранилища пакетов*
. - Ĝisdatigu la pakaĵversion al la korektita per la UPM-interfaco.
Konfliktoj pri paka importo
La sekvaj GUID-konfliktoj povas okazi dum importado de pakaĵoj:
- Package - package. Se, dum importado de pakaĵo, oni malkovras, ke jam aldonitaj pakaĵoj enhavas aktivaĵojn kun la sama GUID, aktivaĵoj kun kongruaj GUID-oj de la importita pakaĵo ne estos aldonitaj al la projekto.
- Pako estas projekto. Se, dum importado de pakaĵo, estas malkovrite, ke la projekto enhavas aktivaĵojn kun kongruaj GUID-oj, tiam la valoraĵoj de la pakaĵo ne estos aldonitaj al la projekto. Tamen, valoraĵoj kiuj dependas de ili komencos uzi valoraĵojn de la projekto.
Transdono de aktivoj de projekto al pako
Se vi transdonas valoraĵon de projekto al pakaĵo dum Unity estas malfermita, ĝia funkcieco estos konservita, kaj ligiloj en dependaj aktivoj komencos uzi la valoraĵon de la pakaĵo.
gravaj: Kiam oni kopias valoraĵon de projekto al pakaĵo, okazos la konflikto "Pako - Projekto" priskribita en la supra sekcio.
Eblaj solvoj al konfliktoj
- Reasigni GUID-ojn uzante niajn proprajn algoritmojn dum importado de ĉiuj aktivoj por forigi koliziojn.
- Aldonante ĉiujn aktivaĵojn al unu projekto kaj poste dividante ilin en pakaĵojn.
- Krei datumbazon enhavantan la GUID-ojn de ĉiuj aktivaĵoj kaj farante validigon dum sendado de pakaĵoj.
konkludo
UPM estas nova solvo por distribui komunajn rimedojn en Unity, kiu povas esti inda alternativo al ekzistantaj metodoj. La rekomendoj priskribitaj en la artikolo baziĝis sur realaj kazoj. Ni esperas, ke vi trovos ilin utilaj.
fonto: www.habr.com