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.
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.
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 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
.
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
Atrof muhitni sozlash
Avval siz o'rnatishingiz kerak
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:
- 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:
{ "name": "com.plarium.somepackage", "displayName": "Some Package", "version": "1.0.0", "description": "Some Package Description", "keywords": [ "Unity", "UPM" ], "author": "AUTHOR", "license": "UNLICENSED" }
- 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:
- Faylga qo'shish
manifest.json
paketlar manbasi haqida ma'lumot. Buning uchun mulkni qo'shishingiz kerakscopedRegistries
va muayyan qamrovlar qidiriladigan joylar va manba manzilini ko'rsating."scopedRegistries": [ { "name": "Main", "url": "адрес до хранилища пакетов", "scopes": [ "com.plarium" ] } ]
- Unity-ga o'ting va Paket menejeri oynasini oching (maxsus paketlar bilan ishlash o'rnatilgan paketlar bilan ishlashdan farq qilmaydi).
- Barcha paketlarni tanlang.
- Kerakli paketni toping va uni qo'shing.
Manbalar bilan ishlash va disk raskadrovka
Manbalar loyihaga ulanishi uchun siz yaratishingiz kerak
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:
Ishchi to'xtash nuqtasi bo'lgan paketdan skript:
Paketlarga shoshilinch tuzatishlar
Loyihaga qo'shilgan Unity paketlari faqat o'qish uchun mo'ljallangan, lekin ularni paket keshida tahrirlash mumkin. Buning uchun sizga kerak:
- Paket keshidagi paketga o'ting.
- Kerakli o'zgarishlarni amalga oshiring.
- Fayldagi versiyani yangilang
package.json
. - Paketni yuborish
npm publish --registry *адрес до хранилища пакетов*
. - UPM interfeysi orqali paket versiyasini tuzatilgan versiyasiga yangilang.
Paket importi ziddiyati
Paketlarni import qilishda quyidagi GUID ziddiyatlari yuzaga kelishi mumkin:
- 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.
- 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
- To'qnashuvlarni bartaraf etish uchun barcha aktivlarni import qilishda o'z algoritmlarimiz yordamida GUID-larni qayta tayinlash.
- Barcha aktivlarni bitta loyihaga qo'shish va keyin ularni paketlarga bo'lish.
- 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