Dönen nesnelerin sağ tarafa doğru bir hedefi vurmasını sağlamak nasıl?


25

Bir oyuncunun serbest amaçladığı ve daha sonra bıçak fırlattığı atma bıçağı tipi bir silah üzerinde çalışıyorum. Bıçak havada döner ve çarpışmada dönmeyi durdurur ve ebeveynleri çarpışmış olduğu nesneye kendini döndürür. Eğirme, bıçak yolu fizik tarafından ele alınırken animasyon yoluyla gerçekleştirilir.

Karşılaştığım bir sorun, bıçağın bir düşmanla çarpıştığı zaman bıçağın kendilerine dönük olacağından nasıl emin olacağımızdır. Şu anda bazen olan şey, bıçağın ilk önce bir düşman koluna gömdüğü. Bu açıkça gerçekçi değil. Aynı zamanda, bıçağın yalnızca bıçağı ilk önce çarpıştığı zaman düşmanı "vurması", bıçağın dönme hızı oyuncunun kontrolünün dışında olduğu için makul olmayacağını düşünüyorum.

Benzer silahların birçok yavaş killcam görüntüsünü izliyordum ve silah her atıldığında havaya fırlıyor ve sihirli bir şekilde daima hedefi hedefleyen bıçakla çıkıyor. Fırlatma mesafesinin tutarlı olacağı bir oyun için, bu oldukça basit bir işlemdir. Ancak bunu nasıl tahmin edeceğimi bilemiyorum, çünkü tahmin edilemeyen birçok faktör var. bıçağın yönü, bıçağın dönüşü, düşmanın konumu, düşmandan uzaklık vb. Mümkünse, oyun oldukça düşük uçlu cihazlar için olacağından karmaşık tahmin mantığı kullanmamayı tercih ederim. Bunu çözmenin bir "duman ve ayna" yolu var mı?

Örnek: https://youtu.be/0fav8lFpBko?t=42s


15
Bıçak her zaman bir hedef bıçağa ilk isabet ederken, özellikle de hareketli bir hedef hakkında konuştuğumuzda gerçekçi değildir.
Theraot

1
Oyunun tadına bağlı olarak, bıçağı döndürmeyen bıçak fırlatma stilleri vardır. Genellikle, kararlı bir şekilde uçmak için özel olarak tasarlanmış bıçaklar kullanıyorlar.
Perkins

bıçağın kütle merkezi bıçak ucundan ziyade sap ucuna çok daha yakınsa ve bıçak dönme hızı hareket hızından çok daha büyükse, hedefe her zaman bıçakla vurabilir. Bu çok garip bir bıçak olurdu, ve onu böyle fırlatabilecek çok garip bir yaratık
Sarge Borsch 16.07

2
Bu konu hakkında bir TVTropes makalesi olacak kadar belirgin: Blade Her Zaman
Mason Wheeler

Ayrıca soruda yapılan ayrımdan hoşlanıyorum. Rotasyonu aynı zamanda fizik motoru tarafından da ele alınacak şekilde değiştirdiyseniz, bıçak ucunun hedefe yeterince iyi bakıp bakmadığını görmek için çarpışma zamanında bir hesaplama yapmak için yeterli bilgiye sahip olabilirsiniz. Öyle olsun ya da animasyonu sakla ve sadece bıçak animasyonlarının ileriye dönük olduğu değerleri hazırla ve o aralıkta olup olmadığını görmek için mevcut animasyon çerçevesini karşılaştır.
Pysis

Yanıtlar:


35

Sahte yap

Bağladığın videoya bak, ağır çekimde izle ... ha, o nedir? Kamera sonunda atlar ve bıçak zaten hedefin kaskındadır.

Sadece sahte. Bıçaktan hedefe olan mesafe küçüldükten sonra, hedefe sihirli bir şekilde bıçakla atlayın.

Düzenleme: kıvrımlı tahmini kullanarak bir hedefi vuracağını kontrol edebilir ve ardından önce bıçağı vurmuş gibi yapıp sonra hedefin hareket etmediği ve bıçağın onu öldürdüğü bir animasyon gösterebilirsin.


Katlanmış tahmin

çünkü bıçağın dönme hızı oyuncunun kontrolü dışında.

Bu doğru. Oyuncunun kontrolü dışında. Ancak, kontrolünüz dışında değil ...

Bıçağın hareket etmesi gereken mesafeyi hesaplayabilirseniz, bıçağın önce bıçağa çarpacağı dönüş hızını ayarlayabilirsiniz.

Şimdi, bu tahmini uçuşun ortasında yapmak mantıklı değil, çünkü bir engelle karşılaşırsa bıçak ayarlamak zorunda kalacak. Bu yüzden attığın zaman yaparsın.

Teste girmek için parabolik bir yol izlemeniz gerekmesi, onu basit bir ışın almasından daha karmaşık hale getirir. Bıçak atışına karşılık gelen parabolik hareket denklemini elde etmeyi ve belirli aralıklarla değerlendirmeyi öneriyorum.

Paraboldeki engellerin pozisyonuna, paraboldeki en yakın noktayı bulmak suretiyle engellerin mesafesini bulmak ve sonra bu nokta ile çarpışma kontrolü yapmak da mümkündür.

Bıçağın ne kadar hareket etmesi gerektiğini öğrendikten sonra, bıçağı önce tam olarak vuracak şekilde tam sayıdaki sayılara bölebilirsiniz. Düzenleme: veya nasıl attığına bağlı olarak bir tamsayı 0,5.

Tabii ki, engeller bıçağın oraya ulaştığı andan itibaren harekete geçecekti…


Gerçekçi ol

Bıçağın bıçağına, özellikle hareketli hedeflerde, çarpma sürelerinin ilk% 100'ünü yapmazsınız. Kucakla, fırlatma bıçağı güvenilir bir silah değildir. Öyleyse, ilk önce çarptığında onu zıplatma alternatifine sahip olun. İlk önce yönünü kontrol edip çarpışma noktasına yönünü karşılaştırarak sapın çarpıp çarpmadığını kontrol edebilirsiniz.


1
Ah, atlama kesimini görmedim, ne kadar zekice. Önerdiğiniz gibi onu kare kare izlediğimde çok açık.
FrontEnd

14

Bıçağın nereye ineceğini önceden biliyorsanız - bu olaydan sonra kesinlikle kesin olan kamera görüntülerini öldürürken olduğu gibi - sadece uçuş mesafesine ve istenen dönüş sayısına bağlı olarak doğru dönüş hızını hesaplayın. Fırlatma bıçakları atıcıyı ilk önce terk eder, bu nedenle N + 0,5 tam dönüşleri 1 döndürmesi gerekir , burada N genellikle en az 1'dir ancak atıcının beceri seviyesine veya daha iyi görünmesini istediğinize göre daha fazla olabilir: daha fazla dönüş = daha havalı.

Bunu yapmazsanız, vuruşta rotasyonu sabitleyerek hile yapmak ve belki de kan sıçramakla gizlemek mümkündür. Bir sihirbaz gibi, yeterince çabuk yaparsanız oyuncu farketmez.

Elbette, bunların hiçbiri gerçekçi değil. Gerçek hayatta, bıçağı fırlatmak gerçekten zordur ve bıçağın ilk önce bıçağı indirmesini istiyorsanız çok fazla pratik yapmanız gerekir. Atıcının mesafenin tamamen farkında olması ve atışlarını buna göre değiştirmesi gerekir, aksi halde bıçak ilk önce çarpacaktır.

1 : Bıçağın da ilk bıçak kullandığı bazı stiller var.


4
+1: Kan sıçraması. Güzel, sihirli numaralar. Düzenleme: veya gore olmayan baskı için bir toz bulutu.
Theraot

2
@Geri döndürme ve / veya döndürme hızını, izleyicinin hangi yöne işaret ettiğini gerçekten takip edemeyeceği kadar hızlı yapın.
Perkins

14
  1. Hedefe giden düz çizgi mesafesini hesaplayın.

  2. Her bir kare bıçağın açısını 2PI * (kalanStraightLineDistance) / (originalStraightLineDistance) * DesiredNumRotations olarak ayarlar.

Bıçağı düz bir çizgide hareket ettirmezseniz, ancak hiç kimse farketmez, döndürme oranı biraz değişecektir.

Hedefi önceden belirlemezseniz (yani, neye çarptığını görmek için fiziği atıyor ve kullanıyorsunuz), sonra bunu atmanız gerekecek, ancak hangi hedefi vurmanın muhtemel olduğuna bakma prensibini kullanabilirsiniz. dönüşün bu hedef için doğru olmasını sağlamak.


4

Gerçek fırlatma bıçakları, bıçağı ilk kez vurma şansının çok yüksek olması için tasarlanmıştır. Bıçaklarınızı buna göre tasarlayın.

Vikipedi atma bıçak koleksiyonu : Wikipedia'dan bıçak atma koleksiyonu

Kütlenin merkezini ve böylece dönme merkezini , bıçağın ucundan mümkün olduğunca uzağa istiyorsunuz . Bu, sapın sonuna gelmeden önce bıçağın etrafında dönme ihtimalini artıracaktır.

Bıçak tipik olarak uzun ve incedir, mümkün olduğu kadar küçük bir kütle eklerken kütle merkezinden olabildiğince uzağa çıkar. Ek olarak, tutamacın sonunda, Vikipedi görüntüsündeki bıçakların hiçbirinde göremediğim ilginç bir şekilde disk şeklinde veya küresel bir karşı ağırlık var.

Bıçak, bıçağın ucundan tutarak ve sapı fırlatma yönüne getirerek fırlatılır.


2

Bir "duman ve ayna" yöntemi için, bıçağın dönüş merkezine (yani kütle merkezine), tutamağa yakın (yani sivri olmayan kısım) olabilir. Bu şekilde, eğer dönme hızı bıçağın hızıyla karşılaştırıldığında yeterince yüksekse, bıçağın ucunun diğer parçalarla değil hedefle çarpışması garanti edilebilir.

Kütle merkezi ve boyutlar verilen minimum dönüş hızı olan, ancak elde edilmesi gereken bazı hesaplamalar var. Ayrıca, bu isabet açısı ile ilgili hiçbir şey ifade etmez.


1

Mükemmel bıçak atıcısı?

Şu anda bıçağı animasyon boyunca döndürdüğünüzü söylüyorsunuz. Açıyı kontrol etmek için hangi parametreyi kullanıyorsunuz? Çerçeve numarası? Oyun zamanı? Keyfi bir sıkma oranı ile ölçeklendirilmiş?

Bunun yerine (mesafe taşındı) / (hedefe yapılan toplam mesafe) parametresini, pi ve (dönüş sayısı + 0,5) uygun ölçeklendirmeyle kullandıysanız, bıçak her zaman sihirli bir şekilde ilk önce noktaya gelirdi.


Bu sorunun ilk kısmı açıklama istiyor gibi görünüyor. Muhtemelen soru üzerine yorum yapılmalıdır. Öncelikle sihirli bir varış noktası için önerilen yönteminizi açıklayabilir misiniz? Örneğin, "pi ile uygun ölçeklendirme ile" diyorsunuz; ne ölçeklendirme? Kullanıcının sorması gerekiyorsa, uygun ölçeklendirmenin ne olacağını anlayamayacağını varsaymak adil olur.
Gnemlock

@TimB bunu açıklamak için daha iyi bir iş çıkardı, ancak Neil'in önerdiği çözüm iyi bir yaklaşım. Dönen bıçak animasyonunuzun hızını, hedefe ulaştığında bıçağın "sivri uç diğer adama geçtiği" konumunda olacak şekilde değiştirin. Bu, hareketli hedefleri içeren parabolik yörüngeleri hesaplamaktan çok daha kolaydır (programlamak VE hesaplamak için). Daha fazlası, muhtemelen P_ tarafından uygun ölçeklendirme "için muhtemelen 2 olacaktı. Anahtar kare animasyonu ise, dizinini ölçeklendirirsiniz ve pi'yi unutursunuz.
AC
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.