State Visualizer — MRTK3
StateVisualizer adalah antarmuka ramah desainer kode rendah untuk menulis umpan balik visual sebagai respons terhadap status interaksi. Ini memungkinkan efek berbasis animasi yang kompleks serta efek umum yang telah dibuat sebelumnya.
Filsafat
Di MRTK3, kami memberlakukan pemisahan status dan visual. Interactables bertanggung jawab atas logika dan status interaksi mereka, tetapi dirancang untuk tidak merender visual atau efek mereka sendiri berdasarkan statusnya. Motivasi untuk pemisahan ini adalah bahwa logika status dan interaksi dapat digunakan kembali di beberapa konteks visual, dan bahwa umpan balik visual dan arah seni interaksi dapat disesuaikan tanpa menyentuh status atau interaksi yang mendasar. Selain itu, mencampur status ke dalam visual dapat menghasilkan kode yang tidak dapat dicapai dengan hubungan yang kompleks dan sulit dipahami antara efek visual dan interaksi yang diwakilinya.
StateVisualizer, sebagai hasilnya, sebagian besar tanpa status. Ini mendengarkan StatefulInteractable terkait dan menjalankan grafik IEffect
berdasarkan status interaksi saat ini. Status kompleks seperti Selectedness
dan niat hover pasif/aktif diekspos untuk digunakan di StateVisualizer. Beberapa efek dapat merespons nilai pemilihan pecahan untuk mendorong efek "analog" yang menyenangkan yang merespons gerakan pengguna, mencubit, atau menekan.
StateVisualizer sebagian dibangun di Unity Playables API.
Cara menggunakan
Tambahkan StateVisualizer ke interactable Anda, bersama dengan Animator. Pilih status, dan tambahkan efek yang Anda inginkan. Pastikan bahwa Interactable
properti diatur jika StateVisualizer tidak dapat menemukan yang dapat berinteraksi saat runtime.
Penting
Anda TIDAK memerlukan Pengontrol Animator pada Animator, kecuali saat menulis efek. StateVisualizer mendorong Animator langsung melalui API Playables. StateVisualizer menghindari AnimatorControllers untuk performa dan pemeliharaan yang lebih baik.
Menulis animasi dengan StateVisualizer
StateVisualizer tidak menggunakan AnimatorController, sehingga animasi tidak dapat dipratinjau pada waktu edit secara default. Untuk mengatasinya, buat AnimatorController sementara yang berisi animasi relevan yang sedang Anda kerjakan dan referensikan di Animator. Namun, ingat bahwa mereka tidak diperlukan pada runtime dan mungkin memiliki dampak performa yang tidak diinginkan jika tidak dihapus.
MRTK mengirimkan contoh "AuthoringControllers" yang kami gunakan untuk menulis efek animasi pada komponen kami. Jangan ragu untuk menduplikasi contoh kami untuk kebutuhan Anda sendiri.
Performa
StateVisualizer dibangun untuk performa optimal, meskipun menggunakan animasi Animator dan Unity, yang dalam konteks lain dapat mahal dalam skala besar. Untuk mengatasi masalah ini, StateVisualizer secara cerdas memusnahkan Animator dan secara agresif meminimalkan jumlah waktu yang dijalankan Animator. Selain itu, Playables API memiliki performa yang jauh lebih baik daripada mesin status AnimatorController. Kurangnya AnimatorControllers berkontribusi secara signifikan pada kesederhanaan sistem StateVisualizer dan performanya dalam skala besar.
Saat ini, StateVisualizer melakukan polling status yang dapat berinteraksi alih-alih mengandalkan pendengar peristiwa untuk hanya bereaksi bila perlu. Bagian stateVisualizer ini sedang dalam pengembangan aktif dan dapat direfaktorkan ke pendengar peristiwa untuk performa yang lebih baik.
Efek
Efek | Deskripsi |
---|---|
AnimationEffect ![]() |
Dalam OneShot mode , ini memutar animasi tunggal maju ketika status diaktifkan dan animasi yang sama mundur ketika status dinonaktifkan. Dalam PlaybackTimeMatchesValue mode, waktu pemutaran animasi dikontrol langsung oleh nilai pecahan status (misalnya, Keseleksian untuk status Pilih). |
TwoWayAnimationEffect ![]() |
Mirip OneShot dengan mode dari AnimationEffect , tetapi menggunakan dua animasi terpisah, satu untuk setiap "arah". |
GraphicTintEffect ![]() |
Mewarnai Graphic daftar komponen ke warna tertentu. Efek ini menawarkan opsi yang sama PlaybackMode seperti , dengan hasil yang sama (OneShot melakukan transisi penuh pada perubahan status; PlaybackTimeMatchesValue akan cocok dengan kemajuan transisi ke nilai pecahan statusAnimationEffect .)Operasi campuran ini juga akan berbaur di atas warna atau animasi lain yang saat ini dijalankan pada grafik StateVisualizer. Perhatikan bahwa jika Tintables memiliki warna awal yang berbeda, efek warna ini mungkin salah berbaur. Gunakan efek Warna terpisah untuk elemen dengan warna dasar yang berbeda. |
SpriteTintEffect ![]() |
Melakukan operasi yang sama persis seperti GraphicTintEffect tetapi untuk SpriteRenderer s. |
SpriteSwapEffect ![]() |
Mengatur target Image ke ActiveSprite atau InactiveSprite tergantung pada apakah status saat ini aktif atau tidak aktif. Berguna untuk beralih! |
SetTargetsActiveEffect ![]() |
Mengaktifkan atau menonaktifkan daftar GameObjects tergantung pada apakah status aktif atau tidak aktif. Invert akan menyebabkan perilaku yang berlawanan. |
PlayableAssetEffect ![]() |
StateVisualAsset adalah ScriptableObject yang berisi aset Playable yang dapat digunakan kembali. Efek ini akan menghubungkan aset yang dapat dimainkan ke grafik StateVisualizer. (Fitur ini masih eksperimental dan dapat berubah.) |
Efek kustom
Sebagian besar efek yang tidak dicakup oleh salah satu jenis efek yang diuji coba di atas biasanya dapat ditulis sebagai AnimationEffect
. Namun, jika Anda ingin membuat efek baru berbasis bespoke dan non-animasi, Anda dapat mengimplementasikan IEffect
antarmuka atau subkelas salah satu efek kami yang ada. IEffect
Lihat referensi API untuk detail selengkapnya.
Status kustom
StateVisualizer direncanakan untuk mendukung status kustom di masa mendatang. Menantikan.