Bu yüzden üzerinde çalıştığım oyunda bir sorunla karşılaştım, ancak muhtemelen birçok oyunda ortaya çıkan oldukça temel bir şey gibi görünüyor.
Oyunum, bir karakter animasyonu sırasında bazı oyun işlevlerinin çok belirli bir zamanda gerçekleşmesini gerektiriyor. Ve böylece, başlığın dediği gibi, oyunla ilgili olayları / işlevleri / eylemleri bir karakterin animasyonundaki belirli noktalara senkronize etmek için bazı iyi tekniklerin ve temel stratejilerin neler olduğunu merak ediyorum.
Çeşitli oyun türlerinde bahsettiğim şeylerden bazı basit örnekler:
Karakteriniz atıcıya silahlarını yeniden yükler . Karakteriniz 'yeniden yükleme' animasyonunu oynatır, ancak currentAmmo değişkenini ayarlayan işlevin yalnızca dergi takas edildikten ve tabanca tıkandıktan hemen sonra çağrılması önemlidir . Bu, yeniden yükleme animasyonunun ortasında bir nokta olabilir.
Bir de sıra tabanlı RPG sizin karakter düşman bir çizgi bakan bir kuyruğa gir. Saldırı komutu verildiğinde, karakterlerinizden biri düşmanlardan birine koşar / atlar ve ayakta durmalarına / atlamalarına başlamadan önce dev kılıçlarını keser. Düşmanın, eğik çizgi animasyonunun oynandığı anda hasar gördüğünden emin olmak istiyorsunuz - koşma ve koşma arasında bir nokta.
Bir de gizli oyun , karakterin gizlice olabilir ve dünyada bilgisayar ve düğmelerle etkileşim. Belki de sızmakta olduğunuz karakolun ışıklarına giden güç kaynağını kapatan bir düğme vardır. Eylem düğmesine basıldığında, karakteriniz uzanır ve düğmeye basar ve ardından bekleme konumuna geri döner. Düğmeye basıldığında ışıkların 'push_button' animasyonunda tam olarak kapanmasını istiyorsunuz.
Kuşkusuz, benim özel durumum en çok ikinci örneğe benziyor, burada sıra tabanlı karakterin bir saldırı sırasında öne doğru eğildiği ve animasyonun temas ettiği kesin anda hasarın uygulanmasını istiyorum. . Çünkü benim sıra tabanlı bir sistem kullanarak oyunum (Final Fantasy veya Fire Emblem gibi bir şey hayal edin) hasar / şifa / büyü / vb istiyorum. Çarpışma / isabet kutuları kullanmama rağmen her karakter animasyonu sırasında doğru zamanda uygulanacak.
Ben popüler bir oyun motoru oyunumu yapıyorum ve şu an onların animasyon kullanarak bu hallediyorum bahsetmeliyiz olayları veya bildirebilmesi istenilen sonuçlara şey yakın ulaşmak için - karakterim gerçekleştirdiği belli komuta ve tetikleyiciler a komuta özel animasyon (yani: 'saldırı_komutu') ve komutlarımın her biri için animasyon öğeleri karakterleri ExecuteCommand işlevine bir animasyon olayı / 'geri arama' bildirmelidir. Başka bir deyişle - karakter, saldırı animasyonuna oynatılmasını söyler ve ardından saldırı animasyonu, animasyon sırasında hasarın dağıtılması gereken anda tam bir olay / karaktere geri arama bildirir.
Dürüst olmak gerekirse, bu şimdilik işe yarıyor, ama yanlış geliyor - buradaki büyük resmin bir kısmını kaçırmışım gibi! Bu yöntemin yanlış hissetmesinin bir nedeni, oyun mantığını animasyon varlıklarıyla birleştirmesidir; animation öğem bir ExecuteCommand () olayı / geri çağrısı eklemeyi unutursa, komut düzgün bir şekilde yürütülmez ve bir komut animasyonu komutu yürütmeden bitip bitmediğini kontrol etmek için ekstra kod gerekir. Dağınık ve oyunumun varlıklarına garip bir bağımlılığı olduğu anlamına geliyor. Tabii ki, saldırı animasyonu sırasında hasarın belirli bir noktada meydana gelmesini istiyorum, ancak animasyon varlıklarının içinde oyun kodunu çağırmaktan gerçekten garip hissediyorum.
Peki buraya ne bakıyorum? Animasyonlar sırasında belirli zamanlarda belirli oyun oynama eylemlerinin gerçekleşmesini istediğiniz bu tür durumları ele almak için bazı iyi genel teknikler nelerdir?
Düzenleme: Açıklığa kavuşturmak için, bu motora özgü bir soru değil, ben de motora özgü tasarımlar / teknikler arıyorum. Kullanılan teknolojilere bakılmaksızın oyun projelerinizde kullanabileceğiniz genel animasyon / oyun senkronizasyon teknikleri ile ilgileniyorum.