Unity Package Manager

Unity — platforma, kas pastāv jau ilgu laiku un nepārtraukti attīstās. Tomēr, strādājot tajā ar vairākiem projektiem vienlaikus, joprojām var saskarties ar grūtībām, izmantojot kopējos avotus (.cs), bibliotēkas (.dll) un pārējos resursus (attēli, skaņas, modeli, prefabi). Šajā rakstā mēs pastāstīsim par mūsu pieredzi, strādājot ar vietēju risinājumu šādai problēmai Unity.

Unity Package Manager

Kopējo resursu izplatīšanas metodes

Ir vairāk nekā viens veids, kā izmantot kopējos resursus dažādiem projektiem, taču katram pieejamajam risinājumam ir savi plusi un mīnusi.

1. Dublēšana — "rokām" dublējam resursus starp projektiem.

Priekšrocības:

  • Der visiem resursu veidiem.
  • Nav problēmu ar atkarībām.
  • Nav problēmu ar resursu GUID.

Mīnusi:

  • Milzīgas repozitorijas.
  • Nav versiju kontroles iespēju.
  • Grūtības izsekot izmaiņām kopējos resursos.
  • Grūtības atjaunināt kopējos resursus.

2. Git apakšmoduļi — kopējo resursu izplatīšana caur ārējiem apakšmoduļiem.

Priekšrocības:

  • Var strādāt ar avotiem.
  • Var izplatīt resursus.
  • Nav problēmu ar atkarībām.

Mīnusi:

  • Nepieciešama prasme strādāt ar Git.
  • Git nav ļoti draudzīgs ar binārajām failiem — nāksies ieslēgt LFS.
  • Piekļuves ierobežojumi repozitorijiem.
  • Grūtības, atjauninot un samazinot versijas.
  • Iespējamas GUID kolīzijas un Unity nevar nodrošināt skaidru rīcību to novēršanai.

3. NuGet — kopējo bibliotēku izplatīšana caur NuGet paketēm.

Priekšrocības:

  • Ērta darbība ar projektiem, kas nav atkarīgi no Unity.
  • Ērta versiju pārvaldība un atkarību risināšana.

Mīnusi:

  • Unity nevar strādāt ar NuGet paketēm "no kastes" (GitHub var atrast NuGet Package Manager for Unity, kas to labo, taču ir nianses).
  • Grūtības, izplatot pārējos resursus.

4. Unity Package Manager — kopējo resursu izplatīšana caur vietēju risinājumu Unity.

Priekšrocības:

  • Vietējais interfeiss, lai strādātu ar paketēm.
  • Aizsargā pret .meta failu pārrakstīšanu pakotnēs GUID konfliktu gadījumā.
  • Iespēja veikt versiju kontroli.
  • Iespēja izplatīt visus resursu veidus Unity.

Mīnusi:

  • Vēl joprojām var rasties GUID konflikti.
  • Nav dokumentācijas izpildei.

Pēdējais veids ir ar vairāk priekšrocībām nekā trūkumiem. Tomēr tas šobrīd nav ļoti populārs, ņemot vērā dokumentācijas trūkumu, tāpēc mēs pievērsīsimies tam detalizēti.

Unity Package Manager

Unity Package Manager (turpmāk UPM) ir rīks pakotņu pārvaldībai. Tas tika pievienots Unity 2018.1 un sākotnēji tika izmantots tikai pakotnēm, kuras izstrādāja Unity Technologies. Tomēr kopš versijas 2018.3 bija iespēja pievienot pielāgotas pakotnes.

Unity Package Manager
Unity Package Manager saskarne

Pakotnes netiek iekļautas projekta avotos (Assets direktorijā). Tās atrodas atsevišķā direktorijā %projectFolder%/Library/PackageCache un nekādi neietekmē projektu, to vienīgā pieminēšana avotos ir failā packages/manifest.json.

Unity Package Manager
Pakotnes projekta failu sistēmā

Pakotņu avoti

UPM var izmantot vairākus pakotņu avotus:

1. Failu sistēma.

Priekšrocības:

  • Izpildes ātrums.
  • Nepieciešami trešo pušu rīki.

Mīnusi:

  • Versiju pārvaldības sarežģītība.
  • Nepieciešama kopīga piekļuve failu sistēmai visiem, kas strādā pie projekta.

2. Git krātuve.

Priekšrocības:

  • Nepieciešama tikai Git krātuve.

Mīnusi:

  • Nav iespējams pārslēgties starp versijām caur UPM logu.
  • Nestrādā ar visām Git krātuvēm.

3. npm krātuve.

Priekšrocības:

  • Pilnībā atbalsta UPM funkcionalitāti un tiek izmantota oficiālo Unity pakotņu izplatīšanai.

Mīnusi:

  • Pašlaik tiek ignorētas visas pakotņu versijas kā virkne, izņemot „-preview”.

Zemāk mēs apskatīsim UPM + npm realizācijas. Šī kombinācija ir ērta, jo ļauj strādāt ar visām resursu veidiem un pārvaldīt pakotņu versijas, kā arī pilnībā atbalsta UPM vietējo saskarni.

Kā npm krātuvi var izmantot Verdaccio. Tam ir detalizēts dokumentācija, un tā palaišanai būs nepieciešamas burtiski pāris komandas.

Vides iestatīšana

Vispirms jāinstalē node.js.

Pakotnes izveide

Lai izveidotu pakotni, nepieciešams ievietot failu package.json, kas to apraksta, pakotnes satura direktorijā. Jāizdara šādi:

Jāiet uz projekta direktoriju, kuru vēlamies izveidot par pakotni.

Jāizpilda komanda npm init, un sarunā jāievada nepieciešamās vērtības. nosaukumam norādām vārdu apgrieztā domēna formātā, piemēram, com.plarium.somepackage.
Lai ērtāk attēlotu pakotnes nosaukumu — pievienojiet rekvizītu displayName failā package.json un aizpildiet to.

Tā kā npm ir js orientēts, failā ir nevajadzīgi rekvizīti main un scripts, kurus Unity neizmanto. Labāk tos izdzēst, lai nesabojātu pakotnes aprakstu. Failam būtu jāizskatās aptuveni šādi:

  1. Jāiet uz projekta direktoriju, kuru vēlamies izveidot par pakotni.
  2. Jāizpilda komanda npm init, un sarunā jāievada nepieciešamās vērtības. nosaukumam norādām vārdu apgrieztā domēna formātā, piemēram, com.plarium.somepackage.
  3. Lai ērtāk attēlotu pakotnes nosaukumu — pievienojiet rekvizītu displayName failā package.json un aizpildiet to.
  4. Tā kā npm ir js orientēts, failā ir nevajadzīgi rekvizīti main un scripts, kurus Unity neizmanto. Labāk tos izdzēst, lai nesabojātu pakotnes aprakstu. Failam būtu jāizskatās aptuveni šādi:
    {
     "name": "com.plarium.somepackage",
     "displayName": "Some Package",
     "version": "1.0.0",
     "description": "Some Package Description",
     "keywords": [
       "Unity",
       "UPM"
     ],
     "author": "AUTHOR",
     "license": "UNLICENSED"
    }

  5. Atveriet Unity un izveidojiet .meta failu pakalpojumam package.json (Unity neredz aktīvus bez .meta failiem, pakas priekš Unity tiek atvērtas tikai lasīšanas režīmā).

Paku sūtīšana

Lai nosūtītu paku, ir jāizpilda komanda: npm publish --registry *pakalpojumu krātuves URL*.

Pakotņu uzstādīšana un atjaunināšana caur Unity Package Manager

Lai pievienotu paku Unity projektam, nepieciešams:

  1. Failā manifest.json iekļaut pakotņu avota informāciju. Tam ir jāizveido īpašums scopedRegistries un jānorāda scoped un avota URL, kur tiks meklēti konkrētie scoped.
    
    "scopedRegistries": [
       {
         "name": "Main",
         "url": "pakalpojumu krātuves URL",
         "scopes": [
           "com.plarium"
         ]
       }
     ]
    
  2. Pāriet uz Unity un atvērt Package Manager logu (darbs ar pielāgotām pakām neatšķiras no darba ar iebūvētajām).
  3. Izvēlēties All Packages.
  4. Atrast nepieciešamo paku un pievienot to.

Unity Package Manager

Darbs ar avotiem un atkļūdošana

Lai avoti pievienotos projektam, ir jāizveido Assembly Definition pakei.

Paku izmantošana neierobežo iespējas atkļūdot. Tomēr, strādājot ar pakām Unity, nav iespējams pāriet uz IDE, noklikšķinot uz kļūdas konsolē, ja kļūda notikusi pakā. Tas ir saistīts ar to, ka Unity neredz skriptus kā atsevišķus failus, jo, izmantojot Assembly Definition, tie tiek apkopoti bibliotēkā un pievienoti projektam. Strādājot ar avotiem projektā, noklikšķināšana uz IDE ir pieejama.

Projekts ar pievienotu paku:

Unity Package Manager
Skripts no pakas ar darba punkti:

Unity Package Manager

Steidzamas izmaiņas pakās

Pievienotās Unity pakas projektā ir atvērts tikai lasīšanas režīmā, bet tās var rediģēt pakotņu kešatmiņā. Tam ir jāizdara:

  1. Pāriet uz paku pakotņu kešatmiņā.

    Unity Package Manager

  2. Veikt nepieciešamās izmaiņas.
  3. Atjaunināt versiju failā package.json.
  4. Nosūtīt paku npm publish --registry *pakalpojumu krātuves URL*.
  5. Atjaunināt pakas versiju līdz labotai caur UPM interfeisu.

Paku importēšanas konflikti

Importējot pakas, var rasties šādi GUID konflikti:

  1. Paka — paka. Ja importējot paku tiek konstatēts, ka jau pievienotajās pakās ir aktīvi ar tādu pašu GUID, aktīvi ar savstarpēju GUID no importējamās pakas netiks pievienoti projektam.
  2. Pakete — projekts. Ja paketes importēšanas laikā tiks konstatēti resursi ar sakrītošām GUID vērtībām, tad resursi no paketes netiks pievienoti projektam. Tomēr resursi, kas no tiem ir atkarīgi, sāks izmantot resursus no projekta.

Resursu pārvietošana no projekta uz paketi

Ja pārvietojat resursu no projekta uz paketi, kamēr Unity ir atvērts, tā funkcionalitāte tiks saglabāta, un atkarīgo resursu saites sāks izmantot resursu no paketes.

Svarīgi: resursa kopēšanas laikā no projekta uz paketi radīsies konflikts "Pakete — projekts", kas aprakstīts iepriekš.

Iespējamie konfliktu risinājumi

  1. GUID pārzīmēšana ar īpašiem algoritmiem, importējot visus resursus, lai izvairītos no kolīzijām.
  2. Visu resursu pievienošana vienam projektam, tos pēc tam sadalot paketes.
  3. Datu bāzes izveide, kas satur visu resursu GUID vērtības, un validācija, nosūtot paketes.

Secinājums

UPM — jauns risinājums kopīgo resursu izplatīšanai Unity, kas var kļūt par cienīgu alternatīvu esošajām metodēm. Ieteikumi, kas aprakstīti rakstā, radušies, pamatojoties uz reāliem gadījumiem. Ceram, ka tie jums noderēs.

Avots: habr.com

Iegādājieties uzticamu tīmekļa hostingu ar DDoS aizsardzību, VPS VDS serveriem 🔥 Iegādājieties uzticamu tīmekļa hostingu ar DDoS aizsardzību, VPS VDS serveriem | ProHoster