Birlik Paket Yöneticisi

Unity, uzun süredir var olan ve sürekli gelişen bir platformdur. Ancak, aynı anda birkaç projeyle çalışırken, ortak kaynakları (.cs), kitaplıkları (.dll) ve diğer varlıkları (görüntüler, sesler, modeller, hazır yapılar) kullanma konusunda yine de zorluklarla karşılaşabilirsiniz. Bu yazımızda Unity için böyle bir soruna native çözüm bulma konusundaki deneyimlerimizden bahsedeceğiz.

Birlik Paket Yöneticisi

Paylaşılan Kaynak Dağıtım Yöntemleri

Farklı projeler için paylaşılan kaynakları kullanmanın birden fazla yolu vardır ancak her yaklaşımın artıları ve eksileri vardır.

1. Çoğaltma - Kaynakları projeler arasında "elle" çoğaltıyoruz.

Artıları:

  • Her türlü kaynak için uygundur.
  • Bağımlılık sorunu yok.
  • Varlık GUID'leriyle ilgili herhangi bir sorun yoktur.

Eksileri:

  • Dev depolar.
  • Versiyonlama imkanı yoktur.
  • Paylaşılan kaynaklardaki değişiklikleri izlemede zorluk.
  • Paylaşılan kaynakların güncellenmesinde zorluk.

2. Git alt modülleri - paylaşılan kaynakların harici alt modüller aracılığıyla dağıtımı.

Artıları:

  • Kaynaklarla çalışabilirsiniz.
  • Varlıkları dağıtabilirsiniz.
  • Bağımlılık sorunu yok.

Eksileri:

  • Git deneyimi gerekli.
  • Git, ikili dosyalarla pek uyumlu değil; LFS'yi bağlamanız gerekecek.
  • Depolara erişim kontrolü.
  • Sürüm yükseltme ve düşürme zorluğu.
  • GUID çarpışmaları mümkündür ve Unity'nin bunları çözecek net bir davranışı yoktur.

3. NuGet - paylaşılan kitaplıkların NuGet paketleri aracılığıyla dağıtımı.

Artıları:

  • Unity'e bağlı olmayan projelerle rahat çalışma.
  • Kullanışlı sürüm oluşturma ve bağımlılık çözümü.

Eksileri:

  • Unity, NuGet paketleriyle kutudan çıktığı haliyle çalışamaz (GitHub'da bunu düzelten Unity için NuGet Paket Yöneticisini bulabilirsiniz, ancak bazı nüanslar vardır).
  • Diğer varlık türlerinin dağıtımındaki zorluklar.

4. Unity Paket Yöneticisi - paylaşılan kaynakların Unity için yerel bir çözüm aracılığıyla dağıtımı.

Artıları:

  • Paketlerle çalışmak için yerel arayüz.
  • GUID çakışmaları nedeniyle paketlerdeki .meta dosyalarının üzerine yazılmasına karşı koruma.
  • Versiyonlama imkanı.
  • Unity için her türlü kaynağı dağıtma yeteneği.

Eksileri:

  • GUID çakışmaları yine de meydana gelebilir.
  • Uygulamaya yönelik herhangi bir belge bulunmamaktadır.

İkinci yöntemin dezavantajlarından çok avantajları vardır. Ancak belge eksikliği nedeniyle şu anda pek popüler değil ve bu nedenle üzerinde ayrıntılı olarak duracağız.

Birlik Paket Yöneticisi

Unity Paket Yöneticisi (UPM) bir paket yönetim aracıdır. Unity 2018.1'e eklendi ve yalnızca Unity Technologies tarafından geliştirilen paketler için kullanıldı. Ancak 2018.3 sürümünden itibaren özel paketler eklemek mümkün hale geldi.

Birlik Paket Yöneticisi
Unity Paket Yöneticisi Arayüzü

Paketler proje kaynaklarında (Varlıklar dizini) yer almaz. Ayrı bir dizindeler %projectFolder%/Library/PackageCache ve projeyi hiçbir şekilde etkilemez, kaynak kodunda bahsedilen tek şey dosyadadır. packages/manifest.json.

Birlik Paket Yöneticisi
Proje dosya sistemindeki paketler

Paket kaynakları

UPM çeşitli paket kaynaklarını kullanabilir:

1. Dosya sistemi.

Artıları:

  • Uygulama hızı.
  • Üçüncü parti araçlara ihtiyaç duymaz.

Eksileri:

  • Versiyon oluşturma zorluğu.
  • Projede çalışan herkesin dosya sistemine ortak erişimi gereklidir.

2. Git deposu.

Artıları:

  • İhtiyacınız olan tek şey bir Git deposu.

Eksileri:

  • UPM penceresi aracılığıyla sürümler arasında geçiş yapamazsınız.
  • Tüm Git depolarıyla çalışmaz.

3. npm deposu.

Artıları:

  • UPM işlevselliğini tam olarak destekler ve resmi Unity paketlerini dağıtmak için kullanılır.

Eksileri:

  • Şu anda "-preview" dışındaki paketlerin tüm dize sürümlerini yok sayıyor.

Aşağıda UPM + npm uygulamasına bakacağız. Bu paket kullanışlıdır çünkü her türlü kaynakla çalışmanıza ve paket sürümlerini yönetmenize olanak tanır ve ayrıca yerel UPM arayüzünü tam olarak destekler.

Bunu bir npm deposu olarak kullanabilirsiniz Verdaccio. Detaylı bir bilgi var документацияve onu çalıştırmak için yalnızca birkaç komut gerekir.

Ortam kurulumu

İlk önce yüklemeniz gerekiyor node.js.

Paket oluşturma

Bir paket oluşturmak için dosyayı yerleştirmeniz gerekir. package.jsononu açıklayacak olan bu paketin içeriğinin bulunduğu dizine. Aşağıdakileri yapmanız gerekir:

Paket yapmak istediğimiz proje dizinine gidin.

Npm init komutunu çalıştırın ve iletişim kutusu sırasında gerekli değerleri girin. Ad için adı ters etki alanı biçiminde belirtin; örneğin com.plarium.somepackage.
Paket adını rahatça görüntülemek için displayName özelliğini package.json dosyasına ekleyin ve doldurun.

Npm js odaklı olduğundan dosya bizim ihtiyacımız olmayan, Unity'nin kullanmadığı main ve scripts özelliklerini içerir. Paket açıklamasını karıştırmamak için bunları kaldırmak daha iyidir. Dosya şuna benzer bir şeye benzemelidir:

  1. Paket yapmak istediğimiz proje dizinine gidin.
  2. Npm init komutunu çalıştırın ve iletişim kutusu sırasında gerekli değerleri girin. Ad için adı ters etki alanı biçiminde belirtin; örneğin com.plarium.somepackage.
  3. Paket adını rahatça görüntülemek için displayName özelliğini package.json dosyasına ekleyin ve doldurun.
  4. Npm js odaklı olduğundan dosya bizim ihtiyacımız olmayan, Unity'nin kullanmadığı main ve scripts özelliklerini içerir. Paket açıklamasını karıştırmamak için bunları kaldırmak daha iyidir. Dosya şuna benzer bir şeye benzemelidir:
    {
     "name": "com.plarium.somepackage",
     "displayName": "Some Package",
     "version": "1.0.0",
     "description": "Some Package Description",
     "keywords": [
       "Unity",
       "UPM"
     ],
     "author": "AUTHOR",
     "license": "UNLICENSED"
    }

  5. Unity'yi açın ve package.json için bir .meta dosyası oluşturun (Unity, .meta dosyası olmayan varlıkları görmez, Unity paketleri salt okunur olarak açılır).

Paket gönderme

Paketi göndermek için şu komutu çalıştırmanız gerekir: npm publish --registry *адрес до хранилища пакетов*.

Unity Paket Yöneticisi aracılığıyla paketleri kurma ve güncelleme

Bir Unity projesine paket eklemek için şunlara ihtiyacınız vardır:

  1. Dosyaya ekle manifest.json Paketlerin kaynağı hakkında bilgi. Bunu yapmak için özelliği eklemeniz gerekir scopedRegistries ve belirli kapsamların aranacağı kapsamları ve kaynak adresini belirtin.
    
    "scopedRegistries": [
       {
         "name": "Main",
         "url": "адрес до хранилища пакетов",
         "scopes": [
           "com.plarium"
         ]
       }
     ]
    
  2. Unity'ye gidin ve Paket Yöneticisi penceresini açın (özel paketlerle çalışmak, yerleşik paketlerle çalışmaktan farklı değildir).
  3. Tüm Paketler'i seçin.
  4. İhtiyacınız olan paketi bulun ve ekleyin.

Birlik Paket Yöneticisi

Kaynaklarla çalışma ve hata ayıklama

Kaynakların projeye bağlanabilmesi için oluşturmanız gerekir. Montaj Tanımı paket için.

Paketleri kullanmak hata ayıklama seçeneklerinizi sınırlamaz. Ancak Unity'de paketlerle çalışırken hata pakette oluşmuşsa konsoldaki bir hataya tıklayarak IDE'ye gidemezsiniz. Bunun nedeni Unity'nin komut dosyalarını ayrı dosyalar olarak görmemesidir, çünkü Montaj Tanımı kullanıldığında bunlar bir kütüphanede toplanır ve projeye dahil edilir. Bir projedeki kaynaklarla çalışırken IDE'ye tıklamak mümkündür.

Bağlı bir pakete sahip bir projedeki komut dosyası:

Birlik Paket Yöneticisi
Çalışan bir kesme noktasına sahip paketteki komut dosyası:

Birlik Paket Yöneticisi

Paketlerde acil düzeltmeler

Bir projeye eklenen Unity paketleri salt okunurdur ancak paket önbelleğinde düzenlenebilir. Bunu yapmak için ihtiyacınız olan:

  1. Paket önbelleğindeki pakete gidin.

    Birlik Paket Yöneticisi

  2. Gerekli değişiklikleri yapın.
  3. Dosyadaki sürümü güncelle package.json.
  4. Paket gönder npm publish --registry *адрес до хранилища пакетов*.
  5. Paket sürümünü UPM arayüzü aracılığıyla düzeltilmiş sürüme güncelleyin.

Paket içe aktarma çakışmaları

Paketleri içe aktarırken aşağıdaki GUID çakışmaları ortaya çıkabilir:

  1. Paket - paket. Bir paketi içe aktarırken, önceden eklenmiş paketlerin aynı GUID'e sahip varlıklar içerdiği keşfedilirse, içe aktarılan paketten eşleşen GUID'lere sahip varlıklar projeye eklenmez.
  2. Paket bir projedir. Bir paketi içe aktarırken projenin eşleşen GUID'lere sahip varlıklar içerdiği tespit edilirse paketteki varlıklar projeye eklenmez. Ancak bunlara bağımlı olan varlıklar projedeki varlıkları kullanmaya başlayacaktır.

Varlıkları bir projeden pakete aktarma

Unity açıkken bir varlığı bir projeden bir pakete aktarırsanız, işlevselliği korunur ve bağımlı varlıklardaki bağlantılar, paketteki varlığı kullanmaya başlar.

Bu çok önemli: Bir projeden bir pakete varlık kopyalarken yukarıdaki bölümde anlatılan “Paket - Proje” çakışması meydana gelecektir.

Çatışmalara olası çözümler

  1. Çakışmaları ortadan kaldırmak için tüm varlıkları içe aktarırken GUID'leri kendi algoritmalarımızı kullanarak yeniden atama.
  2. Tüm varlıkları bir projeye eklemek ve ardından bunları paketlere bölmek.
  3. Tüm varlıkların GUID'lerini içeren bir veritabanı oluşturmak ve paket gönderirken doğrulama yapmak.

Sonuç

UPM, Unity'de paylaşılan kaynakların dağıtımına yönelik mevcut yöntemlere değerli bir alternatif olabilecek yeni bir çözümdür. Makalede açıklanan öneriler gerçek vakalara dayanmaktadır. Bunları faydalı bulacağınızı umuyoruz.

Kaynak: habr.com

Yorum ekle