HeadlinesBriefing favicon HeadlinesBriefing.com

Panduan Animasi Bevy: Pemain dan Grafik

Hacker News •
×

Jadi Anda baru saja mengunduh file .glb karakter 3D animasi dari situs web aset gratis. Anda memiliki aplikasi Bevy dasar yang berjalan. Sekarang Anda ingin memunculkan karakter Anda di aplikasi Bevy Anda. Cukup mudah, mungkin ada fungsi untuk itu. Anda mencari contoh Animated Mesh dasar di situs web Bevy... dan dengan cepat menjadi jelas bahwa segalanya tidak sesederhana yang Anda harapkan. Ada banyak pengaturan, tipe terkait animasi yang tujuan pastinya tidak jelas... Anda mungkin dapat menyesuaikan contoh dengan kebutuhan Anda dengan cukup cepat, tetapi benar-benar membentuk model mental tentang bagaimana animasi bekerja di Bevy, berdasarkan contoh, akan membutuhkan pemikiran yang serius.

Posting ini adalah apa yang saya harapkan ketika mencoba memahami animasi di Bevy beberapa minggu lalu. Saya mulai dengan membangun, langkah demi langkah, model mental yang cukup untuk menangani animasi dasar di Bevy. Kemudian saya memandu Anda melalui contoh resmi, menjelaskan bagaimana kaitannya dengan model mental itu, dan juga sedikit memegang tangan Anda saat menemukan metode yang mungkin belum Anda temui. Jika Anda nyaman dengan dasar-dasar ECS Bevy, Anda adalah audiens target posting ini.

Intuisi pertama: Mari kita lupakan Bevy dan ECS sebentar, dan berpikir (sangat abstrak) tentang apa yang diperlukan untuk membuat model 3D animasi bergerak. Anda membutuhkan dua bahan: Model 3D yang dimunculkan (atau semacam referensi ke sana), Animasi yang akan diputar (atau semacam referensi ke sana). Jadi pada awalnya, cara yang mungkin Anda harapkan untuk memutar animasi adalah seperti ini: my_model.play_animation(my_animation); Inilah model mental kita sejauh ini: Sekarang ini sebenarnya agak dekat dengan cara fungsi Bevy yang sebenarnya bekerja, yaitu metode play dari tipe AnimationPlayer... atau setidaknya akan begitu, jika self-nya benar-benar merujuk ke model 3D, dan argumen animation-nya benar-benar merujuk ke animasi. Saat ini, bagaimanapun, tidak jelas bahwa mereka melakukannya. Tapi mari kita lihat lebih detail bagaimana dua bahan kita direpresentasikan di Bevy, dan mungkin kita dapat menyelaraskan intuisi kita dengan cara kerja fungsi play.

AnimationPlayer: Cara untuk mengontrol animasi model 3D. Katakanlah Anda memunculkan model 3D dari file .glb. Idealnya, Anda ingin merujuknya menggunakan ID entitas yang dimunculkan, kecuali bahwa model 3D umumnya tidak dimunculkan sebagai satu entitas, melainkan sebagai hierarki entitas: Untuk menganimasikan model Anda, Anda perlu merujuknya dengan cara lain. Bevy memiliki mekanisme untuk melakukan hal itu — merujuk model 3D untuk animasi — dalam bentuk tipe AnimationPlayer. AnimationPlayer adalah Komponen yang secara otomatis dimasukkan ke dalam Entitas... di suatu tempat dalam hierarki entitas yang sesuai dengan model 3D yang dapat dianimasikan, ketika model itu dimunculkan. Setelah Anda mendapatkan AnimationPlayer, Anda dapat menyuruhnya untuk memutar/menjeda animasi, mengakses yang sedang diputar... tetapi itu mengasumsikan Anda memiliki animasi sejak awal! Mari fokus pada itu sekarang.

AnimationGraph: Cara untuk menyimpan dan menggabungkan animasi. Cara animasi direpresentasikan di Bevy agak kompleks, karena yang umumnya Anda manipulasi bukanlah animasi tunggal, tetapi instance dari struktur data yang mampu menyimpan beberapa animasi sekaligus dan menggabungkannya satu sama lain. Struktur itu adalah AnimationGraph. Saya tidak akan membahas detail tentang bagaimana AnimationGraph digunakan di sini; setelah Anda nyaman dengan animasi sederhana, Anda dapat mempelajari lebih lanjut tentang grafik animasi umum dengan contoh AnimationGraph. Untuk sekarang kita akan fokus pada kasus di mana grafik kita hanya berisi satu animasi yang kita minati. Dalam kasus tersebut, data yang mengidentifikasi animasi Anda akan menjadi: (Referensi ke) AnimationGraph, Pengidentifikasi di mana animasi Anda sebenarnya berada di dalam grafik — itulah gunanya tipe NodeIndex.

Menyatukannya: Oke, katakanlah Anda memiliki AnimationPlayer, serta AnimationGraph dan NodeIndex. Inilah cara Anda menghubungkannya untuk memutar animasi Anda: Masukkan referensi ke ....