Yaklaşım: Daha yüksek simülasyon oranı
Kullanıcı arayüzünüz için zamanlamanız, oluşturma işleminiz gibi gerçek oyun döngünüzden ayrılmalıdır. Örneğin dünyanızın 4x hızında koştuğunu varsayalım. Diyelim ki temel hızınızda (1x), oyununuz saniyede 30 güncelleme yapıyor.
Daha sonra hızlı ileri sarma modundayken aşağıdakine benzer bir şey elde edersiniz:
- Dünya mantığı her kullanıcı arayüzü ve oluşturucu güncellemesi için 4 güncelleme çalıştırır. Bu, saniyede 120 güncelleme çalıştırması gerektiği anlamına gelir. Böylece dünya modeliniz (veriler) bu hızda güncellenir.
- Renderer ve UI mantığı, saniyede 30 güncellemede yoklamaya veya her şeyi yapmaya devam ediyor.
Başka bir deyişle, oyun bir bütün olarak daha hızlı çalışmıyor. Simülasyon parçasıdır.
Bundan iki şey çıkarabilirsiniz:
Eğer senin bu oyunun mantığı basit yeterince tutmak için gereken olabilir kolayca için küçük bir karşılaştırma dört kat daha hızlı çalıştırmak VEYA daha hızlı oyun çeşitli yönlerini tahmin yöntemleri tanıtmak için gerek - bu neden olabilir, ama, bir modelde daha hızlı tempolu bir simülasyon kullansaydınız olandan farklı olurdu. Yani ödünleşim doğruluk için maliyeti işlemek olacaktır. Aşağıdaki yaklaşım 2'ye bakınız.
Dünya simülasyonunuzu kolayca hızlandırabilmeniz, model, görünüm ve kontrolör ( MVC ) olmak üzere endişelerin ayrılmasıdır . Dünya verileriniz (M), render mantığı (V) ve oyun mantığı (C) karışıksa, en azından büyük bir migren olmadan bunu yapamazsınız.
Yaklaşım: Zaman deltalarına dayalı ekstrapolasyon
Yukarıda belirtildiği gibi, belirli bir zamanda bir şeyin ne kadar yol alacağını temel alarak hareketi hesaplamanız gerekir. Bu, oyun fiziğinizin simülasyonlarında doğal olarak daha gerçekçi olduğunu varsayar, ancak durum böyle olmayabilir. Bu oldukça büyük bir konu ve çok daha karmaşık. Bilmek isteyip istemediğiniz hakkında daha fazla soru sormanız gerekir. Esasen, işleri düzeltmek için biraz hesaplama yapacaksınız. Çarpışmalarda iç içe geçme ve buraya girmeyeceğim bir dizi başka sorunla uğraşmanız gerekecek.
Sonuç olarak
Bu size genel bir taslak verir. Dil seçiminiz size aittir, muhtemelen bunu Unity'de nasıl yapacağınızı biliyorsunuz ya da bilmiyorsunuz. Herhangi bir dilde zamanlama, giriş ve çıkışları ayrıntılı olarak anlamanızı gerektirir, Gaffer'ın makalelerinden başlayıp Unity API belgelerine göz atmanızı öneririm .