Pengurus Pakej Perpaduan

Perpaduan adalah platform yang telah wujud sejak sekian lama dan sentiasa berkembang. Walau bagaimanapun, apabila bekerja di dalamnya dengan beberapa projek pada masa yang sama, anda masih boleh menghadapi kesukaran dalam menggunakan sumber biasa (.cs), perpustakaan (.dll) dan aset lain (imej, bunyi, model, prefab). Dalam artikel ini kita akan bercakap tentang pengalaman kami dengan penyelesaian asli untuk masalah seperti itu untuk Unity.

Pengurus Pakej Perpaduan

Kaedah Pengagihan Sumber Dikongsi

Terdapat lebih daripada satu cara untuk menggunakan sumber yang dikongsi untuk projek yang berbeza, tetapi setiap pendekatan mempunyai kebaikan dan keburukan.

1. Penduaan - kami menduplikasi sumber antara projek "dengan tangan."

Kelebihan:

  • Sesuai untuk semua jenis sumber.
  • Tiada masalah pergantungan.
  • Tiada masalah dengan GUID aset.

Cons:

  • Repositori gergasi.
  • Tidak ada kemungkinan versi.
  • Kesukaran menjejaki perubahan kepada sumber yang dikongsi.
  • Kesukaran mengemas kini sumber yang dikongsi.

2. Subodul Git β€” pengagihan sumber yang dikongsi melalui submodul luaran.

Kelebihan:

  • Anda boleh bekerja dengan sumber.
  • Anda boleh mengagihkan aset.
  • Tiada masalah pergantungan.

Cons:

  • Pengalaman Git diperlukan.
  • Git tidak begitu mesra dengan fail binari - anda perlu menyambungkan LFS.
  • Kawalan akses untuk repositori.
  • Kesukaran dengan menaik taraf dan menurunkan versi.
  • Perlanggaran GUID mungkin berlaku dan tiada tingkah laku yang jelas di pihak Unity untuk menyelesaikannya.

3. NuGet - pengedaran perpustakaan kongsi melalui pakej NuGet.

Kelebihan:

  • Kerja yang mudah dengan projek yang tidak bergantung pada Perpaduan.
  • Peleraian versi dan pergantungan yang mudah.

Cons:

  • Unity tidak boleh berfungsi dengan pakej NuGet di luar kotak (di GitHub anda boleh menemui Pengurus Pakej NuGet untuk Unity, yang membetulkannya, tetapi terdapat beberapa nuansa).
  • Kesukaran dalam mengagihkan jenis aset lain.

4. Pengurus Pakej Perpaduan - pengagihan sumber yang dikongsi melalui penyelesaian asli untuk Perpaduan.

Kelebihan:

  • Antara muka asli untuk bekerja dengan pakej.
  • Perlindungan daripada menimpa fail .meta dalam pakej akibat konflik GUID.
  • Kemungkinan versi.
  • Keupayaan untuk mengagihkan semua jenis sumber untuk Perpaduan.

Cons:

  • Konflik GUID masih boleh berlaku.
  • Tiada dokumentasi untuk pelaksanaan.

Kaedah terakhir mempunyai lebih banyak kelebihan daripada keburukan. Walau bagaimanapun, ia tidak begitu popular sekarang kerana kekurangan dokumentasi, dan oleh itu kami akan membincangkannya secara terperinci.

Pengurus Pakej Perpaduan

Unity Package Manager (UPM) ialah alat pengurusan pakej. Ia telah ditambah dalam Unity 2018.1 dan hanya digunakan untuk pakej yang dibangunkan oleh Unity Technologies. Walau bagaimanapun, bermula dengan versi 2018.3, ia menjadi mungkin untuk menambah pakej tersuai.

Pengurus Pakej Perpaduan
Antara Muka Pengurus Pakej Perpaduan

Pakej tidak berakhir dalam sumber projek (direktori Aset). Mereka berada dalam direktori yang berasingan %projectFolder%/Library/PackageCache dan tidak menjejaskan projek dalam apa jua cara, satu-satunya sebutan mereka dalam kod sumber adalah dalam fail packages/manifest.json.

Pengurus Pakej Perpaduan
Pakej dalam sistem fail projek

Sumber pakej

UPM boleh menggunakan beberapa sumber pakej:

1. Sistem fail.

Kelebihan:

  • Kepantasan pelaksanaan.
  • Tidak memerlukan alat pihak ketiga.

Cons:

  • Kesukaran dalam membuat versi.
  • Akses dikongsi kepada sistem fail diperlukan untuk semua orang yang bekerja dengan projek itu.

2. Repositori Git.

Kelebihan:

  • Apa yang anda perlukan ialah repositori Git.

Cons:

  • Anda tidak boleh bertukar antara versi melalui tetingkap UPM.
  • Tidak berfungsi dengan semua repositori Git.

3. repositori npm.

Kelebihan:

  • Menyokong sepenuhnya fungsi UPM dan digunakan untuk mengedarkan pakej rasmi Unity.

Cons:

  • Pada masa ini mengabaikan semua versi rentetan pakej kecuali "-preview".

Di bawah ini kita akan melihat pelaksanaan UPM + npm. Himpunan ini mudah kerana ia membolehkan anda bekerja dengan sebarang jenis sumber dan mengurus versi pakej, dan juga menyokong sepenuhnya antara muka UPM asli.

Anda boleh menggunakannya sebagai repositori npm Verdaccio. Ada yang terperinci dokumentasi, dan hanya beberapa arahan diperlukan untuk menjalankannya.

Menyediakan persekitaran

Mula-mula anda perlu memasang node.js.

Mencipta pakej

Untuk membuat pakej, anda perlu meletakkan fail package.json, yang akan menerangkannya, ke direktori dengan kandungan pakej ini. Anda perlu melakukan perkara berikut:

Pergi ke direktori projek yang kita ingin buat pakej.

Jalankan arahan npm init dan masukkan nilai yang diperlukan semasa dialog. Untuk nama, nyatakan nama dalam format domain terbalik, contohnya com.plarium.somepackage.
Untuk memaparkan nama pakej dengan mudah, tambahkan sifat displayName pada package.json dan isikannya.

Memandangkan npm berorientasikan js, fail tersebut mengandungi sifat utama dan skrip yang tidak kami perlukan, yang tidak digunakan oleh Unity. Adalah lebih baik untuk mengeluarkannya supaya tidak mengacaukan penerangan pakej. Fail sepatutnya kelihatan seperti ini:

  1. Pergi ke direktori projek yang kita ingin buat pakej.
  2. Jalankan arahan npm init dan masukkan nilai yang diperlukan semasa dialog. Untuk nama, nyatakan nama dalam format domain terbalik, contohnya com.plarium.somepackage.
  3. Untuk memaparkan nama pakej dengan mudah, tambahkan sifat displayName pada package.json dan isikannya.
  4. Memandangkan npm berorientasikan js, fail tersebut mengandungi sifat utama dan skrip yang tidak kami perlukan, yang tidak digunakan oleh Unity. Adalah lebih baik untuk mengeluarkannya supaya tidak mengacaukan penerangan pakej. Fail sepatutnya kelihatan seperti ini:
    {
     "name": "com.plarium.somepackage",
     "displayName": "Some Package",
     "version": "1.0.0",
     "description": "Some Package Description",
     "keywords": [
       "Unity",
       "UPM"
     ],
     "author": "AUTHOR",
     "license": "UNLICENSED"
    }

  5. Buka Unity dan jana fail .meta untuk package.json (Unity tidak melihat aset tanpa fail .meta, pakej untuk Unity dibuka baca sahaja).

Menghantar pakej

Untuk menghantar pakej, anda perlu menjalankan arahan: npm publish --registry *адрСс Π΄ΠΎ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ²*.

Memasang dan mengemas kini pakej melalui Pengurus Pakej Perpaduan

Untuk menambah pakej pada projek Unity, anda memerlukan:

  1. Tambahkan pada fail manifest.json maklumat tentang sumber pakej. Untuk melakukan ini, anda perlu menambah harta scopedRegistries dan nyatakan skop dan alamat sumber tempat skop tertentu akan dicari.
    
    "scopedRegistries": [
       {
         "name": "Main",
         "url": "адрСс Π΄ΠΎ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ²",
         "scopes": [
           "com.plarium"
         ]
       }
     ]
    
  2. Pergi ke Unity dan buka tetingkap Pengurus Pakej (bekerja dengan pakej tersuai tidak berbeza daripada bekerja dengan pakej terbina dalam).
  3. Pilih Semua Pakej.
  4. Cari pakej yang anda perlukan dan tambahkannya.

Pengurus Pakej Perpaduan

Bekerja dengan sumber dan penyahpepijatan

Untuk membolehkan sumber disambungkan kepada projek, anda perlu mencipta Definisi Perhimpunan untuk pakej.

Menggunakan pakej tidak mengehadkan pilihan penyahpepijatan anda. Walau bagaimanapun, apabila bekerja dengan pakej dalam Unity, anda tidak boleh pergi ke IDE dengan mengklik pada ralat dalam konsol jika ralat berlaku dalam pakej. Ini disebabkan oleh fakta bahawa Unity tidak melihat skrip sebagai fail berasingan, kerana apabila menggunakan Definisi Perhimpunan ia dikumpulkan ke dalam perpustakaan dan dimasukkan ke dalam projek. Apabila bekerja dengan sumber daripada projek, klik pada IDE tersedia.

Skrip dalam projek dengan pakej bersambung:

Pengurus Pakej Perpaduan
Skrip dari pakej dengan titik putus yang berfungsi:

Pengurus Pakej Perpaduan

Pembetulan segera pada pakej

Pakej perpaduan yang ditambahkan pada projek adalah baca sahaja, tetapi boleh diedit dalam cache pakej. Untuk melakukan ini anda perlukan:

  1. Pergi ke pakej dalam cache pakej.

    Pengurus Pakej Perpaduan

  2. Buat perubahan yang diperlukan.
  3. Kemas kini versi dalam fail package.json.
  4. Hantar pakej npm publish --registry *адрСс Π΄ΠΎ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ²*.
  5. Kemas kini versi pakej kepada yang telah diperbetulkan melalui antara muka UPM.

Konflik import pakej

Konflik GUID berikut mungkin berlaku apabila mengimport pakej:

  1. Pakej - pakej. Jika, semasa mengimport pakej, didapati bahawa pakej yang telah ditambah mengandungi aset dengan GUID yang sama, aset dengan GUID yang sepadan daripada pakej yang diimport tidak akan ditambahkan pada projek.
  2. Pakej adalah projek. Jika, apabila mengimport pakej, didapati bahawa projek itu mengandungi aset dengan GUID yang sepadan, maka aset daripada pakej tidak akan ditambahkan pada projek. Walau bagaimanapun, aset yang bergantung kepada mereka akan mula menggunakan aset daripada projek.

Memindahkan aset daripada projek kepada pakej

Jika anda memindahkan aset daripada projek kepada pakej semasa Unity dibuka, fungsinya akan dikekalkan dan pautan dalam aset bergantung akan mula menggunakan aset daripada pakej tersebut.

Ia adalah penting: Apabila menyalin aset daripada projek ke pakej, konflik "Pakej - Projek" yang diterangkan dalam bahagian di atas akan berlaku.

Penyelesaian yang mungkin untuk konflik

  1. Menetapkan semula GUID menggunakan algoritma kami sendiri apabila mengimport semua aset untuk menghapuskan perlanggaran.
  2. Menambah semua aset pada satu projek dan kemudian membahagikannya kepada pakej.
  3. Mencipta pangkalan data yang mengandungi GUID semua aset dan menjalankan pengesahan semasa menghantar pakej.

Kesimpulan

UPM ialah penyelesaian baharu untuk mengagihkan sumber yang dikongsi dalam Perpaduan, yang boleh menjadi alternatif yang sesuai kepada kaedah sedia ada. Pengesyoran yang diterangkan dalam artikel adalah berdasarkan kes sebenar. Kami harap anda mendapati mereka berguna.

Sumber: www.habr.com

Tambah komen