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();
yerinetmpYazisi.SetText(intDegisken);
tmpYazisi.text = "Skor: " + intDegisken;
yerinetmpYazisi.SetText(intDegisken, "Skor: ", null);
tmpYazisi.text = "Para: " + intDegisken + "$";
yerinetmpYazisi.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!