MMO'larda sunucu tarafındaki her nesnenin koordinatlarını saklama


12

Bir MMORPG'de:

Çarpışma tespiti için sunucu tarafında her ağacın, çalı kayanın .. vb. Koordinatlarını saklamak tipik mi yoksa uygulanabilir mi?

Öyleyse, bu kadar çok sayıda koordinatı (veri yapıları ve performans sorunlarını ele alma) depolamanın uygun bir yolu ne olabilir?

Değilse, bu tür bir çarpışma algılaması tamamen istemci tarafında yapılır ve sunucu hiç kontrol etmiyor mu?

Yoksa müşteri çarpışmayı kontrol ederken ve sunucu doğrularken bir orta yol var mı? Öyleyse, sunucu koordinatları sunucuda da tutmadan aynı şeyi nasıl doğrular?


2
Bu konuda iyi bir cevap vermek için yeterli bilgim yok, ama sadece müşteri tarafında çarpışma tespiti yaparsanız, hileler her şeyi kırpmanın veya onlardan mil uzakta olan powerup'ları almanın bir yolunu bulacaklar.
Mart'ta Peethor

2
-1 "Soru araştırma çabası göstermiyor".
Vaillancourt


aslında, muhtemelen bir kopya değil, diğer sorunun sahip olmadığı
uzaysal

Yanıtlar:


15

Fizibiliteden bağımsız olarak (evet, ölçeğe bağlı olarak) genellikle daha iyi veya daha kolay yollar vardır.

Örneğin, tipik MMO'nuzda, sunucunun gerçekten sadece AI ve oynatıcı yol bulma tarafından kullanılan kaba navigasyon haritası hakkında bilgi sahibi olması gerekir. Bir ağacın yerini saklamak yerine, ağacın bulunduğu yerdeki navmap'a bir delik açabilirsiniz. Aynı şekilde diğer büyük engeller için.

Daha derinlemesine çarpışma algılaması gerektiren oyunlar bile, bunu genellikle sunucu ve istemci tarafı algılamasına bölebilirsiniz. İstemci daha fazla animasyon duyarlı çarpışma algılaması gerçekleştirirken sunucu sadece kaba yollarla ilgilenebilir. Örneğin, yaralı bir oyuncu, düşmanlardan saklanan bir yer bulmak için büyük bir kaya boyunca sürünmeye çalışır. Sunucu, bir oyuncunun kayanın kenarı boyunca hareket edebileceğini belirler (sunucu bir kaya olduğu hakkında hiçbir fikre sahip değildir , sadece oyuncunun katlanamaz bir alanın yanında alabileceği bir yol vardır), istemci kayanın mevcut olduğunu bilir ve yürürken kayaya karşı kendini destekleyen karakterin animasyonunu oynatır. İstemcinin hareket etmediğini unutmayınbu durumda herhangi bir şekilde karakter veya etkileyici oyun; sadece yakındaki nesnelere bir animasyonla tepki veriyor.

Kesinlikle çok sayıda nesneyi sunucuda saklayabilirsiniz. Herhangi bir açık dünya oyunundan farklı değil. İyi bir uzamsal bölümleme şeması kullanın ve nesnelerinizin bellek ayak izini olabildiğince açık tutun. Burada kafalarımızda farklı "büyük sayıların" farklı sürümlerine sahip olabileceğimizi unutmayın: oyunda her küçük çakıl veya kayalık yumru ayrı bir nesne olarak saklamak istediyseniz, o zaman bu sadece saçma, tek oyunculu bir oyun için bile . :)


7

Evet - uygulanabilir. MMO'lar genellikle oyun dünyasını birden fazla alana böler, çünkü bu işi kolaylaştırır, ancak yine de 1 büyük alanla yapabilirsiniz - sadece iyi bir uzamsal bölümleme şeması kullanmanız gerekir.

MMO'lardaki nesnelerin çoğu hareket etmediğinden, nesnelerin çarpışma kontrol ağaçları oluşturmak için kullanıldığı bir önişleme geçişi de gerçekleştirebilirsiniz.

Örnekleme kullandığınız sürece burada bellek ayak izi büyük bir sorun değildir. Nesneler başına birkaç şamandıra depolamak, şeylerin büyük şemasında hiçbir şey değildir. Günümüzde mütevazı bir bilgisayarda 4 gigabayt bulunurken, bir pozisyonu saklamak sadece 3 şamandıra (veya 3 çift) - bu da oyunda milyonlarca depolanmış nesneye kolayca izin verecek.

Her oyuncu için envanter gibi şeyleri saklamak şüphesiz daha fazla veri alır - ancak bu kolayca diske önbelleğe alınabilir ve yalnızca bir oyuncu oturum açtığında yüklenebilir.

İstemcinin yanı sıra sunucuda da çarpışma denetimini yedek olarak yapmak isteyeceksiniz, çünkü bu istemcinin çevreye daha duyarlı tepki vermesini sağlayacaktır. Bir oyuncu bir duvara girerse, sunucu yanıt verdiğinde yarım saniye sonra değil, hemen hareket etmeyi durdurmasını istersiniz.

Sunucuyu yalnızca yetkili şeyler için kullanmak istiyorsunuz. Örneğin, daha az verimli bir yol izleyerek hile yapamayacağınız için yol bulma işlemini yalnızca istemcide gerçekleştirirsiniz!


boşluk ayırma şemaları için ipucu için teşekkürler, yeni bir şey öğrendim
Sajith Dilshan Jamal
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.