State Visualizer — MRTK3

A graphic showing the State Visualizer script in the Unity Inspector window.

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 IEffectberdasarkan 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.

Adding an effect

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

AnimationEffect inspector view
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

TwoWayAnimationEffect inspector view
Mirip OneShot dengan mode dari AnimationEffect, tetapi menggunakan dua animasi terpisah, satu untuk setiap "arah".
GraphicTintEffect

GraphicTintEffect inspector view
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.)

  • Penimpaan akan mewarnai target ke warna tertentu itu sendiri.
  • Aditif akan secara aditif memadukan warna ke warna yang ada.
  • Kalikan akan mengalikan warna baru ke warna yang ada.

    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

    SpriteTintEffect inspector view
    Melakukan operasi yang sama persis seperti GraphicTintEffect tetapi untuk SpriteRenderers.
    SpriteSwapEffect

    SpriteSwapEffect inspector view
    Mengatur target Image ke ActiveSprite atau InactiveSprite tergantung pada apakah status saat ini aktif atau tidak aktif. Berguna untuk beralih!
    SetTargetsActiveEffect

    SetTargetsActiveEffect inspector view
    Mengaktifkan atau menonaktifkan daftar GameObjects tergantung pada apakah status aktif atau tidak aktif. Invert akan menyebabkan perilaku yang berlawanan.
    PlayableAssetEffect

    PlayableAssetEffect inspector view
    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.