Bagaimana saya bisa menerapkan fitur "fast-forward" di game saya?


15

Bagaimana saya bisa menerapkan fitur maju cepat untuk game menara pertahanan saya seperti di http://fieldrunners.com/ dan game TD lainnya?

Saya menggunakan Unity 3D. Apakah akan ada sesuatu untuk mengelola lebih sedikit frame per detik atau semacam gerakan cepat musuh yang diatur secara manual dan kecepatan menembak menara, dan sebagainya?


sudahkah Anda mencoba meningkatkan frekuensi pembaruan ?? Anda mungkin perlu melewati bingkai ..
concept3d

Jawaban:


7

jika game Anda tidak memiliki simulasi rumit atau mahal yang mengharuskan pemisahan mereka menjadi garis waktu pembaruan independen, Anda dapat menggunakan pendekatan sederhana mendasarkan kode pada Update()fungsi Anda pada nilai Time.time Unity, dan dalam kode Anda menetapkan nilai Waktu .waktuSkala menjadi apa pun yang Anda inginkan. 0 == dijeda, 1 = normal, penguji kami suka mengatur timeScale> 1 untuk menyelesaikan sesuatu dengan lebih cepat.

http://unity3d.com/support/documentation/ScriptReference/Time-timeScale.html


18

Pendekatan: Tingkat simulasi yang lebih tinggi

Waktu Anda untuk antarmuka pengguna Anda harus dipisahkan dari loop game Anda yang sebenarnya, sebagaimana rendering Anda. Katakan misalnya dunia Anda berjalan dengan kecepatan 4x. Katakanlah pada kecepatan dasar (1x) Anda, game Anda menjalankan 30 pembaruan per detik.

Anda kemudian akan memiliki sesuatu seperti berikut ini, ketika dalam mode maju cepat:

  • World logic menjalankan 4 pembaruan untuk setiap pembaruan UI dan renderer. Ini berarti perlu menjalankan 120 pembaruan per detik. Dengan demikian, model dunia Anda (data) diperbarui pada tingkat ini.
  • Renderer dan logika UI terus melakukan jajak pendapat atau melakukan apa pun dengan 30 pembaruan per detik.

Dengan kata lain, game secara keseluruhan tidak berjalan lebih cepat. Bagian simulasi adalah.

Anda dapat menyimpulkan dua hal dari ini:

  1. Anda perlu menjaga logika permainan Anda cukup sederhana sehingga Anda dapat dengan mudah menjalankannya empat kali lebih cepat pada platform target Anda, ATAU Anda perlu memperkenalkan metode untuk mengekstrapolasi berbagai aspek gameplay lebih cepat - ini dapat menghasilkan, meskipun, dalam model yang berbeda dari yang seharusnya jika Anda hanya menggunakan simulasi yang berjalan lebih cepat. Jadi tradeoff akan memproses biaya untuk akurasi. Lihat pendekatan 2, di bawah ini.

  2. Ini adalah pemisahan dari kekhawatiran yang memungkinkan Anda untuk dengan cepat mempercepat simulasi dunia Anda, pemisahan itu menjadi model, view and controller ( MVC ). Jika data dunia Anda (M), logika render (V), dan logika game (C) semuanya tercampur, Anda benar-benar tidak akan dapat melakukan ini, setidaknya bukan tanpa migrain yang masif.

Pendekatan: Ekstrapolasi berdasarkan delta waktu

Seperti yang disebutkan di atas, Anda harus menghitung gerakan berdasarkan seberapa jauh sesuatu akan terjadi dalam waktu tertentu. Ini mengasumsikan fisika permainan Anda secara inheren lebih realistis dalam simulasi mereka, namun, yang mungkin tidak terjadi. Ini adalah topik yang agak besar dan jauh lebih kompleks. Anda perlu bertanya lebih banyak tentang apakah Anda ingin tahu. Pada dasarnya, Anda akan melakukan beberapa kalkulus untuk memperbaiki keadaan. Anda harus berurusan dengan interpenetrasi dalam tabrakan dan sejumlah masalah lain yang tidak akan saya bahas di sini.

Untuk menyimpulkan

Ini memberi Anda garis besar umum. Pilihan bahasa Anda adalah milik Anda sendiri, mungkin Anda juga tahu bagaimana melakukannya di Unity atau tidak. Pengaturan waktu dalam bahasa apa pun mengharuskan Anda untuk memahami seluk beluk secara terperinci, saya sarankan mulai dengan artikel Gaffer dan memeriksa dokumen Unity API.


Jika Anda akan menggunakan pendekatan laju simulasi yang lebih tinggi , dan Anda ingin mendukung perlambatan , Anda mungkin harus benar-benar memiliki laju simulasi basis yang sangat lambat , kemudian jalankan secara default di seperti 100 langkah / kerangka simulasi.
bobobobo

9

Sebagai prinsip umum, pembaruan logika game harus dipisahkan dari pembaruan grafik game - yaitu, simulasi gameplay Anda, AI, pergerakan unit, dan lain-lain tidak boleh dikaitkan dengan kecepatan di mana game melakukan render . Biasanya loop permainan utama menghitung berapa banyak waktu nyata telah berlalu sejak pembaruan game terakhir, dan mengirimkan langkah waktu delta itu ke rutinitas pembaruan setiap objek logika game individu.

Dalam skenario seperti itu, menjadi mudah untuk menerapkan penskalaan waktu (termasuk penerusan cepat) di game Anda. Cukup premultiply waktu permainan logika langkah oleh beberapa nilai skalar yang mengontrol berapa banyak untuk "fast-foward" atau memperlambat waktu. Secara default, nilai ini akan menjadi satu, dan misalnya setelah pengguna menekan tombol "fast forward" yang Anda tetapkan menjadi 1,5, dan semua simulasi akan berjalan 50% lebih cepat. Anda masih akan membuat pada tingkat yang sama.

Saya tidak terlalu akrab dengan Unity dan karenanya bisa salah dalam saran berikut, tetapi Unity memang memiliki komponen manajemen waktu yang mungkin berguna untuk mengimplementasikan ini. Itu sebenarnya sudah memiliki properti skala waktu. Deskripsi komponen menyiratkan bahwa kelas dirancang untuk objek fisika, tetapi mungkin berlaku untuk skenario Anda juga.


1
Ini jelas berlaku untuk scenerio-nya. Yang perlu dia lakukan adalah mengatur Time.timeScale ke beberapa pengganda dan semuanya akan berjalan lebih cepat. Ini adalah perubahan menyeluruh, jadi jika ada hal-hal seperti interaksi menu dan semacamnya, mereka juga akan lebih cepat.
Tetrad

thnx lagi Tetrad :)
Syed
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.