Bagaimana cara menghindari spaghetti di animator?


9

Saya bekerja dengan animasi di Unity dan sejauh ini saya hanya membuat empat (Atas Bawah Kiri dan Kanan) dan jendela animasi saya terlihat mengikuti ... masukkan deskripsi gambar di sini

Masalahnya adalah jika saya bergerak ke atas, saya ingin pahlawan tetap mencari ke atas, tidak pergi ke 'netral idle' (atau bagaimanapun ia mulai), tetapi itu berarti saya memiliki 4 posisi siaga ... dan masing-masing dari mereka dapat beralih ke atas, bawah , Kiri atau Kanan dan mereka berjalan secara eksponensial dengan setiap tindakan tambahan ...

Yang membuat saya merasa seperti melakukan sesuatu yang salah ....

Apakah ada cara yang lebih baik untuk membuat transisi di antara tindakan yang berbeda?


Saya sudah mencoba melakukan ini sejak lama. Sayangnya, kesimpulan saya adalah, Anda tidak bisa. Animator SELALU berubah menjadi jaringan spageti dan kita harus hidup dengannya. Lihatlah video ini, ini membantu youtube.com/...
Nevermind

Jawaban:


9

Anda dapat memecahkan masalah jenis ini dengan BlendTrees (secara umum ide bijak untuk sering mengandalkan pohon campuran). Blend tree adalah jenis keadaan multi-animasi yang didasarkan pada parameter (float) yang memutuskan animasi yang dikandungnya untuk saat ini aktif (atau sebagai alternatif animasi yang dihasilkan dapat merupakan perpaduan beberapa animasi). Bahkan ketika animasi tidak dicampur, tetapi ditukar, swap terjadi pertengahan animasi (yaitu jika animasi "keluar" adalah pada 35% yang baru dimainkan dari 35% ke depan). Dari "luar" semua ini disembunyikan seolah-olah itu satu negara / sederhana.

Misalnya Anda memiliki pohon campuran dengan 8 animasi sprite (idle dengan 4 arah utama dan 4 diagonal). Ada 2 parameter dalam pohon campuran ini - "horisontal" dan "vertikal". Dan berdasarkan 2 parameter tersebut pohon campuran akan memutuskan animasi apa yang akan diputar. Berdasarkan parameter "horizontal", pohon campuran akan memilih antara animasi kiri / kanan dan parameter "vertikal" akan menentukan animasi atas / bawah. Kemudian ketika digabungkan Anda akan memiliki semua 8 animasi dengan diagonal (itu adalah ide yang sama yang ada di belakang joypads / joystick).

masukkan deskripsi gambar di sini

Agak membingungkan, meskipun StackExchange tidak suka tautan, saya akan menautkan video contoh singkat yang saya buat. Perhatikan bagian kanan atas layar. Titik abu-abu adalah "negara" / animasi dan yang aktif adalah yang menutup ke titik merah. Seperti yang dikatakan di awal, itu bisa menjadi lebih kompleks dan setiap animasi memiliki pengaruh / kekuatan berdasarkan jaraknya ke titik merah, menghasilkan perpaduan antara beberapa animasi.

Dari luar hanya satu negara (pohon campuran) dan ketika Anda menerapkan konsep yang sama untuk berjalan dan menyerang, Anda hanya akan memiliki 3 negara yang terhubung.

Blend Trees dibuat dengan klik kanan pada area Animator kosong Create State -> From New Blend Tree. Dari sana semuanya ada di Inspektur. Dengan pohon campuran yang dipilih, Anda dapat memilih jenis pohon campuran (1D, 2D, dll.), Menambahkan animasi, memposisikannya (relatif terhadap nilai parameter) dan memilih parameter pengendalian.

Jika Anda ingin info lebih lanjut tentang Blend Trees berikutnya adalah video dari Unity - Unite 2016 dan Tutorial Unity .


2

Masalahnya di sini adalah Anda mencoba untuk mengikat semuanya daripada menggunakan pemicu untuk beralih di antara idle. Anda harus memilih animasi idle menggunakan kondisional if-else atau case-switch. Saya telah membuat diagram yang terlihat jauh lebih rapi (anggap salah satunya adalah case default):

masukkan deskripsi gambar di sini

Informasi tambahan:

Lihatlah Parameter Animasi tentang cara mengatur parameter agar animator mengenali, Menyatakan Mesin untuk menggabungkan animasi bersama, Menyatakan Perilaku Mesin untuk cara memeriksa variabel yang telah Anda tetapkan.


Hai John, tetapi bagaimana saya benar-benar melakukannya? Mengapa saya menggunakan pelatuk untuk beralih di antara idle, atau beralih di antara idle sama sekali? bagaimana cara memilih animaton menganggur menggunakan jika lain? Juga dalam diagram mengapa saya akan pindah ke idleleft dan kemudian ke kiri dan tidak ke kiri dan pergi ke idleleft menunggu tindakan selanjutnya, atau ini harus sebaliknya?
Matas Vaitkevicius

@MatasVaitkevicius Anda dapat mengatur dan memeriksa variabel di akhir atau mulai dari animasi. Anda dapat membuat animasi kosong yang tidak melakukan apa-apa selain memeriksa kasing dan mengarahkannya ke bagian selanjutnya atau membuat lapisan abstraksi darinya. Saya telah menyertakan beberapa tautan ke manual untuk info lebih lanjut.
John Hamilton

Jadi, bagaimana saya membuat jika lain dengan parameter yang akan beralih transisi? Tidak ada contoh semua mekanisme yang Anda
tautkan

@MatasVaitkevicius Anda harus benar-benar mencari sedikit lebih dulu: gamedev.stackexchange.com/questions/103611/...
John Hamilton

Tapi beginilah cara saya melakukannya. memicu api pada aksi dan memulai animasi kemudian masuk ke siaga untuk arah itu ... Sekarang apa yang Anda katakan (jika saya mengerti Anda dengan benar) bahwa saya bisa setelah animasi daripada pergi ke arah itu pergi untuk beralih mekanisme yang akan memilih menganggur yang tepat untuk saya ... tapi saya belum melihat mekanisme seperti itu di mana pun, dapatkah Anda menyalinnya ke dalam jawaban Anda tolong ....
Matas Vaitkevicius
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.