Kamera görünümünün dışında kalan Oyun Nesneleri Unity'de bilgisayar / mobil kaynakları tüketiyor mu?


11

Birlik içinde, sahnemde kamera tarafından görülemeyen ve oyun çalışırken görüntülenmeyen bazı Oyun Nesneleri olduğunu varsayalım.

Bu Oyun Nesneleri oyun çalışırken bilgisayar / mobil kaynak tüketecek mi?

Bunun gibi kullanımla ilgili ayrıntıları nerede bulabilirim?

Yanıtlar:


13

İstediğiniz şey, Unity'nin sahip olduğu bir bellek profilleridir. Burada: http://docs.unity3d.com/Manual/ProfilerMemory.html

Ancak varsayımlarınız çoğunlukla doğrudur, eğer bir gameObject kameraya görünmüyorsa çizilmez ve daha az kaynak kullanır, ancak yine de biraz tüketmesi gerekir. GameObject hala da hala Update ve FixedUpdate yöntemlerle CPU zamanını tüketir .. tüm dokular, modeller komut vb dahil hafızasında var (ve çeşitli diğerleri açıklanan burada ).

Ancak genellikle büyük yavaşlama çizimdir, nesnenin kamera frustumunun (sınırlar) dışında olduğunu belirlemek için az miktarda CPU zamanı kullanılır, ancak çizim yapılmaz.


5

Ayrıca, Frustrum Culling hakkında bilgi sahibi olmanız veya yüzey kaldırmayı gizlemeniz gerektiğini düşünüyorum: http://en.wikipedia.org/wiki/Hidden_surface_determination

Bu, bir oyunu optimize etmenin önemli bir parçasıdır, çünkü nesneleriniz belirli bir çerçevede hayal kırıklığının içinde olmasa bile (yani görünür), onlar için bazı çizim çağrıları (gölgelendiriciler) hala başlatılır, bu nedenle performansı düşürür.


2
@ Gissipi_453, bu çizgiler boyunca araştırma yaparken, dörtlü ve sekizli ağaçları da (mekansal veri sıralama) araştırın
Jon

3

Kısa cevap "evet" dir; oyunda kullanılmaya hazır olan her şey hafızayı kaplıyor.

Dikkate alınması gereken diğer bir şey, kare hızınızın maliyeti:

Ayrı ayrı çizilen 5 ayrı dokuya sahip 5 nesne arasında durum değişikliği gerekir. Kullanılmayan dokuları boşaltarak bellek tasarrufu sağlayabilirsiniz.

Tüm ayrı dokuları tek bir atlas dokusuna yükleyerek, bellek alanı sabit hale gelir ve artık tek bir dokuyu kaldıramazsınız. Oluşturulduktan sonra, tüm nesnelerinizi çizmek için atlası sadece bir kez bağlamanız gerekir.

Başka bir örnek, basit bir tepe noktası ve dizin arabelleğidir. Noktaların birçoğu sık sık görünür ve görünmez arasında geçiş yaparsa, köşe arabelleğindeki "eski" noktaları bırakmak ve yalnızca yeni bir dizin arabelleği yüklemek daha hızlıdır.

Artan ön bellek maliyetinin birçok eyalet değişikliğine tercih edildiği başka birçok zaman vardır.

Kameranızı döndürürseniz, bilmediğiniz sürece kesinlikle bu nesneleri yok etmezsiniz, bu kamera o nesneyi kontrol etmek için geri dönmez. "- Katu

Yan kaydırıcıyı örnek olarak kullanarak, yalnızca sağa hareket edebiliyorsanız (harita yalnızca sola kayarsa), ekranın sol tarafında kayan herhangi bir nesne, bir daha asla kullanmayacağınız için kalıcı olarak kaldırılabilir. Ayrıca, nesnenin içeriği, nesne sağdan görünüme kaydırılmadan hemen önce yüklenebilir.


1

Çoğu yanıt, sorunuzun grafik yönünü dikkate almaktadır.

Gerçek şu ki, çeşitli kaynakları ele alacaklar ve nesneyi çizmekle karşılaştırıldığında ne kadar pahalı oldukları sabit değil. Bileşenlerinizin çizimden daha pahalı işlemler yapması için ima edilen bazı cevaplar kadar nadir değildir, ancak kaç kaynak kullandığını en aza indirebilirsiniz. Ayrıca bir GameObject öğesinin az miktarda bellek kapladığını ve bileşenlerinin de olduğunu unutmayın. Bileşenler ayrıca oldukça fazla bellek kaplayan şeyler yapıyor olabilir.

Ekran dışı bileşenlerin etkisini en aza indirmenin en basit yolu OnBecameVisible ve OnBecameInvisible geri çağrılarını temel alan bir sistemdir .

void OnBecameVisible()
{
    myComplexComponent.enabled = true;
}
void OnBecameInvisble()
{
    myComplexComponent.enabled = false;
}

Tabii ki, bu çok sınırlı bir kullanışlılık çünkü ekran dışı bir nesnenin oyunu etkilemesini isteyeceğiniz birçok zaman var. Ancak, en pahalı hesaplamalarınızın etkisini en aza indirgeyebilen ince taneli bir sistem için bu tür bir model üzerinde genişleyebilirsiniz. Nesne ekran dışındayken komut dosyası takip eden yol kalitesini düşürmek gibi basit bir şey bile uzun vadede büyük tasarruflara neden olabilir.


1

Hayatta kalmak ve konumunu ve diğer özelliklerini güncellemek için bellek gerekir.

Ancak görünür olmadığı için bilgisayar / mobil grafik kaynaklarını tüketmez.

Yani evet, bellek kaynaklarını tüketiyor, ancak görünür bir Oyun Nesnesi gibi grafik kaynaklarını kullanmıyor.


Çok teşekkürler. Bu aradığım çok doğrudan bir cevap.
Gissipi_453

0

Bir programda olan her şey kaynakları tüketir; Programların sadece umutlar ve hayaller üzerinde çalıştığını düşünmüyorsunuz, değil mi?

Soru, bir oyun nesnesinin ne kadar kaynak tükettiği ve bu amaçla bunun oldukça sağlam bir cevap olduğunu düşünüyorum: http://answers.unity3d.com/questions/280455/how-much-memory-a-gameobject- consume.html

Kısacası, ihmal edilebilir kaynakları kendi başlarına tüketiyorlar. Ama neden oyununuzda oturan bir grup oyun nesnesinin hiçbir şey yapmamasını istesiniz ki? Günün sonunda, aslında bu oyun nesnelerini 'yapmak' yaptığınız şey, herhangi bir ek yüke neden olacak şeydir ve ne kadar kaynak gerektirdiğine göre duruma göre çok fazladır.


Çok teşekkür ederim. Bu yüzden oyun çalışırken kamera görüş alanından çıkmış nesneleri yok etmeli miyim?
Gissipi_453

1
Bu cevabın sorunuzu gerçekten cevaplamaya çalışmadığını düşünüyorum ve bu yüzden basit bir yanlıştır. Kameranızı döndürürseniz, bilmediğiniz sürece kesinlikle bu nesneleri yok etmezsiniz, bu kamera o nesneyi kontrol etmek için geri dönmez. Oyun dünyaları var ve yapay zekanın hareketi, onları görmeseniz bile ışıklar çevreyi etkiliyor.
Katu

@Katu, bu da bir nokta. Teşekkürler. Nesnenin oluşturulmasına gerek olmadığı sürece, onu yok etmemeliyim.
Gissipi_453

@Katu Şu soruyu cevapladım: "Bu Oyun Nesneleri (Sahnemde kamera tarafından görülemeyen nesneler) oyun çalışırken bilgisayar / mobil kaynaklar tüketecek mi?" Bu cevap şu şekildedir: "Evet. Bir programdaki her şey kaynakları tüketir". Boş oyun nesnelerinin sahnedeki etkilerini ve kaynak maliyetlerini açıklamaya devam ettim.
Gerçek dönüş

2
@ Gissipi_453 Sorunuzu cevaplamak, sahnedeki oyun nesnelerinin gerçekte ne yaptığını, ne sıklıkta oluşturulduğunu / silindiğini ve diğer hususlara bağlıdır. Ne zaman optimize edileceğini bilmek kendi başına bir beceridir, ancak başparmak kuralı, endişelenecek bir şey olana kadar bu konuda endişelenmektir. Ekstra oyun nesnelerinin ek yükü hiçbir şeye yakın değildir, bu yüzden endişelenmeyin. Bazı durumlarda, nesneleri sık sık ekliyorsanız / kaldırıyorsanız, nesne havuzu oluşturmak bir hayat kurtarıcı olabilir ve diğer durumlarda başka numaralar yapabilirsiniz. Her şey sorunun olup olmadığına ve sorunun tam olarak ne olduğuna bağlıdır.
gerçek dönüş
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.