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.

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

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 . Tam ir detalizēts , un tā palaišanai būs nepieciešamas burtiski pāris komandas.
Vides iestatīšana
Vispirms jāinstalē .
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:
- 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:
{ "name": "com.plarium.somepackage", "displayName": "Some Package", "version": "1.0.0", "description": "Some Package Description", "keywords": [ "Unity", "UPM" ], "author": "AUTHOR", "license": "UNLICENSED" } - 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:
- Failā
manifest.jsoniekļaut pakotņu avota informāciju. Tam ir jāizveido īpašumsscopedRegistriesun 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" ] } ] - 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).
- Izvēlēties All Packages.
- Atrast nepieciešamo paku un pievienot to.

Darbs ar avotiem un atkļūdošana
Lai avoti pievienotos projektam, ir jāizveido 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:

Skripts no pakas ar darba punkti:

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:
- Pāriet uz paku pakotņu kešatmiņā.

- Veikt nepieciešamās izmaiņas.
- Atjaunināt versiju failā
package.json. - Nosūtīt paku
npm publish --registry *pakalpojumu krātuves URL*. - Atjaunināt pakas versiju līdz labotai caur UPM interfeisu.
Paku importēšanas konflikti
Importējot pakas, var rasties šādi GUID konflikti:
- 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.
- 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
- GUID pārzīmēšana ar īpašiem algoritmiem, importējot visus resursus, lai izvairītos no kolīzijām.
- Visu resursu pievienošana vienam projektam, tos pēc tam sadalot paketes.
- 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

