한국어English日本語简体中文繁體中文DeutschไทยTiếng ViệtРусскийPortuguês (Brasil)EspañolBahasa Indonesia

Buku Putih Lag Game › L1 Proses game di klien

Hilangnya presisi waktu bertipe float Float time precision loss on long sessions

ID penyebab cg-float-time · Penanggung jawab utama Pengembangan klien (Tim Pengembang Game)

Buka kartu interaktif dengan gambar dan simulasi →

Jika waktu game disimpan dalam format bilangan desimal berpresisi rendah (float), makin lama game menyala, makin turun resolusi waktunya (selisih waktu terkecil yang bisa dibedakan), sehingga gerakan dan efek bergetar.

Mengapa Waktu sejak game dinyalakan diakumulasi dalam float atau langsung diteruskan ke shader → Akibatnya Makin lama game menyala, makin besar selisih terkecil yang bisa dinyatakan float → Di layar Karakter, animasi, dan efek yang mengalir bergetar hanya di klien yang sudah menyala berhari-hari, lalu normal lagi setelah game dimulai ulang

Gejala
Patah-patah
Faktor
Jitter
Siapa yang mengalami
Hanya saya
Kapan
Makin lama menyala
Penanggung jawab
Penanggung jawab utama Pengembangan klien (Tim Pengembang Game)
Tugas Tim Pengembang Game
Simpan waktu yang berlalu dalam double (64-bit) atau integer, reset waktu yang diteruskan ke shader secara berkala, jalankan tes otomatis jangka panjang selama beberapa hari.
Kisaran angka
Float 32-bit hanya punya sedikit lebih dari 7 digit signifikan, sehingga setelah menyala sehari (sekitar 86.400 detik) resolusi waktunya sekitar 8 ms, kira-kira setengah dari satu frame 60 FPS (16,7 ms), dan setelah seminggu sekitar 60 ms, lebih besar dari satu frame.
Di grafik
Naik perlahan · Laporan getaran per lama klien menyala
Yang diperiksa
Minta laporan getaran disertai lama klien menyala, lalu bandingkan sebelum dan sesudah game dimulai ulang. Di sisi pengembangan, uji dengan mengatur nilai waktu mulai game seolah sudah lewat beberapa hari
Cocok jika
Bergetar hanya di klien yang menyala berhari-hari, hilang setelah dimulai ulang, dan makin parah makin lama klien menyala
Tidak cocok jika
Langsung bergetar begitu dinyalakan: lebih mungkin “Buffer interpolasi tidak ada atau terlalu pendek” atau “Resolusi timer”
Sarana pemeriksaan
Lingkungan pemain sendiri
Pelajari lebih lanjut
Terutama muncul di MMO mobile yang fitur auto hunt-nya dinyalakan dan tidak dimatikan selama berhari-hari. Time.time di Unity juga bertipe float, sehingga Unity menyediakan Time.timeAsDouble yang bertipe double secara terpisah dan menyarankan pemakaiannya.

Sumber

  1. Time.timeAsDouble Unity
    Versi double dari Time.time; makin lama game menyala, makin presisi dibanding float, sehingga umumnya disarankan
  2. Floating-point numeric types (C# reference) Microsoft
    Presisi float sekitar 6–9 digit, double sekitar 15–17 digit

Lihat juga

Lapisan yang sama: L1 Proses game di klien

Penyebab di lapisan lain dengan gejala yang sama (Patah-patah)

Lihat kartu interaktif dengan gambar dan simulasi