Performans için tasarım, oyununuzu inşa ederken bir dizi en iyi uygulamayı takip etmek anlamına gelir. Geliştirme sürecinin ilerleyen aşamalarında performans sorunlarını bulmak ve düzeltmekle kıyaslandığında, erken aşamada performans için tasarlamak size zaman ve çaba kazandırabilir.
Düşük seviye cihazlar
Daha düşük seviye cihazlar, özellikle mobil cihazlar, ciddi bellek sınırlamalarına sahiptir ve bellek dışı (OOM) hataları nedeniyle çökme riski taşır:
Düşük seviye cihazları desteklemek istiyorsanız, en az bir "temel" cihaz seçin, geliştirme sürecinde onu test edin ve kare hızı ile bellek kullanımına dikkat edin. Oyununuzdaki sorunlu alanları bulduğunuzda, bu alanları cihazınızın sınırlarını belirlemek için kullanın.
Örneğin, Render (ShiftF2) ve Summary (ShiftF2) hata ayıklama istatistikleri etkinleştirilmiş bir oyunu test edebilirsiniz. Eğer kare hızı özellikle karmaşık bir alanda düşmeye başlarsa, Draw (scene) sayısını inceleyerek oyununuzun iyi çalışması için 1,000 çizim çağrısı ve 1,000,000 üçgenin altında kalmanız gerektiğini belirleyebilirsiniz.
Ya da Geliştirici Konsolu (F9) aracılığıyla bellek kullanımının biraz yüksek olduğunu ve akış özelliğini etkinleştirmediğiniz sürece yüksek olduğunu not edebilirsiniz. Cihaz sınırlarını net bir şekilde anlamak, oyununuzu inşa etmeye devam ederken altına düşmesini sağlamanıza yardımcı olabilir.

Roblox Studio'daki cihaz emülatörü en boy oranı ve kontrolleri kontrol etmek için kullanışlıdır, ancak bellek kullanımında doğru değildir; bir oyunu Stüdyo'da test ettiğinizde, sunucu ve istemci birlikte çalıştırılır, bu nedenle bellek kullanımı önemli ölçüde daha yüksektir.
Daha genel olarak, çeşitli cihazlarda test yapma işlemi, oyununuzun farklı grafik kalite seviyelerinde görsel ve performans beklentilerinizi karşıladığını kontrol etmenize yardımcı olabilir. Düşük seviye mobil cihazlar için oyununuzu optimize etme konusunda nasıl düşünebileceğinizle ilgili daha ayrıntılı bir örnek için Gerçek Dünya Yapı ve Betik Optimizasyonu bölümüne bakın.
Akış ve teleportasyon
Instance akışı, Roblox'un 3D içeriği dinamik olarak yükleyip boşaltmasına olanak tanır ve çoğu yer için harika bir seçenektir, özellikle de daha büyük alanlar için. Akış, katılma sürelerini iyileştirir, bellek ayak izini azaltır ve kare hızını artırır.
Örneğin, Workspace.EnableSLIMAvatars özelliğini etkinleştirirseniz ve dünya modellerinizin LevelOfDetail özelliğini SLIM olarak ayarlarsanız, geniş bir cihaz yetenekleri yelpazesi boyunca sosyal alanlar ve kalabalık etkinliklere sahip dünyalar oluşturabilirsiniz. Daha fazla bilgi için SLIM ve Performansı artırma belgelerine bakın.
Büyük yerleri daha yönetilebilir parçalara ayırmayı ve oyuncuları bunlar arasında taşımak için teleportasyonu kullanmayı düşünün. Bu yaklaşım ilk katılma sürelerini azaltabilir, ancak oyuncuların yerden yere teleport edilmesi sırasında ek katılma süreleri getirebilir. Bellek kullanımına olan faydalar, yerin boyutuna ve akış özelliğini etkinleştirip etkinleştirmediğinize bağlı olarak değişir.
Performans kaygılarını bir kenara bırakırsanız, birden fazla yere sahip olmanın, özellikle yeni içerikler eklemeyi sık sık yapıyorsanız ya da daha büyük bir ekibin parçasıysanız, geliştirme sürecini basitleştirdiğini görebilirsiniz.
Malzemeler ve tekrarlar
Yerleşik malzemeler, özel dokulardan çok daha az bellek kullanır, ancak sanatsal vizyonunuzla uyuşmayabilir. Oyununuza merkez olan dokular için bellek bütçesini korumak adına mümkün olduğunca malzeme kullanmaya çalışın.
Varlıkları oluştururken bunları paketlere dönüştürün. Paketleri iş akışınıza dahil etmek, farklı kimliklere sahip birden fazla varlık sorunu gibi yaygın sorunlardan kaçınmanıza yardımcı olur; bu da performansa zarar verebilir.
Ağız ve dokuları eklediğinizde, bunları kullanın ve yeniden kullanın, kopyalarını içe aktarmayın. Ölçeklendirme, döndürme ve üst üste getirme ile, çok az çizim çağrısı gerektiren zengin, çeşitli ortamlar yaratabilirsiniz. Daha fazla bilgi için Yinelenen dokuları kaldır bölümüne bakın.
Şeffaflık
- 0 (görünür) ve 1 (görünmez) dışındaki şeffaflık değerlerinden kaçının. Kısmi şeffaflık kullandığınızda, özellikle yüksek şeffaflık üst üste gelmesinden kaçınmaya dikkat edin.
Betikleme
Mümkün olduğunda, çerçeve başına hesaplamalar yerine olay odaklı kod yazın. 60 FPS'de, her çerçeve için toplam bütçe 16.67 milisaniyedir (ms). Görünüşte küçük olan çerçeve başına hesaplamalar bile bu bütçenin önemli bir kısmını kullanabilir.
Uzun süre çalışan kod parçalarını yönetilebilir parçalara ayırmanın yollarını bulun. Eğer bir kod parçası 100 ms boyunca çalışıyorsa ve her çerçevede çalıştırıyorsanız, oyununuz sadece 10 FPS'te çalışabilir. Eğer bu kodu, aksi takdirde 60 FPS'de çalışan bir oyunda yalnızca saniyede bir kez çalıştırmaya karar verirseniz, 59 çerçeveniz 16.67 ms'den sonra gelir... ve ardından 100 ms'den sonra bir tanesi gelir, bu da sert bir titreme oluşturur.
Bunun yerine, kodu nasıl parçalayabileceğinizi araştırın. Belki her çerçevede 5 ms çalışma yapabilir, task.wait() kullanarak tamamlanan hesaplamayı her 20 çerçevede alarak 60 FPS'yi koruyabilirsiniz. Çoklu görev veya bazen Paralel Luau olarak adlandırılan yöntem de yardımcı olabilir.
Olay işlendiğinde gereksiz yere işlevlerin çağrılmasını durdurmak için RBXScriptConnection:Disconnect() yöntemini kullanın.
Değer almanız gerektiğinde aynı yöntemi her seferinde çağırmayın. Yöntemi bir kez çağırın, değeri depolayın ve sonra gerekirse daha sonra üzerine yazın.
Her şeyi ReplicatedStorage içinde depolamayın. İstemci bu konteynerde ne varsa hepsini yükler. Bunun yerine, istemcinin erişmesine ihtiyaç duymadığı her şey için ServerStorage kullanın.