Manajer Paket Persatuan

Unity adalah platform yang telah ada sejak lama dan terus berkembang. Namun, bekerja di dalamnya dengan beberapa proyek secara bersamaan, Anda masih dapat menemui kesulitan dalam menggunakan sumber umum (.cs), perpustakaan (.dll) dan aset lainnya (gambar, suara, model, cetakan). Dalam artikel ini, kita akan berbicara tentang pengalaman kami bekerja dengan solusi asli untuk masalah seperti itu untuk Unity.


Metode Distribusi Sumber Daya Bersama


Ada lebih dari satu cara untuk menggunakan sumber daya bersama untuk proyek yang berbeda, tetapi masing-masing pendekatan memiliki pro dan kontra.

1. Duplikasi - β€œtangan” duplikat sumber daya antar proyek.

Pro:

  • Cocok untuk semua jenis sumber daya.
  • Tidak ada masalah ketergantungan.
  • Tidak ada masalah dengan GUID aset.

Cons:

  • Repositori raksasa.
  • Tidak ada versi yang memungkinkan.
  • Kesulitan melacak perubahan ke sumber daya bersama.
  • Kesulitan memperbarui sumber daya bersama.

2. Git submodules - distribusi sumber daya bersama melalui submodules eksternal.

Pro:

  • Anda dapat bekerja dengan kode sumber.
  • Aset dapat didistribusikan.
  • Tidak ada masalah ketergantungan.

Cons:

  • Dibutuhkan keterampilan git.
  • Git tidak terlalu ramah dengan file biner - Anda harus menghubungkan LFS.
  • Kontrol akses untuk repositori.
  • Kesulitan dalam meningkatkan dan menurunkan.
  • Tabrakan GUID dimungkinkan dan tidak ada perilaku yang tidak ambigu pada bagian Unity untuk menyelesaikannya.

3. NuGet - distribusi perpustakaan bersama melalui paket NuGet.

Pro:

  • Pekerjaan mudah dengan proyek-proyek yang tidak tergantung pada Unity.
  • Versi yang nyaman dan resolusi dependensi.

Cons:
  • Unity tidak tahu cara bekerja dengan paket NuGet di luar kotak (di GitHub Anda dapat menemukan Package Manager NuGet untuk Unity, yang memperbaikinya, tetapi ada beberapa nuansa).
  • Kesulitan dalam mendistribusikan jenis aset lainnya.

4. Unity Package Manager - distribusi sumber daya bersama melalui solusi asli untuk Unity.

Pro:

  • Antarmuka asli untuk bekerja dengan paket.
  • Perlindungan terhadap menimpa file .meta dalam paket jika terjadi konflik GUID.
  • Kemungkinan versi.
  • Kemampuan untuk mendistribusikan semua jenis sumber daya untuk Unity.

Cons:

  • Konflik GUID mungkin masih terjadi.
  • Tidak ada dokumentasi untuk diimplementasikan.

Metode yang terakhir memiliki lebih banyak keuntungan daripada kerugian. Namun, saat ini tidak terlalu populer karena kurangnya dokumentasi, dan oleh karena itu kami akan membahasnya secara rinci.

Manajer Paket Persatuan


Unity Package Manager (selanjutnya disebut UPM) adalah alat manajemen paket. Itu ditambahkan di Unity 2018.1, dan itu hanya digunakan untuk paket yang dikembangkan oleh Unity Technologies. Namun, dimulai dengan versi 2018.3, menjadi mungkin untuk menambahkan paket khusus.


Antarmuka Manajer Paket Unity

Paket tidak termasuk dalam sumber proyek (direktori Aset). Mereka terletak di direktori terpisah %projectFolder%/Library/PackageCache dan tidak mempengaruhi proyek dengan cara apa pun, hanya menyebutkan mereka dalam sumber-sumber dalam file packages/manifest.json .


Paket dalam sistem file proyek

Sumber Paket


UPM dapat menggunakan beberapa sumber paket:

1. Sistem file.

Pro:

  • Kecepatan implementasi.
  • Tidak diperlukan alat pihak ketiga.

Cons:

  • Kompleksitas pembuatan versi.
  • Berbagi file diperlukan untuk semua orang yang bekerja dengan proyek ini.

2. Git repositori.

Pro:

  • Hanya repositori Git yang diperlukan.

Cons:

  • Anda tidak dapat beralih antar versi melalui jendela UPM.
  • Itu tidak bekerja dengan semua repositori Git.

3. repositori npm.

Pro:

  • Sepenuhnya mendukung fungsionalitas UPM dan digunakan untuk mendistribusikan paket Unity resmi.

Cons:

  • Saat ini, ia mengabaikan semua versi string dari paket kecuali untuk "-preview".

Di bawah ini kita melihat implementasi UPM + npm. Bundel ini nyaman karena memungkinkan Anda untuk bekerja dengan segala jenis sumber daya dan mengelola versi paket, dan juga sepenuhnya mendukung antarmuka UPM asli.

Anda dapat menggunakan Verdaccio sebagai repositori npm. Ada dokumentasi terperinci untuk itu, dan hanya perlu beberapa perintah untuk meluncurkannya.

Pengaturan lingkungan


Pertama, Anda perlu menginstal node.js.

Pembuatan paket


Untuk membuat paket, Anda harus menempatkan file package.json , yang akan menggambarkannya, di direktori dengan isi paket ini. Anda perlu melakukan hal berikut:

  1. Pergi ke direktori proyek yang ingin kita buat paket.
  2. Jalankan perintah npm init dan masukkan nilai yang diperlukan selama dialog. Untuk nama, tentukan nama dalam format domain balik, misalnya paket com.plarium.somepackage .
  3. Untuk menampilkan nama paket dengan mudah, tambahkan properti displayName ke package.json dan isi.
  4. Karena npm berorientasi pada js, file berisi properti yang tidak perlu main dan scripts yang tidak digunakan Unity. Lebih baik menghapusnya agar tidak mengacaukan deskripsi paket. File akan terlihat 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 hasilkan file .meta untuk package.json (Unity tidak melihat aset tanpa file .meta, paket untuk Unity hanya terbuka untuk dibaca).

Pengiriman paket


Untuk mengirim paket, Anda perlu menjalankan perintah: npm publish --registry * * .

Menginstal dan memperbarui paket melalui Unity Package Manager


Untuk menambahkan paket ke proyek Unity, Anda perlu:

  1. Tambahkan informasi sumber paket ke file manifest.json . Untuk melakukan ini, tambahkan properti scopedRegistries dan tentukan cakupan dan alamat sumber tempat lingkup spesifik akan dicari.

     "scopedRegistries": [ { "name": "Main", "url": "   ", "scopes": [ "com.plarium" ] } ] 
  2. Pergi ke Unity dan buka jendela Package Manager (bekerja dengan paket khusus tidak berbeda dengan bekerja dengan paket bawaan).
  3. Pilih Semua Paket.
  4. Temukan paket yang Anda butuhkan dan tambahkan.


Bekerja dengan sumber dan debugging


Agar sumber terhubung ke proyek, Anda harus membuat Definisi Majelis untuk paket tersebut.

Menggunakan paket tidak membatasi kemampuan debug. Namun, ketika bekerja dengan paket di Unity, Anda tidak bisa pergi ke IDE dengan mengklik kesalahan di konsol jika kesalahan terjadi dalam paket. Ini disebabkan oleh fakta bahwa Unity tidak melihat skrip sebagai file terpisah, karena ketika menggunakan Assembly Definition mereka dikumpulkan di perpustakaan dan terhubung ke proyek. Saat bekerja dengan kode sumber dari suatu proyek, beralih ke IDE dengan klik tersedia.

Skrip dalam proyek dengan paket yang terhubung:


Script dari paket dengan breakpoint yang berfungsi:


Perbaikan patch yang mendesak


Paket-paket kesatuan yang ditambahkan ke proyek hanya-baca, tetapi mereka dapat diedit dalam cache paket. Untuk melakukan ini, Anda harus:

  1. Pergi ke paket di cache paket.


  2. Buat perubahan yang diperlukan.
  3. Perbarui versi dalam file package.json .
  4. Kirim paket npm publish --registry * * .
  5. Perbarui versi paket ke yang diperbaiki melalui antarmuka UPM.

Konflik Impor Paket


Saat mengimpor paket, konflik GUID berikut dapat terjadi:

  1. Paket - paket. Jika, ketika mengimpor paket, ditemukan bahwa paket yang sudah ditambahkan memiliki aset dengan GUID yang sama, aset dengan GUID yang cocok dari paket impor tidak akan ditambahkan ke proyek.
  2. Paket adalah proyek. Jika, ketika mengimpor paket, tampaknya proyek memiliki aset dengan GUID yang cocok, maka aset dari paket tersebut tidak akan ditambahkan ke proyek. Namun, aset yang bergantung padanya akan mulai menggunakan aset dari proyek.

Mentransfer aset dari proyek ke paket


Jika Anda mentransfer aset dari proyek ke paket dengan Unity terbuka, fungsinya akan dipertahankan, dan tautan dalam aset dependen akan mulai menggunakan aset dari paket.

Penting : ketika Anda menyalin aset dari suatu proyek ke sebuah paket, konflik "Paket - Proyek" akan terjadi, seperti yang dijelaskan dalam bagian di atas.

Kemungkinan solusi konflik


  1. Penugasan kembali GUID sesuai dengan algoritme mereka sendiri saat mengimpor semua aset untuk menghindari tabrakan.
  2. Menambahkan semua aset ke satu proyek dengan pembagian selanjutnya ke dalam paket.
  3. Pembuatan database yang berisi GUID dari semua aset, dan validasi saat mengirim paket.

Kesimpulan


UPM adalah solusi baru untuk mendistribusikan sumber daya bersama ke Unity, yang dapat menjadi alternatif yang layak untuk metode yang ada. Rekomendasi yang dijelaskan dalam artikel muncul berdasarkan kasus nyata. Kami harap Anda menemukan mereka berguna.

Source: https://habr.com/ru/post/id445432/


All Articles