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.
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.
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.
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
.
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
Menyediakan persekitaran
Mula-mula anda perlu memasang
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:
- 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:
{ "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 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:
- Tambahkan pada fail
manifest.json
maklumat tentang sumber pakej. Untuk melakukan ini, anda perlu menambah hartascopedRegistries
dan nyatakan skop dan alamat sumber tempat skop tertentu akan dicari."scopedRegistries": [ { "name": "Main", "url": "Π°Π΄ΡΠ΅Ρ Π΄ΠΎ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ° ΠΏΠ°ΠΊΠ΅ΡΠΎΠ²", "scopes": [ "com.plarium" ] } ]
- Pergi ke Unity dan buka tetingkap Pengurus Pakej (bekerja dengan pakej tersuai tidak berbeza daripada bekerja dengan pakej terbina dalam).
- Pilih Semua Pakej.
- Cari pakej yang anda perlukan dan tambahkannya.
Bekerja dengan sumber dan penyahpepijatan
Untuk membolehkan sumber disambungkan kepada projek, anda perlu mencipta
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:
Skrip dari pakej dengan titik putus yang berfungsi:
Pembetulan segera pada pakej
Pakej perpaduan yang ditambahkan pada projek adalah baca sahaja, tetapi boleh diedit dalam cache pakej. Untuk melakukan ini anda perlukan:
- Pergi ke pakej dalam cache pakej.
- Buat perubahan yang diperlukan.
- Kemas kini versi dalam fail
package.json
. - Hantar pakej
npm publish --registry *Π°Π΄ΡΠ΅Ρ Π΄ΠΎ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ° ΠΏΠ°ΠΊΠ΅ΡΠΎΠ²*
. - Kemas kini versi pakej kepada yang telah diperbetulkan melalui antara muka UPM.
Konflik import pakej
Konflik GUID berikut mungkin berlaku apabila mengimport pakej:
- 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.
- 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
- Menetapkan semula GUID menggunakan algoritma kami sendiri apabila mengimport semua aset untuk menghapuskan perlanggaran.
- Menambah semua aset pada satu projek dan kemudian membahagikannya kepada pakej.
- 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