Undopro adalah sistem undo berbasis perintah yang terintegrasi ke dalam sistem default Unity. Ini memungkinkan devs untuk menggunakan tindakan untuk operasi undo/redo mereka tanpa memaksa pengguna ke dalam undo-workflow baru!
Utas forum
Bergantung pada bagaimana Anda ingin menggunakan undopro / mendistribusikan alat Anda, Anda memiliki beberapa opsi.
Unity hanya memberikan informasi yang sangat terbatas tentang sistem undo:
Secara internal, Undopro membuat catatan dummy dalam sistem default ketika API untuk menambahkan catatan berbasis perintah dipanggil. Ini kemudian dilacak menggunakan panggilan balik yang tersedia dan perintah dieksekusi ketika mereka beralih dari redo undo stack atau sebaliknya. Hurden besar adalah perilaku sistem undo default: hampir tidak dapat diprediksi! Catatan dapat duplikat dalam kondisi tertentu saat dibatalkan/diulang, atau lenyap. Ini sangat sulit, tetapi persyaratan untuk membuat algoritma pelacakan yang solid. Jelas penambahan catatan baru juga harus dideteksi.
Ketika pelacakan telah dilakukan, nilai shift untuk baik undo dan redo stack secara terpisah dihitung (ingat, catatan mungkin menghilang atau duplikat selama undo/redo!). Catatan internal kemudian diperbarui sesuai dan catatan untuk membatalkan/redo diuraikan.
Dalam perjalanan semua ini, panggilan balik tambahan yang dioperasi/onredoperformed/onaddundorecord dipanggil.
Serialisasi juga merupakan masalah besar, sebagai tindakan, dan bahkan tindakan anonim yang lebih buruk, sulit untuk diserialisasi. Undopro memelihara GameObject sementara yang tersembunyi di adegan saat ini yang menyimpan semua catatan khusus yang perlu diserialisasi. Serialisasi dicapai oleh beberapa kelas pembungkus yang secara cerdas menangani setiap kombinasi untuk tindakan, objek, metode, dll.
Sistem ini bahkan dapat digunakan secara umum! -> Mendukung semua objek serializable (baik dari UnityEngine.Object dan System.Object) dan objek yang tidak dapat diserialkan sebagian (satu lapisan serialisasi anggota serializable), semua objek lain mendapatkan default -> mendukung bahkan tindakan yang paling anonim (belum ada yang tidak dapat dikeluarkan)! Anda dapat sepenuhnya menggunakan konteks dan referensi hampir semua variabel lokal (kondisi yang diuraikan di atas berlaku)!
Sistem ini tampaknya dapat diandalkan tetapi saya tidak mengklaim itu benar-benar tahan peluru! Kasus terburuk yang dapat terjadi ketika mengacaukan pelacakannya adalah bahwa catatan Anda diimbangi dengan jumlah kecil (tindakan dieksekusi satu atau dua catatan setelah/sebelumnya). Saat ini tidak ada situasi seperti itu yang diketahui, tetapi saya tidak bertanggung jawab atas kegagalan apa pun! Jika Anda berhasil memecahkannya, tolong beri tahu saya tentang hal itu dan beri saya informasi tentang apa yang telah Anda lakukan (melalui masalah) dan saya mencoba memperbaikinya :)
Cukup letakkan folder undopro di suatu tempat di proyek Anda dan Anda siap berangkat! Meskipun tidak harus berada di folder editor, itu tidak berarti Anda dapat menggunakannya saat runtime! Fungsi yang membutuhkan API editor dikecualikan saat runtime dengan pemeriksaan preprocessor. Di folder editor di sisi lain Anda menemukan dua jendela yang berguna untuk menguji fungsionalitas 1. Sistem Undo itu sendiri dan 2. Sistem serialisasi aksi. Seiring dengan jendela -jendela ini, Anda dapat men -debug sistem dengan mudah untuk melihat cara kerjanya dengan tidak mengkomentasikan #define undo_debug di Undopromanager! Untuk hanya menggunakan sistem serialisasi tindakan untuk proyek Anda sendiri cukup salin folder undopro/serializableAction bersama dengan lisensi tentu saja!
API untuk pengembang sangat sederhana. Tambahkan ketergantungan undopro dan kemudian gunakan undopromanager untuk berinteraksi dengan sistem. Elemen Penting:
Rekomendasi: Jika Anda menghitung sesuatu atau melakukan operasi apa pun dengan hasil perantara, sangat mudah untuk mengatur ini asalkan hasilnya dapat di -serial. Alih -alih menghitung ulang dalam tindakan undo/redo cukup atur hasil serializable sebelumnya dalam tindakan undo dan yang baru dalam aksi redo. Selesai!
Perpanjangan ini dibuat oleh Seneral dan diterbitkan di bawah lisensi MIT (selanjutnya ditentukan dalam lisensi.md)