Oyuncu tarafından oluşturulan aşırı molozları nasıl temizleyebilirim?


92

Yaptığım en son oyunumda, bir 2D nesneyi rastgele dilimleyip, şu gifte gösterilmiş olabilir:

görüntü tanımını buraya girin

Sürekli olarak yüzlerce veya binlerce parçaya bölebilirsiniz. Bu çok fazla gecikme yaratmaz, çünkü daima uyku fiziği halindelerdir, fakat hareket etmelerine neden olduğunuzda bir sorun var.

Nasıl başa çıkacağımı bilemiyorum, bu yüzden bir şeyi parçalamaktan çok moloz yok. Belli bir süre sonra onları silmek istemiyorum; Bir süre sonra keseceğiniz bir şeye geri dönerseniz, rastgele olarak kayboldu.

Oyuncu tarafından oluşturulan aşırı molozları nasıl temizleyebilirim?


17
Sorunuzdan gerçekte ne istediğinizi tam olarak bilmiyorsunuz. "Enkazı temizlemek" istediğini söylüyorsun, ama aynı zamanda molozların bir süre sonra kaybolmasını istemediğini söylüyorsun.
Philipp

10
Tiny & Big küçük parçaları yok ederdi. Büyük parçaların seviye boyunca kaldığından eminim, ama tam olarak hatırlamıyorum. İşte bir örnek: youtu.be/236ly0ApPqg?t=177
TyCobb

2
Menzilde olmayan şeyler, geri döndüğünüzde çıkarılabilir ve değiştirilebilir.
Loren Pechtel

3
Sadece benim küçük fikrim, ancak kesme eyleminden etkilenecek minimum nesne boyutunu ayarlayın. Kestiğiniz parçayı ayırmak zorsa, kesemezsiniz. (Sadece bir yana, güzel oyun dinamikleri, bunun kesinlikle bir ayağı var!)
AJFaraday

12
Github'da bulduğum ücretsiz bir varlık olduğundan, kesme teknisyeni yapmak için hiçbir kredi almamı belirtmek isterim . Bu örneği kullanarak size nesneleri kesmek için nasıl kullanılacağı hakkında bir fikir verir. (oyuncu benim tarafımdan kodlandı ve oyundaki diğer her şey olacak.
Ducktor

Yanıtlar:


71

Her şeyden önce, bu oyun tamircisi süper eğlenceli olabilir gibi görünüyor, bu yüzden onu düşünüyorum tebrikler! Bu belirli sorunu çözmek için bağımsız olarak veya birlikte kullanılabilecek iki basit çözüm:

Çok Küçük Parçaları Kaldır

Müzikçaları gerçekten engellemeyecek veya çevre üzerinde gerçek bir etkisi olmayacak kadar küçük çarpışma parçalarının etrafında durmanın bir anlamı yoktur. Ekstra çarpışma mantığını hesaplamak buna değmez, bu yüzden bu parçaları çıkarın veya üzerlerindeki çarpışmayı kaldırın.

Limit Oynatıcı Kesiliyor

Sınırsız kesiklere sahip olmak, her engelleyici nesneyi bir tomurcuk yığınına dilimleyebilmeniz durumunda, bulmacalarınızın çoğunu gerçekten basitleştirebilir. Oynatıcıya oynamak için sadece birkaç kesim verin (ya da zaman içinde yavaşça şarj edin) ve muhtemelen bin fragmanda çarpışma ile uğraşmanın acısını ortadan kaldırmanın yanı sıra bulmacalarınızı daha zor hale getirdiğini göreceksiniz.


1
Sanırım herhangi bir puzzle oyunu yapmayı düşünmediğim için ilkini yapacağım.
Ducktor

36
Micheal Bay, küçük parçalar da ortadan kalkınca ortaya çıkıyor. Bu bir kütük değil, talaş. Veya patlayan talaş. neden olmasın?!
corsiKa

26
@corsiKa Kesme hareketine yanıcı etkiler eklerseniz, kesimlerin temas noktalarında belli bir genişlikte çizik izleri bırakmasını sağlayabilirsiniz. Nesne tamamen "kavurucu" olacak kadar küçükse, alevler içinde patlayabilir ve birkaç dakika içinde yanabilir.
T. Sar

155

Darboğazını bulmak

Birkaç yüz hareketli nesne sorun olmamalıdır. Ancak, birkaç yüz çarpışan nesne olabilir. Bazı testler alacaktır, ancak sahip olduğunuz darboğazın çarpışma olduğuna inanıyorum.

Bu arada, kaç tane nesneden bahsediyoruz? Platform nedir Bir mobil oyun için yüz nesne bir web oyunu için bir yüz veya bir masaüstü oyunu için yüz nesne ile aynı değildir.

Aynı oyunu, ancak devre dışı bırakılmış kesme nesneleri arasındaki çarpışmalarla test edin ve benzer miktarda nesnede gecikme olup olmadığını görün. Bu durumda, nesnelerin büyük miktarının sorunun nedeni olduğu anlamına gelir; Aksi takdirde, çarpışmalar problemdir.

Bu, performansı artırmak için ne yapacağınız konusundaki kararınızı size bildirecektir. Aşağıdaki fikirlerin tümü geçerli olmayacak ve yine de test etmeniz gerekecektir.


Nesnelerle etkileşime girerken sorun ortaya çıktığı için, oyuncudan uzaktaki çok sayıda nesne için optimizasyon hakkında konuşmayacağım.

hareket etmelerine neden olduğunuzda bir sorun var.

Nesnelerle etkileşimde sorun yaşanırsa, görünür olmayan nesnelerin kaldırılmasının onu nasıl çözeceği belli değil ... henüz, bunun yardımcı olabileceğini farzedeceğim.

Sadece oyuncudan uzaktaki nesneler bir sorunsa, daha küçük seviyelere sahip olarak başlayabilir veya oyuncunun nereye gittiğine bağlı olarak oyunu yükleyip boşaltabileceğiniz parçalara ayırmaya başlayacağınızı söyleyeceğim.


Sınırların dışında

Molozların temizliği söz konusu olduğunda, ilk yapılması gereken şeyin sınırları dışındaki nesneleri çıkarmak olduğuna inanıyorum. Örneğin, bir çukura düşen parça. Oyuncunun onu görebilmek için oraya ulaşması mümkün değilse, etrafta kalması için hiçbir sebep yoktur.

Buna geri döneceğim.


Daha gerçekçi hale getirin (bölüm 1)

Tahta testereyi, balta veya benzeri bir aletle keserseniz, kaybolan malzeme (talaş, talaş vb.) Olacaktır. Lazerle kesseniz bile, lazer biraz odun yakar. Ayrıca, odun olmayan bir şey için genellikle kesme, ufalama, vb. Etrafında deformasyon olacaktır.

Demek istediğim, kesim mükemmel değil ve bazı malzemeler kaybolacak. Bunu oyunda modelleyebilirsin. Bu sihirli kırmızı kesme şeyinin kalınlığı var. Bu kalınlığı nesnelerden kaldırın (kendinizi suçlu hissederseniz parçacık efektleri ekleyin).

Bu, o kalınlıktan daha küçük bir şeyi kesemeyeceğiniz anlamına gelir, aslında bunu yapmaya çalışmak onu oyundan çıkarır. Bu iyi! Bu, olacak bir moloz miktarının üst sınırı olduğu ve oyunda onu temizlemek için mekanik olarak sağlam bir yol olduğu anlamına gelir.


Küçük nesneler için dişlileri değiştirin

Çarpışmalar sorunsa bu daha iyi sonuç verecektir.

Bir nesne çok küçük olduğunda, sahip olduğu farklı açıların detayları daha az ilgilidir. Daha az doğru bir çarpışma tamircisine dönüşebilirsin. Örneğin, daire çarpıştırıcılarını kullanabilirsiniz.

Daha küçük nesnelere kendi aralarında çarpışma olmadan da davranabilirsiniz; sadece aralarında ve ajan nesneleri (örneğin oyuncunun avatarı veya AI kontrollü karakterler gibi) arasındaki çarpışmayı göz önünde bulundurun.

Son olarak, çok küçük nesneler sadece toza dönüşebilir (parçacık efektleri).


Daha gerçekçi hale getirin (bölüm 2)

Çarpışmalar sorunsa bu daha iyi sonuç verecektir.

Malzeme deforme olur ve basınç altında kırılır. Çok az kalınlığa sahip uzun nesnelerle karşılaşırsanız, yukarıdaki çözümden yararlanmaları için onları daha küçük nesnelere bölün.

Vurduğunuzda ufalanan ve kırılan çok küçük bir kalınlığa sahip olduğunu iddia edebiliriz.


Nesneleri birleştirme

Nesnelerin sayısı sorunsa bu daha iyi çalışacaktır.

Pek çok oyunun performansa zarar verebilecek büyük miktardaki düşüşle başa çıkmak için kullandığı yaygın bir hile, düşüşleri birlikte paketlemektir.

Birbirine yakın küçük nesneler için benzer bir şey deneyebilirsiniz. Onları tek bir nesne haline getirin. Ancak parçaları birbirine yapıştırmak istemiyorum. Fiziklerini idare etmek için tek bir nesne yaratmak; nesneyi oluşturan parçaları, belki de parçacık efektlerine benzeyen teknikleri kullanarak hala temsil edebilirsiniz.


Daha gerçekçi hale getirin (bölüm 3)

Rüzgarı duydun mu? Gerçek dünyada rüzgar var.

Küçük nesneleri uzaklaştırmak için rüzgar kullanın.

Sayacın sezgisel gelebileceğini biliyorum çünkü bu, küçük nesnelerin en azından hemen dinlenemediği anlamına geliyor. Kararınızı vermeden önce aşağıda okuyun.

Şunları yapabilirsiniz kullanmak rüzgar önce uzak küçük bir nesne itmek - veya en kısa sürede - onlar yığmak başlar. Küçük nesneler için optimizasyon kullanıyorsanız (bunlar onları birleştiriyor veya aralarındaki çarpışmaları kaldırıyorsanız) hangisi daha iyi çalışır.

Ayrıca, eşyaları çukurlara itmek için ya da sınırların dışına itmek için rüzgarı kullanabiliyorsanız, eşyaları çıkarmak için bir bahane olarak kullanabilirsiniz. Sana buna geri döneceğimi söylemiştim. Yapmasanız bile, oyuncudan çok uzakta olan küçük nesneleri çıkarmak bahane olarak kullanılabilir, oyuncu bakmıyorken rüzgar onlardan kurtulmuş gibi yapın.

Oyuncu bakmazken bazı nesneleri çıkarabilirsiniz, benim kutsamam sizde.

Buna ek olarak, artık oyunun diğer mekaniğinin veya engellerin bir parçası olarak rüzgarı ekleyebileceğiniz rüzgarı eklemek için bir bahaneniz var. Öyle bir eğiminiz varsa, anlatıya olayları temiz tutmaya çalışan rüzgar ruhunu bile ekleyebilirsiniz.

Not : Temizlemek için moloz olduğu zaman rüzgarı tetiklemeniz gerekmez (bunun işe yaramasına rağmen), muhtemelen rastgele aralıklarla rüzgâr olabilir.


Beavers!

Bazı can sıkıcı kunduz gelir ve odun çalmak!

Artık bir düşman tipiniz var!

Ayrıca, tabii ki, siz bakarken odunları temizlerler. Hatta tasarlayabilirsiniz, böylece bir kunduzun kullanıldığı yerde bir tahta parçasıyla kaçan bir kunduz görürsünüz. Bu unutulmaz bir anı doğuracak, ahşabın neden ortadan kaybolduğunu açıklayacak ve karşılaştığınız bazı performans problemlerini bir kerede çözecektir.


Her şey değişiyor

Platformun veya seçtiğiniz araçların sınırlamaları vardır, oyunu geliştirmek için harcadığınız zaman ve bütçe bile bir sınırlamadır. Henüz mükemmel bir gerçeklik simülasyonu yapamazsınız . Kimse yapamaz .

Her geliştirici, hedef platformlarının ve onlara uyguladıkları araçların sınırlamaları dahilinde çalışır ve en iyi oyunlar, oyunun eğlenceli ve ilgi çekici olmasını sağlamak için travmalar yapmak zorunda kaldılar ... çoğu zaman eğlenceli ve ilgi çekicidirler çünkü gerçekçi değildirler.

Yaratıcılığın bu sınırlamalardan gelmesine izin verin.

Bununla birlikte, gelişiminiz için uygun olan kısımları seçerek oyununuzu daha gerçekçi hale getirebilirsiniz . Bazen oyuncudan uzakta olan nesneleri kaldırmanın eğlenceli bir oyun yapma maliyetinin bir parçası olduğunu düşünün.


36
Bu yazı moloz taşması sorununa kesin bir cevaptır. Mekaniğin ve anlatının nasıl birlikte akabileceğini gösterirken aynı zamanda koşullarınıza uygun yaratıcı ve toplama çözümleri olma ihtiyacını açıkça ortaya koyarken, tekniklerin ayrıntılı bir özetini sunmuş olmalısınız. Sadece nasıl etkilendiğimi ifade etmekte zorlandığımı söylemek istedim.
Dragomok

12
Tamamen kaybolmasına neden olan nesne gerek kiriş genişliğinden daha küçük bir nesneyi kesmek girişiminde yerine verim olabilir bir küçük nesne. Önemli olan, nesnelerin sayısının yalnızca kesilen nesnenin kiriş genişliğini aşması halinde arttırılmasıdır .
supercat

1

Dünya ayrık. Bir nesneyi pikselden daha küçük hale getiremezsiniz, bu yüzden böyle nesnelerin var olmasına izin vermeyin. (Bu, Theraot tarafından yapılan gerçekçilik noktalarının bazılarına benzer .)

Aslında, bunu ücretsiz olarak alabilirsiniz: oyuncu kendi kesim çizgisini esasen ekranda ayrık bir çizgi olarak belirler. Kesimin etkisi, her nesneyi, sırasıyla, bu çizginin altındaki veya altındaki pikselleri ve kesinlikle üstündeki pikselleri içeren alt nesnelere bölmektir. Bir piksel nesnesi muhtemelen çizginin altında ve üstünde olamaz, bu nedenle bu algoritma tarafından kesilemez.

Tüm kesilebilir tabloların ayrı ayrı pikseller halinde kesilmesi sizi izleyebileceğiniz çok fazla nesne ile bırakıyorsa, daha büyük bir minimum boyut yine de işe yarayabilir.

Ya da sadece endişelenme. Eğer oyuncu uzun süre nesneleri toza kesmek için harcarsa, acelesi yoktur, bu yüzden neden oldukları gecikmeyle başa çıkabilirler. ;-)

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.