Unity Package Manager

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.

Unity Package Manager

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. Git-submoduloj — distribuado de komunaj rimedoj per eksteraj submoduloj.

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
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.

Unity Package Manager
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 Verdaccio. Estas detala dokumentado, kaj nur kelkaj komandoj estas bezonataj por ruli ĝin.

Agordo de la medio

Unue vi devas instali node.js.

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:

  1. Iru al la projekta dosierujo, kiun ni volas fari pakaĵon.
  2. 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.
  3. Por oportune montri la pakaĵnomon, aldonu la displayName-posedaĵon al package.json kaj plenigu ĝin.
  4. Ĉ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"
    }

  5. 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:

  1. Aldoni al dosiero manifest.json informoj pri la fonto de la pakaĵoj. Por fari tion, vi devas aldoni la posedaĵon scopedRegistries kaj indiku la ampleksojn kaj la fontadreson kie specifaj medioj estos serĉataj.
    
    "scopedRegistries": [
       {
         "name": "Main",
         "url": "адрес до хранилища пакетов",
         "scopes": [
           "com.plarium"
         ]
       }
     ]
    
  2. Iru al Unity kaj malfermu la fenestron de Paka Administranto (labori kun kutimaj pakaĵoj ne diferencas de labori kun enkonstruitaj).
  3. Elektu Ĉiuj Pakoj.
  4. Trovu la pakaĵon, kiun vi bezonas kaj aldonu ĝin.

Unity Package Manager

Laborante kun fontoj kaj senararigado

Por ke la fontoj estu konektitaj al la projekto, vi devas krei Asemblea Difino por la pako.

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:

Unity Package Manager
Skripto de la pakaĵo kun funkcia rompopunkto:

Unity Package Manager

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:

  1. Iru al pakaĵo en pakaĵkaŝmemoro.

    Unity Package Manager

  2. Faru la necesajn ŝanĝojn.
  3. Ĝisdatigu version en dosiero package.json.
  4. Sendu pakon npm publish --registry *адрес до хранилища пакетов*.
  5. Ĝ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:

  1. 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.
  2. 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

  1. Reasigni GUID-ojn uzante niajn proprajn algoritmojn dum importado de ĉiuj aktivoj por forigi koliziojn.
  2. Aldonante ĉiujn aktivaĵojn al unu projekto kaj poste dividante ilin en pakaĵojn.
  3. 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

Aldoni komenton