Yeniden merhabalar,

Unity‘de TextMesh Pro kullanırken her tmpYazisi.text = intDegisken.ToString(); veya tmpYazisi.text = "Skor: " + intDegisken; yaptığınızda yeni bir string için bellek ayrılır (allocation). Bu da RAM’in daha sık dolmasına ve RAM’i boşaltmak için garbage collector‘un daha çok çalışmasına sebep olur (garbage collector’dan Optimizasyon dersimin başında bahsettim). Bu sıkıntıyı çözmek için basit bir script yazdım. Her ne kadar bu script’in performansı üstteki kodlara göre muhtemelen bir tık kötü olsa da, ben performansın olumsuz etkilendiğini henüz görmedim.

Yapmanız gereken, projenizde TMP_IntegerText adında yeni bir C# script oluşturmak ve script’in içeriğini şuradaki kodla değiştirmek: https://gist.github.com/yasirkula/31704321d6eef8df19933fe502ae6219

Artık kodunuzu şu şekilde güncelleyebilirsiniz:

  • tmpYazisi.text = intDegisken.ToString(); yerine tmpYazisi.SetText(intDegisken);
  • tmpYazisi.text = "Skor: " + intDegisken; yerine tmpYazisi.SetText(intDegisken, "Skor: ", null);
  • tmpYazisi.text = "Para: " + intDegisken + "$"; yerine tmpYazisi.SetText(intDegisken, "Para: ", "$");

Bu script, varsayılan olarak maksimum 64 karakterli string’leri destekler. Daha uzun string’ler için, script’teki readonly char[] arr array’inin boyutunu artırabilirsiniz.

Oyunu editörde Profiler ile test ederken SetText fonksiyonu GC Alloc yapıyor gözükebilir ama oyunu build alınca bu değer 0’a inecektir.

Sonraki derslerde görüşmek üzere!

Emre için bir cevap yazın Cevabı iptal et


2 yanıt

  1. Emre Avatar
    Emre

    Merhaba

    Arkadaşlar elimde bir oyun var. Unity de sıkıntısız çalışıyor ancak build apk aldığımda telefonda high skor bozuk çalışmıyor nasıl çöze bilirim bu hatayı yardımcı olur musunuz

    1. yasirkula Avatar

      Çalışmayan yüksek skor kodunuzu görebilir miyim?