“Hızlı ileri” özelliğini oyunuma nasıl uygulayabilirim?


15

Http://fieldrunners.com/ ve diğer TD oyunları gibi kule savunma oyunum için hızlı ileri alma özelliğini nasıl uygulayabilirim ?

Unity 3D kullanıyorum. Saniyede daha az sayıda kareyi yönetecek bir şey mi yoksa düşmanların elle ayarlanan hızlı hareketini ve kule ateşleme hızını, vb.


güncelleme sıklığını artırmaya çalıştınız mı ?? çerçeveleri atlamanız gerekebilir ..
concept3d

Yanıtlar:


7

oyununuzda bağımsız güncelleme zaman çizelgelerine ayırmayı gerektiren karmaşık veya hesaplamalı olarak pahalı simülasyonlar yoksa, kodu temel alanınıza dayandırmak için basit bir yaklaşım kullanabilirsiniz. Update() işlevlerinizde Unity'nin Time.time değerine ve kodunuzda Time değerini ayarlayın. İstediğiniz zaman olmak için .timeScale. 0 == duraklatılmış, 1 = normal, test kullanıcılarımız işleri daha hızlı halletmek için timeScale> 1 ayarlamayı sever.

http://unity3d.com/support/documentation/ScriptReference/Time-timeScale.html


18

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:

  1. 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.

  2. 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 .


Daha yüksek simülasyon hızı yaklaşımını kullanacaksanız ve yavaşlamayı desteklemek istiyorsanız , muhtemelen son derece yavaş bir taban simülasyon oranına sahip olmanız ve ardından varsayılan olarak 100 simülasyon adımı / karesinde çalıştırmanız gerekir.
bobobobo

9

Genel bir prensip olarak, oyun mantığının güncellenmesi oyunun grafiklerinin güncellenmesinden ayrılmalıdır - yani, oyununuzun simülasyonu, AI, birim hareketi, vb. Oyunun oluşturma hızına bağlı olmamalıdır. . Genellikle ana oyun döngüsü, son oyun güncellemesinden bu yana ne kadar gerçek zaman geçtiğini hesaplar ve bu delta zaman adımını her bir oyun mantığı nesnesinin güncelleme rutinlerine gönderir.

Böyle bir senaryoda, zaman ölçeklendirmesini (hızlı ileri alma dahil) oyununuza uygulamak basitleşir. Oyun mantığı zaman adımını, ne kadar "hızlı ilerlemek" veya zamanı yavaşlatmak için kontrol eden bazı skaler değerlerle önceden çarpın. Varsayılan olarak bu değer bir olacaktır ve örneğin kullanıcı "hızlı ileri sarma" tuşuna bastığında 1,5'e ayarladınız ve tüm simülasyonların% 50 daha hızlı olduğu görülüyor. Ancak yine de aynı oranda işlem yaparsınız.

Unity'ye son derece aşina değilim ve bu nedenle aşağıdaki öneride yanlış olabilirim, ancak Unity'nin bunu uygulamak için yararlı olabilecek bir zaman yönetimi bileşeni var. Aslında zaten bir zaman ölçeği özelliği var. Bileşenin açıklaması, sınıfın fizik nesneleri için tasarlandığını gösterir, ancak senaryolarınız için de geçerli olabilir.


1
Onun senaryosu için kesinlikle geçerlidir. Tek yapması gereken Time.timeScale'i bir çarpana ayarlamak ve her şey daha hızlı olacak. Bu bir tahta değişikliği arasında, bu yüzden menü etkileşimleri gibi şeyler varsa ve böyle de olsa daha hızlı gidecek.
Tetrad

thnx tekrar Tetrad :)
Syed
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.