Unity paket menejeri

Birlik - bu ancha vaqtdan beri mavjud bo'lgan va doimo rivojlanib borayotgan platforma. Biroq, unda bir vaqtning o'zida bir nechta loyihalar bilan ishlashda siz hali ham umumiy manbalar (.cs), kutubxonalar (.dll) va boshqa aktivlardan (tasvirlar, tovushlar, modellar, prefabriklar) foydalanishda qiyinchiliklarga duch kelishingiz mumkin. Ushbu maqolada biz Unity uchun bunday muammoni hal qilish bo'yicha tajribamiz haqida gapiramiz.

Unity paket menejeri

Umumiy resurslarni taqsimlash usullari

Turli loyihalar uchun umumiy resurslardan foydalanishning bir nechta usullari mavjud, ammo har bir yondashuv o'zining ijobiy va salbiy tomonlariga ega.

1. Ko'paytirish - biz loyihalar o'rtasida resurslarni "qo'lda" takrorlaymiz.

Taroziga soling:

  • Barcha turdagi resurslar uchun javob beradi.
  • Qaramlik bilan bog'liq muammolar yo'q.
  • Obyekt GUIDlari bilan bog‘liq muammolar yo‘q.

Kamchiliklari:

  • Gigant omborlar.
  • Versiyalash imkoniyati yo'q.
  • Umumiy resurslardagi o'zgarishlarni kuzatish qiyinligi.
  • Umumiy resurslarni yangilash qiyinligi.

2. Git submodullari — umumiy resurslarni tashqi submodullar orqali taqsimlash.

Taroziga soling:

  • Siz manbalar bilan ishlashingiz mumkin.
  • Siz aktivlarni tarqatishingiz mumkin.
  • Qaramlik bilan bog'liq muammolar yo'q.

Kamchiliklari:

  • Git tajribasi talab qilinadi.
  • Git ikkilik fayllar bilan unchalik qulay emas - siz LFSni ulashingiz kerak bo'ladi.
  • Repozitariylarga kirishni boshqarish.
  • Versiyalarni yangilash va pasaytirish bilan bog'liq qiyinchiliklar.
  • GUID to'qnashuvlari mumkin va ularni hal qilish uchun Unity tomonidan aniq xatti-harakatlar yo'q.

3. NuGet - umumiy kutubxonalarni NuGet paketlari orqali tarqatish.

Taroziga soling:

  • Unity-ga bog'liq bo'lmagan loyihalar bilan qulay ishlash.
  • Qulay versiya va bog'liqlik o'lchamlari.

Kamchiliklari:

  • Unity NuGet paketlari bilan ishlay olmaydi (GitHub-da siz Unity uchun NuGet Package Manager-ni topishingiz mumkin, bu buni tuzatadi, ammo ba'zi nuanslar mavjud).
  • Boshqa turdagi aktivlarni taqsimlashda qiyinchiliklar.

4. Unity Package Manager - Unity uchun mahalliy yechim orqali umumiy resurslarni taqsimlash.

Taroziga soling:

  • Paketlar bilan ishlash uchun mahalliy interfeys.
  • GUID ziddiyati tufayli paketlardagi .meta fayllarni qayta yozishdan himoya.
  • Versiyalash imkoniyati.
  • Unity uchun barcha turdagi resurslarni tarqatish qobiliyati.

Kamchiliklari:

  • GUID ziddiyatlari hali ham yuz berishi mumkin.
  • Amalga oshirish uchun hujjatlar yo'q.

Oxirgi usul kamchiliklardan ko'ra ko'proq afzalliklarga ega. Biroq, hozirda hujjatlar yo'qligi sababli unchalik mashhur emas, shuning uchun biz bu haqda batafsil to'xtalib o'tamiz.

Unity paket menejeri

Unity Package Manager (UPM) paketlarni boshqarish vositasidir. U Unity 2018.1 da qo'shilgan va faqat Unity Technologies tomonidan ishlab chiqilgan paketlar uchun ishlatilgan. Biroq, 2018.3 versiyasidan boshlab, maxsus paketlarni qo'shish mumkin bo'ldi.

Unity paket menejeri
Unity Package Manager interfeysi

Paketlar loyiha manbalarida tugamaydi (Assets katalogi). Ular alohida katalogda joylashgan %projectFolder%/Library/PackageCache va loyihaga hech qanday ta'sir ko'rsatmaydi, ularning manba kodidagi yagona eslatmasi faylda packages/manifest.json.

Unity paket menejeri
Loyiha fayl tizimidagi paketlar

Paket manbalari

UPM bir nechta paket manbalaridan foydalanishi mumkin:

1. Fayl tizimi.

Taroziga soling:

  • Amalga oshirish tezligi.
  • Uchinchi tomon vositalarini talab qilmaydi.

Kamchiliklari:

  • Versiyalashda qiyinchilik.
  • Loyiha bilan ishlaydigan har bir kishi uchun fayl tizimiga umumiy kirish talab qilinadi.

2. Git ombori.

Taroziga soling:

  • Sizga kerak bo'lgan yagona narsa - Git ombori.

Kamchiliklari:

  • UPM oynasi orqali versiyalar oʻrtasida almashishingiz mumkin emas.
  • Barcha Git omborlari bilan ishlamaydi.

3. npm ombori.

Taroziga soling:

  • UPM funksiyasini to‘liq qo‘llab-quvvatlaydi va rasmiy Unity paketlarini tarqatish uchun ishlatiladi.

Kamchiliklari:

  • Hozirda "-preview" dan tashqari paketlarning barcha string versiyalarini e'tiborsiz qoldiradi.

Quyida biz UPM + npm ilovasini ko'rib chiqamiz. Ushbu to'plam qulay, chunki u har qanday turdagi manbalar bilan ishlash va paket versiyalarini boshqarish imkonini beradi, shuningdek, mahalliy UPM interfeysini to'liq qo'llab-quvvatlaydi.

Siz uni npm ombori sifatida ishlatishingiz mumkin Verdaccio. Batafsil ma'lumot mavjud hujjatlar, va uni ishga tushirish uchun faqat bir nechta buyruqlar talab qilinadi.

Atrof muhitni sozlash

Avval siz o'rnatishingiz kerak node.js.

Paket yaratish

Paket yaratish uchun faylni joylashtirishingiz kerak package.json, uni tasvirlab beradi, ushbu paketning mazmuni bilan katalogga. Siz quyidagilarni qilishingiz kerak:

Biz paket yaratmoqchi bo'lgan loyiha katalogiga o'ting.

Npm init buyrug'ini ishga tushiring va dialog oynasida kerakli qiymatlarni kiriting. Nom uchun nomni teskari domen formatida belgilang, masalan, com.plarium.somepackage.
Paket nomini qulay ko'rsatish uchun package.json ga displayName xususiyatini qo'shing va uni to'ldiring.

Npm js-yo'naltirilganligi sababli, fayl Unity ishlatmaydigan asosiy va skriptlar xususiyatlarini o'z ichiga oladi. Paket tavsifini chalkashtirmaslik uchun ularni olib tashlash yaxshiroqdir. Fayl quyidagicha ko'rinishi kerak:

  1. Biz paket yaratmoqchi bo'lgan loyiha katalogiga o'ting.
  2. Npm init buyrug'ini ishga tushiring va dialog oynasida kerakli qiymatlarni kiriting. Nom uchun nomni teskari domen formatida belgilang, masalan, com.plarium.somepackage.
  3. Paket nomini qulay ko'rsatish uchun package.json ga displayName xususiyatini qo'shing va uni to'ldiring.
  4. Npm js-yo'naltirilganligi sababli, fayl Unity ishlatmaydigan asosiy va skriptlar xususiyatlarini o'z ichiga oladi. Paket tavsifini chalkashtirmaslik uchun ularni olib tashlash yaxshiroqdir. Fayl quyidagicha ko'rinishi kerak:
    {
     "name": "com.plarium.somepackage",
     "displayName": "Some Package",
     "version": "1.0.0",
     "description": "Some Package Description",
     "keywords": [
       "Unity",
       "UPM"
     ],
     "author": "AUTHOR",
     "license": "UNLICENSED"
    }

  5. Unity dasturini oching va package.json uchun .meta faylini yarating (Unity .meta fayllarsiz aktivlarni koʻrmaydi, Unity paketlari faqat oʻqish uchun ochiladi).

Paket yuborish

Paketni yuborish uchun siz quyidagi buyruqni bajarishingiz kerak: npm publish --registry *адрес до хранилища пакетов*.

Unity Package Manager orqali paketlarni o'rnatish va yangilash

Unity loyihasiga paket qo'shish uchun sizga kerak:

  1. Faylga qo'shish manifest.json paketlar manbasi haqida ma'lumot. Buning uchun mulkni qo'shishingiz kerak scopedRegistries va muayyan qamrovlar qidiriladigan joylar va manba manzilini ko'rsating.
    
    "scopedRegistries": [
       {
         "name": "Main",
         "url": "адрес до хранилища пакетов",
         "scopes": [
           "com.plarium"
         ]
       }
     ]
    
  2. Unity-ga o'ting va Paket menejeri oynasini oching (maxsus paketlar bilan ishlash o'rnatilgan paketlar bilan ishlashdan farq qilmaydi).
  3. Barcha paketlarni tanlang.
  4. Kerakli paketni toping va uni qo'shing.

Unity paket menejeri

Manbalar bilan ishlash va disk raskadrovka

Manbalar loyihaga ulanishi uchun siz yaratishingiz kerak Assambleyaning ta'rifi paket uchun.

Paketlardan foydalanish disk raskadrovka imkoniyatlarini cheklamaydi. Biroq, Unity-da paketlar bilan ishlashda, agar paketda xatolik yuz bergan bo'lsa, konsoldagi xatoni bosish orqali IDE-ga o'ta olmaysiz. Buning sababi, Unity skriptlarni alohida fayllar sifatida ko'rmaydi, chunki Assambleya ta'rifidan foydalanganda ular kutubxonaga to'planadi va loyihaga kiritiladi. Loyiha manbalari bilan ishlashda IDE ni bosish mumkin.

Ulangan paketli loyihadagi skript:

Unity paket menejeri
Ishchi to'xtash nuqtasi bo'lgan paketdan skript:

Unity paket menejeri

Paketlarga shoshilinch tuzatishlar

Loyihaga qo'shilgan Unity paketlari faqat o'qish uchun mo'ljallangan, lekin ularni paket keshida tahrirlash mumkin. Buning uchun sizga kerak:

  1. Paket keshidagi paketga o'ting.

    Unity paket menejeri

  2. Kerakli o'zgarishlarni amalga oshiring.
  3. Fayldagi versiyani yangilang package.json.
  4. Paketni yuborish npm publish --registry *адрес до хранилища пакетов*.
  5. UPM interfeysi orqali paket versiyasini tuzatilgan versiyasiga yangilang.

Paket importi ziddiyati

Paketlarni import qilishda quyidagi GUID ziddiyatlari yuzaga kelishi mumkin:

  1. Paket - paket. Agar paketni import qilishda allaqachon qo‘shilgan paketlar bir xil GUIDga ega aktivlarni o‘z ichiga olganligi aniqlansa, import qilingan paketdagi mos GUIDga ega aktivlar loyihaga qo‘shilmaydi.
  2. Paket - bu loyiha. Agar paketni import qilishda loyihada mos GUID-larga ega aktivlar borligi aniqlansa, paketdagi aktivlar loyihaga qo'shilmaydi. Biroq, ularga bog'liq bo'lgan aktivlar loyihadagi aktivlardan foydalanishni boshlaydi.

Aktivlarni loyihadan paketga o'tkazish

Agar siz Unity ochiq bo‘lgan vaqtda aktivni loyihadan paketga o‘tkazsangiz, uning funksionalligi saqlanib qoladi va qaram aktivlardagi havolalar paketdagi aktivdan foydalana boshlaydi.

Muhim: Aktivni loyihadan paketga nusxalashda yuqoridagi bo‘limda tasvirlangan “Paket - Loyiha” ziddiyatlari yuzaga keladi.

Mojarolarning mumkin bo'lgan echimlari

  1. To'qnashuvlarni bartaraf etish uchun barcha aktivlarni import qilishda o'z algoritmlarimiz yordamida GUID-larni qayta tayinlash.
  2. Barcha aktivlarni bitta loyihaga qo'shish va keyin ularni paketlarga bo'lish.
  3. Barcha aktivlarning GUID-larini o'z ichiga olgan ma'lumotlar bazasini yaratish va paketlarni jo'natishda tekshirishni o'tkazish.

xulosa

UPM - mavjud usullarga munosib alternativ bo'lishi mumkin bo'lgan Unity-da umumiy resurslarni tarqatish uchun yangi yechim. Maqolada tasvirlangan tavsiyalar haqiqiy holatlarga asoslangan edi. Umid qilamizki, siz ularni foydali deb topasiz.

Manba: www.habr.com

a Izoh qo'shish