Unity merupakan platform yang sudah ada cukup lama dan terus berkembang. Namun, saat mengerjakan beberapa proyek secara bersamaan, Anda masih mungkin mengalami kesulitan dalam menggunakan sumber umum (.cs), perpustakaan (.dll), dan aset lainnya (gambar, suara, model, prefab). Pada artikel ini kita akan berbicara tentang pengalaman kami dengan solusi asli untuk masalah Unity.
Metode Distribusi Sumber Daya Bersama
Ada lebih dari satu cara untuk menggunakan sumber daya bersama untuk proyek yang berbeda, namun masing-masing pendekatan memiliki pro dan kontra.
1. Duplikasi - kami menduplikasi sumber daya antar proyek βdengan tangan.β
Pro:
- Cocok untuk semua jenis sumber daya.
- Tidak ada masalah ketergantungan.
- Tidak ada masalah dengan GUID aset.
Cons:
- Repositori raksasa.
- Tidak ada kemungkinan membuat versi.
- Kesulitan melacak perubahan pada sumber daya bersama.
- Kesulitan memperbarui sumber daya bersama.
2.
Pro:
- Anda dapat bekerja dengan sumbernya.
- Anda dapat mendistribusikan aset.
- Tidak ada masalah ketergantungan.
Cons:
- Diperlukan pengalaman Git.
- Git tidak terlalu bersahabat dengan file biner - Anda harus menghubungkan LFS.
- Kontrol akses untuk repositori.
- Kesulitan dalam meningkatkan dan menurunkan versi.
- Tabrakan GUID mungkin terjadi dan tidak ada perilaku yang jelas di pihak Unity untuk mengatasinya.
3. NuGet - distribusi perpustakaan bersama melalui paket NuGet.
Pro:
- Pekerjaan yang nyaman dengan proyek yang tidak bergantung pada Unity.
- Pembuatan versi dan resolusi ketergantungan yang mudah.
Cons:
- Unity tidak dapat bekerja dengan paket NuGet secara langsung (di GitHub Anda dapat menemukan NuGet Package Manager untuk Unity, yang memperbaikinya, tetapi ada beberapa perbedaan).
- 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 penimpaan file .meta dalam paket karena konflik GUID.
- Kemungkinan membuat versi.
- Kemampuan untuk mendistribusikan semua jenis sumber daya untuk Unity.
Cons:
- Konflik GUID masih bisa terjadi.
- Tidak ada dokumentasi untuk implementasi.
Metode terakhir ini memiliki lebih banyak kelebihan daripada kekurangan. Namun, sekarang ini tidak terlalu populer karena kurangnya dokumentasi, dan oleh karena itu kami akan membahasnya secara detail.
Manajer Paket Persatuan
Unity Package Manager (UPM) adalah alat manajemen paket. Itu ditambahkan di Unity 2018.1 dan hanya digunakan untuk paket yang dikembangkan oleh Unity Technologies. Namun, mulai versi 2018.3, paket khusus dapat ditambahkan.
Antarmuka Manajer Paket Unity
Paket-paket tersebut tidak berakhir di sumber proyek (direktori Aset). Mereka berada di direktori terpisah %projectFolder%/Library/PackageCache
dan tidak mempengaruhi proyek dengan cara apa pun, satu-satunya penyebutannya dalam kode sumber ada di file packages/manifest.json
.
Paket dalam sistem file proyek
Sumber paket
UPM dapat menggunakan beberapa sumber paket:
1. Sistem file.
Pro:
- Kecepatan implementasi.
- Tidak memerlukan alat pihak ketiga.
Cons:
- Kesulitan dalam membuat versi.
- Akses bersama ke sistem file diperlukan untuk semua orang yang bekerja dengan proyek ini.
2. Repositori Git.
Pro:
- Yang Anda butuhkan hanyalah repositori Git.
Cons:
- Anda tidak dapat beralih antar versi melalui jendela UPM.
- Tidak berfungsi dengan semua repositori Git.
3. repositori npm.
Pro:
- Sepenuhnya mendukung fungsionalitas UPM dan digunakan untuk mendistribusikan paket resmi Unity.
Cons:
- Saat ini mengabaikan semua versi string paket kecuali "-pratinjau".
Di bawah ini kita akan melihat implementasi UPM + npm. Bundel ini nyaman karena memungkinkan Anda bekerja dengan semua jenis sumber daya dan mengelola versi paket, dan juga sepenuhnya mendukung antarmuka UPM asli.
Anda dapat menggunakannya sebagai repositori npm
Pengaturan lingkungan
Pertama, Anda perlu menginstal
Membuat paket
Untuk membuat paket, Anda perlu menempatkan file tersebut package.json
, yang akan menjelaskannya, ke direktori dengan isi paket ini. Anda perlu melakukan hal berikut:
Masuk ke direktori proyek yang ingin kita jadikan paket.
Jalankan perintah npm init dan masukkan nilai yang diperlukan selama dialog. Untuk nama, tentukan nama dalam format domain terbalik, misalnya com.plarium.somepackage.
Untuk menampilkan nama paket dengan mudah, tambahkan properti displayName ke package.json dan isi.
Karena npm berorientasi pada js, file tersebut berisi properti main dan skrip yang tidak kita perlukan, yang tidak digunakan Unity. Lebih baik menghapusnya agar tidak mengacaukan deskripsi paket. File tersebut akan terlihat seperti ini:
- Masuk ke direktori proyek yang ingin kita jadikan paket.
- Jalankan perintah npm init dan masukkan nilai yang diperlukan selama dialog. Untuk nama, tentukan nama dalam format domain terbalik, misalnya com.plarium.somepackage.
- Untuk menampilkan nama paket dengan mudah, tambahkan properti displayName ke package.json dan isi.
- Karena npm berorientasi pada js, file tersebut berisi properti main dan skrip yang tidak kita perlukan, yang tidak digunakan Unity. Lebih baik menghapusnya agar tidak mengacaukan deskripsi paket. File tersebut 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" }
- Buka Unity dan buat file .meta untuk package.json (Unity tidak melihat aset tanpa file .meta, paket untuk Unity dibuka hanya untuk dibaca).
Mengirim 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 memerlukan:
- Tambahkan ke berkas
manifest.json
informasi tentang sumber paket. Untuk melakukan ini, Anda perlu menambahkan propertiscopedRegistries
dan menunjukkan cakupan dan alamat sumber di mana cakupan tertentu akan dicari."scopedRegistries": [ { "name": "Main", "url": "Π°Π΄ΡΠ΅Ρ Π΄ΠΎ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ° ΠΏΠ°ΠΊΠ΅ΡΠΎΠ²", "scopes": [ "com.plarium" ] } ]
- Buka Unity dan buka jendela Package Manager (bekerja dengan paket khusus tidak berbeda dengan bekerja dengan paket bawaan).
- Pilih Semua Paket.
- Temukan paket yang Anda butuhkan dan tambahkan.
Bekerja dengan sumber dan debugging
Agar sumber dapat terhubung ke proyek, Anda perlu membuatnya
Menggunakan paket tidak membatasi opsi debugging Anda. Namun, ketika bekerja dengan paket di Unity, Anda tidak dapat membuka IDE dengan mengklik kesalahan di konsol jika kesalahan terjadi pada paket. Hal ini disebabkan oleh fakta bahwa Unity tidak melihat skrip sebagai file terpisah, karena ketika menggunakan Definisi Majelis, skrip tersebut dikumpulkan ke dalam perpustakaan dan disertakan dalam proyek. Saat bekerja dengan sumber dari suatu proyek, klik ke IDE tersedia.
Skrip dalam proyek dengan paket yang terhubung:
Skrip dari paket dengan breakpoint yang berfungsi:
Perbaikan mendesak pada paket
Paket Unity yang ditambahkan ke proyek bersifat read-only, namun dapat diedit di cache paket. Untuk melakukan ini, Anda perlu:
- Buka paket di cache paket.
- Buat perubahan yang diperlukan.
- Perbarui versi dalam file
package.json
. - Kirim paket
npm publish --registry *Π°Π΄ΡΠ΅Ρ Π΄ΠΎ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ° ΠΏΠ°ΠΊΠ΅ΡΠΎΠ²*
. - Perbarui versi paket ke versi yang diperbaiki melalui antarmuka UPM.
Konflik impor paket
Konflik GUID berikut mungkin terjadi saat mengimpor paket:
- Paket β paket. Jika, saat mengimpor paket, ditemukan bahwa paket yang sudah ditambahkan berisi aset dengan GUID yang sama, aset dengan GUID yang cocok dari paket yang diimpor tidak akan ditambahkan ke proyek.
- Sebuah paket adalah sebuah proyek. Jika, saat mengimpor sebuah paket, ditemukan bahwa proyek tersebut berisi 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 tersebut.
Mentransfer aset dari proyek ke paket
Jika Anda mentransfer aset dari proyek ke paket saat Unity terbuka, fungsinya akan dipertahankan, dan tautan dalam aset dependen akan mulai menggunakan aset dari paket tersebut.
Ini penting: Saat menyalin aset dari proyek ke paket, konflik βPaket - Proyekβ yang dijelaskan pada bagian di atas akan terjadi.
Kemungkinan penyelesaian konflik
- Menugaskan ulang GUID menggunakan algoritme kami sendiri saat mengimpor semua aset untuk menghilangkan tabrakan.
- Menambahkan semua aset ke satu proyek dan kemudian membaginya menjadi beberapa paket.
- Membuat database berisi GUID seluruh aset dan melakukan validasi saat mengirim paket.
Kesimpulan
UPM adalah solusi baru untuk mendistribusikan sumber daya bersama di Unity, yang dapat menjadi alternatif yang layak untuk metode yang sudah ada. Rekomendasi yang diuraikan dalam artikel tersebut didasarkan pada kasus nyata. Kami harap Anda merasakan manfaatnya.
Sumber: www.habr.com