Bagaimana cara memastikan objek berputar mengenai target dengan ujung kanan?

25

Saya sedang mengerjakan senjata jenis pisau lempar di mana pemain membidik gratis lalu melempar pisau. Pisau berputar di udara dan pada tabrakan berhenti berputar dan orang tua itu sendiri ke objek yang bertabrakan dengannya. Pemintalan ditangani melalui animasi sedangkan jalur pisau ditangani oleh fisika.

Satu masalah yang saya hadapi adalah bagaimana memastikan bahwa ketika pisau bertabrakan dengan musuh maka pisau itu akan menghadap ke arah mereka. Pada saat yang terjadi kadang-kadang adalah pisau yang ditanamkan ke pegangan musuh terlebih dahulu. Yang jelas tidak realistis. Pada saat yang sama, saya pikir itu akan sangat tidak masuk akal bagi pisau untuk hanya "memukul" musuh jika pisau itu bertabrakan terlebih dahulu, karena tingkat di mana pisau berputar berada di luar kendali pemain.

Saya telah menonton banyak rekaman killcam lambat dari senjata yang sama dan setiap kali senjata dilemparkan itu berputar di udara dan secara ajaib selalu berakhir dengan pisau menunjuk ke sasarannya. Untuk permainan yang jarak lemparannya konsisten, ini cukup mudah untuk dilakukan. Tetapi saya tidak begitu yakin bagaimana cara memprediksi ini karena ada banyak faktor yang tidak terduga misalnya yang terlibat. arah pisau, rotasi pisau, posisi musuh, jarak dari musuh dll. Jika memungkinkan, saya lebih suka tidak harus menggunakan logika prediksi yang rumit karena permainan akan untuk perangkat yang cukup rendah. Apakah ada cara "asap dan cermin" untuk menyelesaikan ini?

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

Paling depan
sumber
15
Pisau yang selalu mengenai pisau target terlebih dahulu juga tidak realistis, khususnya ketika kita berbicara tentang target yang bergerak.
Theraot
1
Tergantung pada rasa permainan, ada sejumlah gaya lempar pisau yang tidak memutar pedangnya. Biasanya mereka menggunakan pisau yang dirancang khusus untuk terbang dengan stabil.
Perkins
Jika pusat massa pisau secara signifikan lebih dekat ke ujung pegangan daripada ujung pisau, dan kecepatan putaran pisau jauh lebih besar daripada kecepatan perjalanannya, maka itu mungkin benar-benar mengenai target dengan pisau selalu. itu akan menjadi pisau yang sangat aneh, dan makhluk yang sangat aneh yang mungkin melemparkannya seperti itu
Sarge Borsch
2
Masalah ini cukup menonjol sehingga ada artikel TVTropes tentang hal itu: Blade Selalu Mendarat Ujung Runcing
Mason Wheeler
Saya juga suka perbedaan yang dibuat dalam pertanyaan. Jika Anda mengalihkan rotasi ke juga ditangani oleh mesin fisika, Anda mungkin memiliki informasi yang cukup kemudian untuk membuat perhitungan pada waktu tabrakan untuk melihat apakah ujung pisau menghadap target dengan cukup baik atau tidak. Entah itu, atau tetap animasi, dan hanya pra-panggang nilai-nilai di mana animasi dari pisau menunjuk ke depan dan membandingkan bingkai animasi saat ini untuk melihat apakah itu berada dalam kisaran itu atau tidak.
Pysis

Jawaban:

35

Berpura-pura

Lihat video yang Anda tautkan, saksikan dalam gerakan lambat ... eh, apa itu? Kamera melompat di ujung, dan pisau sudah ada di helm target.

Palsukan saja. Setelah jarak dari pisau ke target kecil, lompat memotong ke pisau secara ajaib di target.

Sunting: Anda dapat memeriksa apakah itu akan mengenai target menggunakan prediksi berbelit-belit, dan kemudian berpura-pura itu mengenai pisau pertama, kemudian menunjukkan animasi di mana target tidak bergerak dan pisau membunuhnya.


Prediksi berbelit-belit

karena tingkat di mana pisau berputar di luar kendali pemain.

Itu benar. Itu di luar kendali pemain. Namun, tidak di luar kendali Anda ...

Jika Anda dapat menghitung jarak yang harus ditempuh pisau, Anda dapat membuat kecepatan putar sehingga pisau akan mengenai pisau terlebih dahulu.

Sekarang, tidak masuk akal untuk membuat prediksi ini di pertengahan penerbangan, karena pisau harus menyesuaikan jika ada penghalang di jalan. Karena itu, Anda akan melakukannya ketika Anda melempar.

Fakta bahwa Anda harus mengikuti jalur parabola untuk mencapai tes membuatnya lebih rumit daripada pemain sinar sederhana. Saya akan menyarankan untuk mendapatkan persamaan untuk gerakan parabola yang sesuai dengan lemparan pisau, dan mengevaluasinya pada interval tertentu.

Dimungkinkan juga untuk menemukan jarak rintangan ke parabola, dengan menemukan titik terdekat di parabola dengan posisi rintangan, dan kemudian melakukan tabrakan dengan titik itu.

Setelah Anda tahu berapa banyak pisau yang harus dibawa, Anda dapat membaginya menjadi jumlah putaran bilangan bulat, sehingga pisau itu akan mengenai pisau terlebih dahulu. Sunting: atau bilangan bulat 0,5 tergantung pada cara Anda melempar.

Tentu saja, rintangan akan bergerak pada saat pisau itu sampai di sana ...


Jadilah realistik

Anda tidak akan membuat pisau pemukul pisau 100% pertama kali, khususnya dengan target yang bergerak. Hanya merangkul itu, pisau lempar bukanlah senjata yang dapat diandalkan. Jadi, miliki alternatif untuk memantulkannya saat itu mengenai pegangan pertama. Anda dapat memeriksa apakah itu mengenai pegangan terlebih dahulu dengan memeriksa orientasinya dan membandingkannya dengan arah ke titik tumbukan.

Theraot
sumber
1
Ah saya tidak melihat lompatan memotong, betapa pintar namun begitu sederhana. Sangat jelas ketika saya menontonnya satu per satu seperti yang Anda sarankan.
FrontEnd
14

Jika Anda tahu sebelumnya di mana pisau akan mendarat - seperti pada mereka yang membunuh rekaman cam, yang paling pasti diproduksi setelah-fakta-hanya menghitung kecepatan rotasi yang tepat berdasarkan jarak penerbangan dan jumlah rotasi yang diinginkan. Pisau lempar meninggalkan gagang lempar terlebih dahulu, sehingga perlu memutar N + 0,5 putaran penuh 1 , di mana N biasanya setidaknya 1 tetapi bisa lebih didasarkan pada tingkat keterampilan pelontar atau seberapa keren Anda ingin terlihat: lebih banyak berputar = lebih dingin.

Jika tidak, tidak apa-apa untuk menipu dengan memperbaiki rotasi pada hit, dan mungkin menyembunyikannya dengan percikan darah. Seperti seorang penyihir, jika Anda melakukannya dengan cukup cepat, pemain tidak akan menyadarinya.

Tentu saja, semua ini tidak realistis. Dalam kehidupan nyata, melempar pisau sangat sulit dan membutuhkan banyak latihan jika Anda ingin pisau mendarat terlebih dahulu. Pelempar harus sepenuhnya menyadari jarak dan mengubah lemparan mereka sesuai, jika tidak pisau akan mengenai gagang pertama.

1 : Ada beberapa gaya di mana pisau menjadi pisau juga.

congusbongus
sumber
4
+1: percikan darah. Bagus, trik sulap. Sunting: atau awan debu untuk edisi non-gore.
Theraot
2
@Theraot dan / atau membuat laju putaran cukup cepat sehingga pemirsa tidak dapat benar-benar melacak ke arah mana ia diarahkan.
Perkins
14
  1. Hitung jarak garis lurus ke target.

  2. Setiap Frame mengatur sudut pisau menjadi 2PI * (tersisaStraightLineDistance) / (originalStraightLineDistance) * DiinginkanNumRotations.

Rasio putaran akan sedikit bervariasi jika Anda tidak menggerakkan pisau dalam garis lurus tetapi tidak ada yang akan memerhatikan.

Jika Anda tidak menentukan terlebih dahulu target (yaitu Anda hanya melempar dan menggunakan fisika untuk melihat apa yang hitsnya) maka Anda perlu mengelabui ini tetapi Anda dapat menggunakan prinsip yang sama untuk melihat target apa yang mungkin mengenai sasaran dan menyesuaikan putaran menjadi benar untuk target itu.

Tim B
sumber
4

Pisau lempar sungguhan dirancang untuk memiliki peluang sangat tinggi untuk memukul pisau terlebih dahulu. Desain pisau Anda sesuai.

Koleksi pisau lempar dari Wikipedia : Koleksi pisau lempar dari wikipedia

Anda ingin pusat massa, dan karenanya pusat rotasi, sejauh mungkin dari ujung pisau . Ini akan meningkatkan peluang bahwa blade akan berputar ke posisi memukul sebelum ujung gagangnya sampai di sana.

Pisau biasanya panjang dan tipis, untuk menonjol sejauh mungkin dari pusat massa sambil menambahkan massa sesedikit mungkin. Selain itu, sering ada penyeimbang berbentuk cakram atau bola di ujung pegangan, yang menarik saya tidak melihat di salah satu pisau dari gambar Wikipedia.

Pisau dilemparkan dengan memegang ujung pisau dan melengkungkan pegangan ke arah lemparan.

dotancohen
sumber
2

Untuk cara "asap dan cermin", Anda dapat memiliki pusat rotasi pisau (yaitu pusat massa) di dekat gagang (yaitu bagian yang tidak runcing). Dengan cara ini, jika kecepatan rotasi cukup tinggi dibandingkan dengan kecepatan pisau, dapat dipastikan bahwa ujung pisau akan bertabrakan dengan target dan bukan bagian lain.

Ada beberapa perhitungan untuk mendapatkan yang merupakan kecepatan rotasi minimum mengingat pusat massa dan dimensi, tetapi harus langsung. Perhatikan juga ini tidak menyiratkan apa pun tentang sudut klik.

Guido
sumber
1

Pelempar pisau yang sempurna?

Saat ini, Anda mengatakan Anda memutar pisau melalui animasi. Parameter apa yang Anda gunakan untuk mengontrol sudut? Nomor bingkai? Waktu bermain? Ditentukan oleh tingkat putaran yang berubah-ubah?

Jika Anda menggunakan parameter (jarak bergerak) / (jarak total ke target), dengan penskalaan yang sesuai dengan pi dan (jumlah putaran + 0,5), maka pisau memang selalu akan secara ajaib tiba di titik pertama.

Neil_UK
sumber
Bagian pertama dari pertanyaan ini muncul untuk meminta klarifikasi. Mungkin harus dibuat sebagai komentar pada pertanyaan. Bisakah Anda menguraikan metode yang Anda usulkan untuk titik kedatangan ajaib pertama? Misalnya, Anda mengatakan "dengan penskalaan yang sesuai dengan pi"; skala apa? Adalah adil untuk mengasumsikan bahwa jika pengguna harus bertanya, mereka mungkin tidak mengerti apa yang akan menjadi skala yang sesuai.
Gnemlock
@TimB melakukan pekerjaan yang lebih baik untuk menjelaskannya, tetapi solusi yang diusulkan Neil adalah pendekatan yang baik. Ubah kecepatan animasi pisau pemintalan Anda sehingga ketika mencapai target, pisau berada di posisi "ujung runcing masuk ke orang lain". Ini jauh lebih mudah (untuk diprogram, DAN secara komputasi) daripada menghitung lintasan parabola yang melibatkan target bergerak, dll. Adapun "penskalaan yang sesuai dengan PI" yang kemungkinan hanya 2, mengingat bahwa number_of_revolutions adalah variabel lain dalam pseudoequation Neil. Jika itu adalah keyframe animasi, maka Anda hanya skala indeks Anda dan lupakan pi.
AC