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?
unity
tower-defense
timing
Syed
sumber
sumber
Jawaban:
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
sumber
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:
Dengan kata lain, game secara keseluruhan tidak berjalan lebih cepat. Bagian simulasi adalah.
Anda dapat menyimpulkan dua hal dari ini:
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.
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.
sumber
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.
sumber