Saya menulis kode peluru untuk PlanetSide. Kami memiliki beberapa proyektil 'hitscan', tetapi sebagian besar mensimulasikan proyektil sebaik mungkin mengingat kendala CPU dan sejumlah besar peluru yang dimainkan kapan saja.
Dalam kasus hitscan, dampak ditentukan dalam bingkai yang sama dengan input yang diterima, sering menggunakan raycast tunggal. Ini sesuai untuk senjata seperti laser atau proyektil yang sangat cepat lainnya. Kami melakukan hitscan dengan hanya memutar kecepatan awal pada proyektil begitu tinggi sehingga akan melewati papan permainan dalam satu centang.
Peluru non-hits dapat dicentang, baik ke waktu bingkai grafis atau ke waktu yang ditetapkan, dengan perhitungan untuk akselerasi (roket berpikir), gravitasi, gesekan udara, panduan (pikirkan proyektil mencari panas) dll. Diterapkan. Tujuannya adalah untuk menghasilkan posisi terminal proyektil untuk catatan waktu. Setelah titik awal dan akhir ditetapkan, satu atau lebih sinar dapat dilemparkan untuk mendekati jalur penerbangan dan mendeteksi setiap tabrakan yang mungkin terjadi selama penerbangan.
Dalam proyektil hitscan dan non hitscan, apa yang terjadi pada tabrakan tergantung pada properti proyektil Anda dan permukaan yang Anda bentak. Misalnya, Anda mungkin mengenai permukaan yang keras, dalam hal ini Anda dapat memeriksa jumlah bouncing Anda dan menyesuaikan posisi dan kecepatan per refleksi, atau meledakkan proyektil jika Anda telah mencapai jumlah bouncing maksimum Anda. Dalam sistem ini, roket hanya memiliki jumlah bouncing maksimum 0. Anda mungkin mengenai permukaan yang lunak dan kemudian memeriksa daya tembus Anda untuk menentukan apakah proyektil harus berlanjut melalui bahan, dll.
Itu kode yang menyenangkan untuk ditulis. Juga, sangat berguna untuk menulis visualisasi debug yang baik tentang apa yang terjadi sehingga Anda dapat memeriksa jalur penerbangan, acara, dll secara visual.