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ı bulup düzeltmek yerine, erken dönemde performans için tasarım yapmak size çok zaman ve çaba kazandırabilir.
Düşük Seviye Cihazlar
Düşük seviye cihazlar, özellikle mobil cihazlar, ciddi bellek sınırlamalarına sahiptir ve bellek aşımı (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 oyununuzu bu cihazda test edin ve kare hızı ile bellek kullanımına dikkat edin. Oyununuzdaki sorunlu alanları buldukça, bu alanları cihazınızın sınırlarını belirlemek için kullanın.
Örneğin, oyunu Render (ShiftF2) ve Summary (ShiftF2) hata ayıklama istatistikleri etkin olarak test edebilirsiniz. Eğer kare hızı özellikle karmaşık bir alanda düşmeye başlarsa, Çizim (sahne) sayılarını inceleyebilir ve oyununuzun temel cihazınızda iyi çalışabilmesi için 1.000 çizim çağrısının ve 1.000.000 üçgenin altında kalmanız gerektiğini belirleyebilirsiniz.
Ya da Geliştirici Konsolu (F9) üzerinde bellek kullanımını kontrol edebilir ve streaming etkinleştirilmediği sürece bellek kullanımının biraz yüksek olduğunu not edebilirsiniz. Cihaz sınırlarının net bir şekilde anlaşılması, oyununuzu inşa etmeye devam ettiğinizde bu sınırların altında kalmanıza yardımcı olabilir.

Roblox Studio'daki cihaz emülatörü, en boy oranını ve kontrolleri kontrol etmek için kullanışlıdır, ancak bellek kullanımını doğru bir şekilde yansıtmaz; Studio'da bir oyunu test ettiğinizde, sunucu ve istemciyi çalıştırdığı için bellek kullanımı önemli ölçüde yüksektir.
Daha genel olarak, çeşitli cihazlarda test etme, oyununuzun çeşitli grafik kalite seviyelerinde görsel ve performans beklentilerinizi karşıladığından emin olmanıza yardımcı olabilir. Düşük seviye mobil cihazlar için oyununuzu optimize etme konusunda daha detaylı bir örnek için Gerçek Dünya Bina ve Scripting Optimizasyonu başlığına bakın.
Streaming ve Teleportasyon
Instance streaming, Roblox'un 3B içeriği dinamik olarak yükleyip boşaltmasına olanak tanır ve çoğu mekanlar için harika bir seçenektir, özellikle büyük olanlar için. Streaming, katılım sürelerini iyileştirir, bellek ayak izini azaltır ve kare hızını artırır.
Örneğin, Workspace.EnableSLIMAvatars özelliğini etkinleştirip dünya modelinizin LevelOfDetail özelliğini SLIM olarak ayarlarsanız, sosyal alanlar ve kalabalık etkinliklere sahip dünyalar oluşturabilirsiniz; bu dünyalar, cihaz yetenekleri aralığına göre ölçeklenirken görsel olarak dolu kalır. Daha fazla bilgi için Performansı İyileştirin başlığına bakın.
Büyük mekanları daha yönetilebilir parçalara bölmeyi ve oyuncuları bunlar arasında teleportasyon yaparak taşımayı düşünün. Bu yaklaşım, ilk katılım sürelerini azaltabilir, ancak oyuncuların bir yerden diğerine teleport olması için ek katılım süreleri getirir. Bellek kullanımına yönelik faydalar, mekanın boyutuna ve streamingi etkinleştirip etkinleştirmediğinize bağlı olarak değişir.
Performans dikkate alınmaksızın, birden fazla mekanın, özellikle oyununuzda düzenli olarak yeni içerikler ekliyorsanız veya daha büyük bir ekibin parçasıysanız, geliştirme sürecini basitleştirebileceğini görebilirsiniz.
Malzemeler ve Çoğullama
Yerleşik malzemeler, özelleştirilmiş dokulardan çok daha az bellek kullanır, ancak sanatsal vizyonunuzla uyuşmayabilir. Oyununuza merkezi olan dokular için bellek bütçesini korumak amacıyla mümkün olduğunca malzemeleri kullanmaya çalışın.
Varlıklar oluşturdukça, bunları paketlere dönüştürün. Paketleri iş akışınızın bir parçası haline getirmek, farklı kimliklere sahip tekrar eden varlıklar gibi yaygın bir sorunu önlemeye yardımcı olur; bu durum performansı olumsuz etkileyebilir.
Mesh ve dokuları eklerken, bunları kullanın ve yeniden kullanın, tekrar eden kopyalar içe aktarmaktan kaçının. Yeniden boyutlandırarak, döndürerek ve üst üste koyarak, çok az çizim çağrısı gerektiren zengin ve çeşitli ortamlar oluşturabilirsiniz. Daha fazla bilgi için Tekrar Eden Dokuları Kaldırın başlığına 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, yüksek şeffaflık aşırı çizimi önlemek için özellikle dikkatli olun.
Scripting
Mümkünse, çerçeve başına hesaplamalar yerine olay temelli kod yazın. 60 FPS'de, her çerçeve için toplam bütçe 16.67 milisaniyedir (ms). Görünüşte önemsiz olan çerçeve başına hesaplamalar bile bu bütçenin önemli bir kısmını kullanabilir.
Uzun süreli kodları yönetilebilir parçalara ayırmanın yollarını bulun. Eğer bir kod parçası 100 ms sürüyorsa ve bunu her çerçevede çalıştırıyorsanız, oyununuz yalnızca 10 FPS'de çalışabilir. Eğer kodu, aksi halde 60 FPS'de çalışan bir oyunda her saniyede bir kez çalıştırmaya karar verirseniz, 59 çerçeveniz 16.67 ms içinde gelir... ve ardından 100 ms sonra bir tane gelir ki bu da karmaşık bir takılma yaratır.
Bunun yerine, kodu nasıl parçalara ayırabileceğinizi araştırın. Belki her çerçevede 5 ms işlem yapabilir, task.wait() kullanabilir ve 20 çerçevede bir tamamlanan hesaplama alırken yine de 60 FPS'yi koruyabilirsiniz. Çok İşlemli (bazen Paralel Luau olarak anılır) de yardımcı olabilir.
Gereksiz yere bir olay tetiklendiğinde fonksiyonların çağrılmamasını sağlamak için RBXScriptConnection:Disconnect() yöntemini kullanın.
Bir değere ihtiyacınız olduğunda aynı yöntemi her seferinde çağırmayın. Yöntemi bir kez çağırın, değeri saklayın ve sonra gerektiğinde üstünü değiştirin.
Her şeyi ReplicatedStorage içine saklamayın. Bu kapsayıcıda olan her şey istemci tarafından yüklenir. Bunun yerine, istemcinin erişim ihtiyacı olmadığı her şey için ServerStorage kullanın.