Unlimited WordPress themes, graphics, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Game Development
  2. Programming

Fisika Swinging untuk Gerakan Pemain (Seperti yang Dilihat di Spider-Man 2 dan Cangkuk Tenaga)

by
Difficulty:IntermediateLength:LongLanguages:

Malay (Melayu) translation by Aisyah Arrafah (you can also view the original English article)

Hi! Saya Jamie Fristrom dari Laboratories Happion. Anda mungkin ingat saya dari permainan seperti Die By The Sword, Spider-Man 2, dan Schizoid ... semuanya, dalam satu bentuk atau yang lain, termasuk tali. Saya baru-baru ini telah mengusahakan permainan bernama Energy Hook - baru-baru ini dilancarkan di Kickstarter - yang semuanya mengenai tali. (Nah, ini semua tentang rasuk bergelombang bertenaga graviton, bagaimanapun juga.)

Spider-Man 2 and Energy Hook rope swinging physics tutorial

Saya akan membincangkan bagaimana saya ingin melaksanakan mekanik permainan berayun tali. Apabila saya mula bekerja pada Tenaga Hook, kebanyakan saya melakukan segala-galanya dengan kod tersuai saya sendiri. Saya percaya ia mungkin untuk hanya masuk ke Perpaduan dan menggunakan Gabungan Boleh Dikonfigurasikan untuk melakukan beberapa perkara yang sangat serupa, tetapi pada masa itu tidak tersedia. Saya cukup yakin ini adalah panggilan yang betul, bagaimanapun, kerana ia memberikan saya kawalan ke atas segala-galanya - dan saya boleh membaginya dengan anda.

Spider-Man 2 and Energy Hook rope swinging physics tutorial

Asas-asalan melakukan mengayunkan cara saya lakukan - menggunakan kekangan - sebenarnya agak mudah. (Semoga anda tidak kecewa apabila melihat apa yang ada di bawah tudung.) Ia berfungsi sama ada anda membuat permainan 2D atau permainan 3D, hanya vektor yang berbeza, jadi saya akan bermula dengan 2D dan kemudian membincangkan beberapa kedutan apabila pergi ke tiga dimensi.

Artikel ini juga mengandaikan anda menggunakan enjin permainan seperti Perpaduan yang boleh melakukan banyak kerja untuk anda, seperti penyamaran terhadap geometri dan orientasi watak, dengan panggilan fungsi mudah. Jika anda menggunakan enjin anda sendiri, anda mungkin perlu melakukan matematik itu sendiri.

Spider-Man 2 and Energy Hook rope swinging physics tutorial

Simulasi Fizikal berbanding Pergerakan Kalengan

Terdapat dua cara simulasi permainan sering berfungsi. Kebanyakan permainan orang ketiga mempunyai segala-galanya; animasi dalam tin dan pergerakan kalengan supaya semuanya kelihatan sempurna, kaki watak tidak tergelincir, terus dari program animasi animator kepada kami. Alternatif adalah simulasi yang lebih fizikal - anda mensimulasikan fizik: pecutan, halaju, graviti - banyak permainan orang pertama melakukan ini, tetapi permainan orang ketiga cenderung untuk mengelakkannya, kerana lebih mudah untuk memiliki kaki karakter slaid dan barangan fizikal tidak sepadan dengan animasi.

Sekiranya anda ingin melakukan tali tali tanpa kalengan (berbanding dengan tali tali kalengan, seperti yang dilihat dalam Pitfall pertama, atau permainan Spider-Man awal seperti Neversoft di PSX), ayunan tali yang sebenarnya adalah fizikal simulasi dan oleh karenanya mungkin mempunyai kebebasan dan nuansa dan perasaan mendalam yang graviti dan momentum sebenar dapat memberikan anda, maka anda akan ingin melakukannya dengan cara yang kedua - segalanya menjadi simulasi fizikal, dan elakkan melakukan hal-hal kalengan yang membunuh momentum watak itu. Kemudian, semuanya akan mengalir.

Itulah cara saya melakukan perkara dengan Tenaga Cangkuk.

Spider-Man 2 and Energy Hook rope swinging physics tutorial

Terdapat satu tan artikel di sana tentang bagaimana untuk mensimulasikan fizik - inilah satu dengan demo Flash sejuk yang dibina. Anda boleh melakukan integrasi Euler atau integrasi Verlet, ia tidak begitu penting. (Saya tidak akan mengajar anda mengenai Euler vs Verlet di sini, tetapi saya hanya mengatakan bahawa konsep tidak begitu menakutkan apabila mereka berbunyi.)

Mari kita anggap kita melakukan integrasi Euler mudah tulang. Masa tayang permainan watak kami mungkin kelihatan seperti ini, di mana pecutan ditentukan oleh graviti dan bagaimana anda menolak pada tongkat:

(Nota sebelah: ini sebenarnya perkiraan kasar - anda boleh mendapatkan penghampiran yang lebih bergantung kepada framerate dengan avatar.position = avatar.position +(avatar.oldvelocity avatar.velocity) * deltaT / 2.0f, dan anda boleh mendapatkan dekat simulasi sempurna dengan sesuatu seperti ini - tetapi pemain anda mungkin tidak akan perasan.)


Hentikannya

Permainan anda mungkin mempunyai beberapa sistem untuk bertembung dengan geometri dunia. Ia mungkin kelihatan seperti ini:

Apa yang berlaku dengan halaju avatar anda apabila mereka memukul halangan? Ia tidak masuk akal untuk avatar anda untuk mengekalkan halaju yang sama melalui dinding. Sesetengah permainan mungkin melantun anda, menggunakan keadaan biasa di mana anda bercakap untuk mencerminkan halaju anda; permainan lain mungkin membiarkan anda meluncur di sepanjang dinding; yang lain akan berada di antara. Mari lihat kod untuk meluncur di sepanjang dinding:

(Jika anda melakukan integrasi Verlet, di mana setiap bingkai anda sudah menentukan halaju hanya dengan melihat data kedudukan sebelumnya, langkah ini sudah dilakukan untuk anda.)

Juga, videogames adalah perkara-perkara peretasan mereka, anda mungkin sering mendapati bahawa kedudukan watak anda tiba-tiba dari satu bingkai ke seterusnya dalam kes sudut tertentu. Apabila ini berlaku, halaju mereka akan melalui bumbung. Penyelesaian saya untuk itu hanyalah satu hack: periksa jika halaju mereka terlalu melampau dan ubah jika ia berlaku.

Apakah yang dilakukan oleh kod itu apabila anda memukul dinding di sudut? Bingkai pertama, ia mengubah halaju anda dengan dramatik semasa anda memukul dinding, tetapi ia masih menolak anda melalui dinding. Bingkai seterusnya, avatar anda akan dikemas kini ke dinding sekali lagi, dan kemudian menolak kembali lagi, tetapi sekarang halaju adalah kedudukan baru avatar, meluncur di sepanjang dinding, mengurangkan kedudukan lamanya, melawan dinding, jadi selari dengan dinding .

Ini adalah oversimplification besar apa yang berlaku di dunia sebenar ketika satu objek bertabrakan dengan yang lain, tetapi kebanyakan pemain anda tidak akan melihat atau peduli.

Walau bagaimanapun, pada masa ini, kami berjaya mengekang posisi dan halaju avatar kami dengan dinding dan lantai permainan kami. Jadi sekarang kita sudah bersedia.

Bergantung Dengan Tethers Daripada Tembok

Jadi sekarang bayangkan avatar anda sudah dilampirkan oleh tali maya ke titik maya. Setakat yang kita bimbangkan, kita hanya dapat menganggap bahawa dinding pekeliling atau sfera yang tidak kelihatan. Kami boleh menguji perlanggaran dengan melihat jika anda telah mendapat terlalu jauh dari pusat bulatan, dan tarik balik avatar.

Sekarang, pelarasan halaju yang sama yang membuat kita meluncur di sepanjang dinding juga akan membuat kita meluncur di bahagian dalam lingkaran maya atau sfera ini.

Spider-Man 2 and Energy Hook rope swinging physics tutorial
Swinging Physics: Jatuh dengan Tether - Frame 1
Spider-Man 2 and Energy Hook rope swinging physics tutorial
Swinging Physics: Jatuh dengan Tether - Frame 2
Spider-Man 2 and Energy Hook rope swinging physics tutorial
Fisika Swinging: Jatuh dengan Tether - Frame 3

Beberapa Keperibadian dan Nuansa

Pada ketika ini, anda mempunyai permainan berayun. Tetapi mungkin ada beberapa perkara mengenainya yang dapat menghiburkan para pemain anda, dan di sinilah peretasan kecil dapat membuat sesuatu lebih baik.

Kurang, Springiness

Bergantung kepada permainan anda, dan sama ada ia sepatutnya mensimulasikan panjang tali atau web anjal atau rasuk bergelora, anda mungkin mempunyai pendekatan yang berbeza untuk kelonggaran dan keberanian. Anda boleh mensimulasikan banyak perkara dengan tweaking tetherLength. Jika anda ingin mengambil kendur keluar dari web anda atau bergema rasuk, anda boleh memendekkan tetherLength sebagai pemain semakin dekat dengan titik tether:

Tetapi jika ia adalah tali bukan elastik, anda akan meninggalkan tetherLength tidak disentuh.

Untuk kebiasan, anda boleh mempunyai Panjang yang dikehendaki yang tetap dan Kekuatan semasa yang sentiasa cuba untuk mendekati kehendakPanjang - ini juga berguna untuk langkah seterusnya kami:

Tetapi Saya Tidak Mahu Memukul Tanah!

Bagaimana jika avatar anda bermula di tempat yang rendah dan cuba bersayap? Ia agak jelas mereka tidak akan jauh. Betulkan cepatnya ialah untuk mengetahui sejauh mana titik di atas tanah yang mereka mahu ayunan, dan memendekkan panjang tether mereka supaya mereka akan membersihkan tanah.

Anda tidak boleh hanya memendekkannya dalam satu frame walaupun, kerana kemudian mereka akan tiba-tiba snap ke udara - jadi di sini, mempunyai Kekuatan yang dikehendaki yang cukup pendek untuk tidak menyentuh tanah dan CurrentLength yang cepat mendekati yang diikehendakiLength akan membuat anda pelepasan anda mahu.

The Avatar Up

Jika avatar anda adalah tokoh humanis, ia tidak masuk akal bagi mereka untuk muncul dengan menegak secara menegak ketika mereka berayun. Berorientasikan mereka supaya mereka kelihatan seperti mereka tergantung dari tali - jadi mereka terbalik jika mereka melakukan gelung, contohnya - mungkin kelihatan seperti ini dalam Perpaduan:

Ini akan membiarkan avatar berayun ke belakang. Anda juga boleh menggunakan halaju avatar untuk ke hadapan mereka (itulah yang saya lakukan) - atau biarkan mereka berpusing ...

Wrapping Around Things

Di dunia nyata, tali membalut di sekeliling. Cara yang cepat untuk mensimulasikan bahawa dalam kod anda adalah raycast sepanjang tali maya setiap bingkai, dan jika ia mencecah sesuatu, buat titik lampiran baru di mana ia bersilang. Ini tidak akan kelihatan betul jika avatar itu kemudian berubah pada tali tidak stabil, tetapi baik untuk web melekat, lidah atau bergulat rasuk.

Tweaking cara tali tali anda boleh memberi impak yang besar untuk keseronokan. Tiba-tiba membungkus di sekeliling sebuah outcropping boleh membawa pemain terkejut dan membuat mereka kecewa. Kami mempunyai penyelesaian tiga langkah dalam Spider-Man 2: jika anda terlalu dekat dengan penyebaran, web akan pecah; jika anda berada dalam jarak tengah, web akan dibungkus; dan jika anda jauh, web hanya akan melalui.


Pertimbangan untuk 3D

Perkara paling sukar untuk membawa mekanik 2D ini ke 3D adalah menimbangkan antara muka untuk pemain - bagaimana mereka memilih mata di dunia untuk berayun. Permainan yang berbeza menggunakan kaedah yang berbeza untuk memilih titik sedemikian. Ratchet & Clank mempunyai titik tetap di dunia yang anda boleh bergulat; dengan mod Pertengkaran gempa Quake dan Komando Bionik: Semakin anda menunjuk kamera pada apa yang anda ingin pasangkan; Spider-Man 2 dan Tenaga Cangkuk memancarkan sinaran berbanding dengan watak, dan di mana sinar bersilang geometri fizikal yang menjadi titik di mana anda melampirkan.

Spider-Man 2 and Energy Hook rope swinging physics tutorial

Hampir semua kaedah ini melibatkan raycasting terhadap geometri fizikal dunia, sama ada di sepanjang garis kamera atau dari watak ke titik klik tetikus - persimpangan raycast menentukan titik tether baru anda.

Sebagai contoh, inilah sinar tetikus tetikus yang mungkin baik untuk permainan orang pertama:


Bumping Into Stuff

Bumping ke dinding dan sebagainya juga cenderung untuk berlaku lebih kerap dalam permainan 3D daripada permainan 2D, terutamanya apabila dinding yang anda tetapkan sendiri. Terdapat pelbagai perkara yang boleh anda lakukan untuk menjadikannya kurang menjengkelkan.

  • Biar pemain memandu di udara: fizik tidak banyak bercakap mengenai perkara ini tetapi ia terasa betul. Itulah salah satu perkara yang kami lakukan di Spider-Man 2, dan mengapa anda mendapat jetpack di Energy Hook.
  • Mainkan animasi yang sejuk: mempunyai avatar beberapa jenis flip atau putaran ketika mereka memukul dinding, dan kemudian merasa kurang seperti kesilapan dan lebih seperti 'Maksud saya untuk melakukan itu!'
  • Jauhkan mereka dari dinding: Ultimate Spider-Man melakukan ini - jika anda terlalu dekat dengan dinding, ia perlahan-lahan akan menolak anda dari sini. Ia kelihatan agak pelik jika anda melepaskan tongkat itu dan hanya membiarkan avatar anda digantung di sana - mereka akan terapung dari dinding pada sudut pelik - tetapi untuk keseluruhan permainan itu adalah peningkatan. (Anda mungkin boleh mempunyai yang terbaik dari kedua-dua dunia dengan hanya menolak jika watak itu akan kelajuan tertentu?)
  • Ganjaran mereka kerana tidak memukul dinding di tempat pertama: Ini adalah strategi Tenaga Tenaga - mengajar pemain untuk mengelakkan memukul dinding, dengan memberi mereka hadiah untuk perubahan bersih. Di satu pihak, ia menggalakkan mereka untuk berayun cantik; Sebaliknya, apabila mereka memukul dinding, itu lebih mengecewakan, kerana mereka kehilangan titik gaya mereka.
Spider-Man 2 and Energy Hook rope swinging physics tutorial

Jadi Apa yang Anda Tunggu?

Pergi keluar dan buat permainan berayun sendiri, dan beritahu saya apa yang anda buat! Saya tidak boleh mendapatkan cukup permainan berayun.

Saya harap anda dapati artikel ini berguna. Sekiranya anda ada, sila menyokong Energy Hook Kickstarter atau mengundi pada Greenlight Steam. Terima kasih!

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.