Performans için tasarım, deneyiminizi oluştururken bir avuç en iyi uygulamayı takip etmek demektir çünkü bunu yaparsınız .Geliştirme sürecinde daha sonra performans sorunlarını bulup düzeltmeye kıyasla, erken performans için tasarım yapmak size çok fazla zaman ve çaba tasarrufu sağlayabilir.
Düşük seviye cihazlar
Düşük seviye cihazlar, özellikle mobil cihazlar, ağır hafıza sınırlarına sahiptir ve hafızadan çıkma (OOM) hataları nedeniyle kazalara karşı savunmasızdır:
Daha düşük seviyeli cihazları desteklemek istiyorsanız, en az bir "temel" cihaz seçin, deneyiminizi geliştirme sürecinde boyunca test edin ve çerçeve oranı ve hafıza kullanımına dikkat edin.Deneyiminizde sorun alanları buldukça, bu alanları kullanarak cihazınızın sınırlarını tanımlayın.
Örneğin, Render ( ShiftF2 ) ve Özet ( ShiftF2 ) deneysel istatistiklerin açık olduğu bir deneyimi test edebilirsiniz.Eğer çerçeve oranı özellikle kalabalık bir alanda düşmeye başlarsa, Çek (sahne) sayılarını inceleyebilir ve deneyinin temel cihazınızda iyi çalışması için 1,000 çekme çağrısı ve 1,000,000 üçgenin altında kalmanız gerektiğini belirleyebilirsiniz.
Veya Geliştirici Konsolunu ( F9 ) inceleyebilir ve hafıza kullanımının yayın akışını etkinleştirmedikçe biraz yüksek olduğunu not edebilirsiniz.Cihaz sınırlarının açık bir anlayışına sahip olmak, deneyiminizi inşa etmeye devam ederken onlara uymaya yardımcı olabilir.
Roblox Studio'daki cihaz emülatörü, yön oranını ve kontrolleri kontrol etmek için yararlıdır, ancak hafıza kullanımı için doğru değildir; Studio'da bir deneyimi test ederken, sunucu ve istemci çalıştırır, bu yüzden hafıza kullanımı önemli ölçüde daha yüksektir.
Daha genel olarak, çeşitli cihazlarda test yapmak, deneyimin farklı grafik kalite seviyelerindeki görsel ve performans beklentilerinize uyup uymadığını kontrol etmenize yardımcı olabilir.Deneyiminizi düşük seviye mobil cihazlar için optimize etmeyi nasıl düşünebileceğiniz konusunda çok daha ayrıntılı bir örnek için, Gerçek Dünya İnşaat ve Kodlama Optimizasyonu bakın.
Yayın ve ışınlanma
İstemci yayını Roblox, 3B içeriği dinamik olarak yükler ve yükler ve çoğu yer için, özellikle daha büyük olanlar için harika bir seçenek.Yayın, katılma sürelerini geliştirir, hafıza ayak izini azaltır ve çerçeve oranını artırır.Daha fazla bilgi için, Performansı artır bakın.
Büyük yerleri daha yönetilebilir parçalara ayırmayı ve oyuncuları aralarında hareket etmek için ışınlanmayı kullanmayı düşünün.Bu yaklaşım ilk katılma sürelerini azaltabilir , ancak oyuncuların yerden yere ışınlanmasıyla ek katılma süreleri getirir.Hafıza kullanımındaki yararlar, yerin büyüklüğüne ve yayının etkinleştirilip etkinleştirilmediğine bağlı olarak değişir.
Performans göz önünde bulundurulmadan bile, çok sayıda yerin bulunması geliştirme sürecini basitleştirdiğini görebilirsiniz, özellikle deneyime yeni içerikler ekliyor veya daha büyük bir ekibin parçasıysanız.
Malzemeler ve kopyalama
Yerleşik malzemeler özel dokulara kıyasla çok daha az bellek kullanır, ancak sanatsal vizyonunuza uymayabilir.Deneyiminizin merkezindeki dokular için bellek bütçesini korumak için mümkün olduğunca malzemeleri kullanmayı deneyin.
Varlıklar oluşturdukça, onları paketlere dönüştürün.Paketleri iş akışınızın bir parçası yapmak, performansı zarar verebilecek farklı kimliklerdeki yinelenen varlıkların ortaya çıkmasını engeller.
Dokular ve dokular eklediğinizde, yinelenen kopyaları ithal etmek yerine onları kullanın ve yeniden kullanın.Yeniden boyutlandırarak, döndürerek ve üst üste getirerek, çok az çekme çağrısı gerektiren zengin ve çeşitli çevreler oluşturabilirsiniz çekme çağrıları.Daha fazla bilgi için, Aynı dokuları kaldır bakın.
Şeffaflık
- 0 (görünür) ve 1 (görünmez) dışında diğer saydamlık değerlerinden kaçının.Kısmi saydamlık kullandığınızda, yüksek saydamlık aşırı yüklemeden kaçınmak için özellikle dikkatli olun.
Kodlama
Mümkün olduğunda, her bir kare hesaplaması yerine olay tabanlı kod yazın.60 FPS'de, her karenin toplam bütçesi 16.67 milisaniye (ms) dir.Görünüşte hafif per-frame hesaplamalar bile bu bütçenin önemli bir kısmını kullanabilir.
Uzun süren kodu yönetilebilir parçalara ayırmanın yollarını bulun.Bir kod parçasının çalışması 100 ms sürer ve her karede çalıştırırsanız, deneyiminiz yalnızca 10 FPS'de çalışabilir.Aksi takdirde 60 FPS'de çalışan bir deneyimde sadece saniye başına bir kez kodu çalıştırmaya karar verirseniz, çerçevelerinizin 59'u 16.67 ms sonra gelir...ve ardından 100 ms sonra bir tane, bu da sarsıntılı bir kesintiye neden olur
Bunun yerine, kodu nasıl kıracağınızı araştırın.Belki her karede 5 ms çalışma yapabilir, task.wait() kullanabilir ve 60 FPS'yi korurken her 20 karede bitmiş hesap yapabilirsiniz.Çok iş parçalı yazma, bazen Paralel Luau olarak adlandırılır, ayrıca yardımcı olabilir.
Bir işlevin bir sonraki kez bir olay ateşlendiğinde gereksiz yere çağrılmamasını durdurmak için RBXScriptConnection:Disconnect() yöntemini kullanın.
Bir değere ihtiyaç duyduğunuz her seferde aynı yöntemi çağırmayın. Yöntemi bir kez çağırın, değeri saklayın ve daha sonra gerektiğinde üzerine yazın.
Her şeyi ReplicatedStorage 'de saklamayın.Müşteri, bu konteynerdeki her şeyi yükler.Bunun yerine, müşterinin erişmesi gerekmeyen her şey için ServerStorage kullanın.