Animatörde spagetti nasıl önlenir?


9

Unity'deki animasyonlarla çalışıyorum ve şimdiye kadar sadece dört (Yukarı Aşağı Sol ve Sağ) yaptım ve animasyon pencerem aşağıdaki gibi görünüyor ... resim açıklamasını buraya girin

Sorun şu ki, Yukarı hareket edersem kahramanın aramaya devam etmesini istiyorum Yukarı 'nötr boşta' gitmemesini (ya da başlamış olmasına rağmen), ama bu 4 Boşta pozisyonum olduğu anlamına gelir ... ve her biri Yukarı, Aşağıya geçiş yapabilir , Sol veya Sağ ve her ek eylemle katlanarak giderler ...

Bu da beni yanlış bir şey yapıyormuşum gibi hissettiriyor ...

Farklı eylemler arasında geçiş yapmanın daha iyi bir yolu var mı?


Bunu uzun zamandır yapmaya çalışıyorum. Ne yazık ki, benim sonucum, sadece yapamazsın. Animatör DAİMA spagetti ağına dönüşüyor ve onunla yaşamak zorundayız. Yine de bu videoya bir göz atın, youtube.com/…
Nevermind

Yanıtlar:


9

Bu tür bir problemi BlendTrees ile çözebilirsiniz (genellikle karışım ağaçlarına güvenmek akıllıca bir fikirdir). Karışım ağacı, (şamandıra) parametrelerine dayalı olarak, içerdiği animasyonlardan hangisinin şu anda aktif olacağına karar veren (veya alternatif olarak elde edilen animasyonun birkaç animasyonun karışımı olabileceğine) karar veren bir çoklu animasyon durumudur. Animasyonlar karıştırılmamış, ancak değiştirilse bile, takas animasyonun ortasında gerçekleşir (yani "çıkış" animasyonu% 35 ise, yenisi% 35 ileriye doğru oynatılır). "Dış" dan tüm bunlar basit / tek bir durum gibi gizlenir.

Örneğin, 8 hareketli grafik animasyonlu bir karışım ağacınız var (4 ana ve 4 çapraz yönde boşta). Bu karışım ağacında 2 parametre vardır - "yatay" ve "dikey". Ve bu 2 parametreye dayanarak, karışım ağacı hangi animasyonun oynatılacağına karar verecektir. "Yatay" parametreye bağlı olarak, karışım ağacı sol / sağ animasyon arasında seçim yapar ve "dikey" parametre yukarı / aşağı animasyonuna karar verir. Sonra kombine edildiğinde 8 animasyonun hepsini de köşegenlerle bulacaksınız (joypads / joystick'lerin arkasındaki fikir aynıdır).

resim açıklamasını buraya girin

Biraz kafa karıştırıcı, StackExchange bağlantıları sevmese bile, yaptığım kısa örnek videoyu bağlayacağım . Ekranın sağ üst kısmına dikkat edin. Gri noktalar "durumlar" / animasyonlardır ve aktif noktalar kırmızı noktaya kapanır. Başlangıçta söylendiği gibi, daha karmaşık olabilir ve her animasyon, kırmızı noktaya olan uzaklığına bağlı olarak bir etkiye / güce sahip olabilir, bu da birkaç animasyon arasında bir karışımla sonuçlanır.

Dışarıdan sadece bir durumu (karışım ağacı) ve aynı kavramı yürüyüş ve saldırı için uyguladığınızda sadece 3 eyalet bağlı olacaktır.

Karışım Ağaçları boş bir Animatör alanına sağ tıklanarak oluşturulur Durum Oluştur -> Yeni Karışım Ağacından. Oradan hepsi Müfettiş'te. Karışım ağacı seçiliyken, karışım ağacının türünü (1D, 2D vb.) Seçebilir, animasyonlar ekleyebilir, konumlandırabilir (parametre değerlerine göre) ve kontrol parametrelerini seçebilirsiniz.

Karışım Ağaçları hakkında daha fazla bilgi edinmek isterseniz, Unity - Unite 2016 ve Unity Tutorials videoları .


2

Buradaki sorun, rölantiler arasında geçiş yapmak için bir tetikleyici kullanmak yerine her şeyi birbirine bağlamaya çalışmanızdır. Bir if-else veya anahtar-durum tipi koşullu kullanarak boş animasyonu seçiyor olmalısınız. Çok daha temiz görünen bir diyagram yaptım (bunlardan birinin varsayılan durum olduğunu varsayalım):

resim açıklamasını buraya girin

İlave bilgi:

Animatörün tanıması için parametrelerin nasıl ayarlanacağına dair Animasyon Parametrelerine bir göz atın, Animasyonları bir araya getirmek için Durum Makineleri , Durum Makinesi Davranışları belirlediğiniz değişkenlerin nasıl kontrol edileceğine ilişkin .


Merhaba John, ama aslında nasıl yaparım? Neden tetikleyiciyi rölantiler arasında geçiş yapmak veya rölantiler arasında geçiş yapmak için kullanayım? yoksa ifle animaton'u nasıl seçerim? Ayrıca diyagramda neden boş boşluğa ve sonra sola hareket edip sola hareket etmeyeceğim ve bir sonraki eylemi bekleyen boş boşluğa gideyim, yoksa bu tam tersi olmalı?
Matas Vaitkevicius

@MatasVaitkevicius Animasyonların sonunda veya başında değişkenleri ayarlayabilir ve kontrol edebilirsiniz. Vakayı kontrol etmekten başka bir şey yapmayan boş bir animasyon yapabilir ve ardından bir sonraki bölüme yönlendirebilir veya bir soyutlama katmanı oluşturabilirsiniz. Daha fazla bilgi için kılavuzlara birkaç bağlantı ekledim.
John Hamilton

Öyleyse geçişleri değiştirecek parametrelerle başka nasıl yapabilirim?
Bağladığınız

@MatasVaitkevicius Gerçekten ilk önce biraz arama yapmalısınız: gamedev.stackexchange.com/questions/103611/…
John Hamilton

Ama ben böyle yaptım. ateşleri harekete geçirir ve animasyonu başlatır, o zaman bu yön için boşta kalır ... Şimdi söylediğiniz şey (sizi doğru anlıyorsam) animasyondan sonra o yön için boşta gitmek yerine yapabileceğim geçiş mekanizmasına gidin benim için uygun boşta seçerdim ... ama hiçbir yerde böyle bir mekanizma görmedim, lütfen cevabınıza kopyalar mısınız ....
Matas Vaitkevicius
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.