Saya seorang programmer hobbyist dan sekarang saya ingin tahu tentang data apa yang dipertukarkan dalam sesi multipemain dalam game waktu nyata seperti starcraft 2. Saya melakukan banyak pencarian. Saya menemukan gafferongames.com menawarkan tinjauan yang sangat baik dari masalah yang perlu dipertimbangkan.
Glenn dalam artikel dan komentarnya memberikan alasan yang sangat kuat untuk menggunakan UDP melalui TCP, tetapi SC2 jelas menggunakan TCP. Untuk Qlee Gleen,
Masalah dengan menggunakan TCP untuk game adalah bahwa tidak seperti browser web, atau email atau sebagian besar aplikasi lainnya, game multi-pemain memiliki persyaratan waktu nyata pada pengiriman paket. Untuk banyak bagian gim Anda, misalnya input pemain dan posisi karakter, tidak masalah apa yang terjadi sedetik yang lalu, Anda hanya peduli dengan data terbaru.
Jadi dari pernyataannya, saya menduga bahwa pendekatannya adalah mengirim keadaan permainan penuh setiap unit pada setiap frame. Jika server tidak menerima input pemain pada frame saat ini, maka itu hanya keberuntungan pada pemain itu. Untuk God of War: Acension, di mana dia memimpin jaringan dev, ini seharusnya bekerja dengan baik.
Untuk SC2, karena kemampuan replaynya, firasat saya memberi tahu saya bahwa mesin yang mendasarinya adalah timestep tetap "mesin input pengguna pemutaran" yang ditentukan, di mana satu-satunya data yang dipertukarkan adalah input pemain . Oleh karena itu pernyataan Glenn mybe sama sekali tidak relevan untuk SC2. Input pemain adalah penting, dan urutan input bahkan lebih penting. Saya tidak berpikir itu layak untuk SC2 mengirim keadaan permainan 200 unit dan lebih banyak pada 30 - 60 FPS.
Pertanyaan: Saya bisa saja salah, tetapi saya telah berusaha mengidentifikasi 2 jenis data yang mungkin. Apa teknik lainnya? Akan baik untuk Qoute game jika Anda mau.
EDIT: menemukan tautan ini tentang model jaringan Starcraft
sumber
Jawaban:
Glenn sebagian besar berbicara tentang permainan berbasis fisika, yaitu. penembak orang pertama dan game mengemudi. Ini memiliki persyaratan yang berbeda untuk permainan strategi waktu nyata di mana posisi unit yang tepat pada setiap langkah logika adalah penting. Jadi strategi komunikasi tentu berbeda.
"Waktu nyata" berarti berbagai hal dalam konteks yang berbeda. Game tidak real time 'sulit' karena jika pesan terlambat, semuanya rusak. (Setidaknya, tidak ada alasan bagus untuk permainan yang begitu menuntut, karena sistem hanya perangkat lunak harus dapat pulih dari keterlambatan pemrosesan, tidak seperti pembangkit tenaga nuklir atau peralatan medis misalnya.) Game benar-benar waktu nyata 'lunak' atau 'tegas'. ( Definisi di Wikipedia seperti biasa .) Jenis permainan membuat perbedaan seberapa cepat Anda memerlukan informasi, apakah Anda dapat kehilangan informasi dan lolos begitu saja, dll. Cukup untuk mengatakan bahwa TCP cukup baik untuk banyak permainan, tetapi untuk gim lain, lebih disukai UDP.
Dia akan mengirim informasi yang cukup untuk merekonstruksi keadaan game yang relevan dari setiap unit yang telah berubah.
Sebagian besar game tidak memenuhi kriteria 3, jadi mereka menggunakan 1 dan 2 sebagai gantinya. Namun banyak game RTS dapat, dan memang, memanfaatkan 3.
Juga, tidak harus harus "setiap frame". Konsep bingkai juga samar-samar. Apakah ini bingkai rendering? Apakah ini kumpulan logika? Apakah ini bingkai data jaringan yang dikirim? Apakah ketiganya selalu menyelaraskan satu-ke-satu atau apakah Anda mendapatkan tingkat grafik variabel dengan tingkat logika tetap? Beberapa gim, terutama gim strategi waktu nyata seperti Starcraft 2, atau gim dengan kemampuan memutar ulang (saat Anda menyentuhnya) ingin menjaga segala sesuatunya dalam keadaan sempurna dengan memiliki pembaruan jaringan biasa (yang mungkin atau mungkin tidak cocok dengan 'bingkai' dalam pengertian lain) tetapi ini bukan persyaratan untuk semua game. Banyak game hanya mengirimkan pembaruan secara semi-reguler, tergantung pada seberapa jauh mereka bersedia membiarkan klien berjalan.
Banyak game tidak akan memperlakukan frame rendering sebagai bingkai logis. Mereka mungkin memiliki 60FPS dalam grafik tetapi hanya memiliki 10 pembaruan logika per detik, dan mengirim 1 pembaruan jaringan untuk masing-masing. Tetapi bahkan 30 pembaruan jaringan per detik adalah wajar jika Anda menggunakan metode 'kirim masukan', tentu saja.
Tidak terlalu banyak ada teknik yang berbeda, tetapi beberapa kendala berbeda pada sistem, dan pentingnya setiap kendala akan bervariasi dari satu game ke game lainnya. Jadi, Anda hanya perlu memilih sistem yang cocok untuk Anda.
sumber
Teknik utama yang perlu Anda waspadai adalah teknik "1500 pemanah". Itu terkenal digunakan oleh Age of Empires, tetapi juga digunakan dalam game lain seperti (open source) OpenTTD (berdasarkan Transport Tycoon Deluxe).
Agar jelas: menggunakan teknik ini, Anda tidak perlu mengirim status permainan APA SAJA saat bermain. Seluruh kondisi permainan dikirim saat permulaan awal, sambungkan dan sinkronisasi ulang. Satu-satunya hal yang perlu Anda kirim secara teratur adalah sinyal waktu dan cek sinkronisasi. Hanya perintah pemain yang biasanya dikirim dari klien ke server dan sebaliknya. Jika seorang pemain tidak menjalankan perintah (seperti halnya pada sebagian besar kutu), tidak ada data yang perlu dikirim.
Lihat tautan ini.
http://www.gamasutra.com/view/feature/3094/1500_archers_on_a_288_network_.php
Pembaruan: Kylotan menyebut ini "teknik 3" dalam jawabannya.
sumber