Bu yürüme, bir deneyimin problematik bir yönünü bulmak için MicroProfiler'ı nasıl kullanacağınızı gösterir ve kök nedeni belirlemek için. Deneyimi indirin, Stüdyo'dan Açık Dosya ile aç ve takip edin.
Problemi Tanımlama
Stüdyo'da deneyimi açtıktan sonra, şunlardan biri ile test etmeyi başlat: F5 veya Oyna düğmesi.
Kare hızının bu boyut ve çevre için gereken kadar pürüzsüz olduğunu hissediyor, ancak bir deneyimin bu boyut ve çevresi için gereken kadar pürüzsüz olmadığını gösteren Görüntü sekmesine ve İstatistikler altındaki Özet tıklamalarına.
Görüntü kare hızının saniyede 60'ın altında olduğunu (FPS) unutun.
MicroProfiler'ı açmak için CtrlAltF6 ( ⌘1> ⌥1> 3> F63> )'i basılı tutun.
Çerçevelerin zamanları tutarlı - çubuklar küçük bir yüksekliğindedir - bu yüzden düşük çerçevelerin hızlı yanıtını yapmak için her çerçevenin tek bir kareyi yüklemesi yerine her kareyi yüklemesi gerekir.
MicroProfiler'ı durdurmak için CtrlP ( ⌘P )'i basılı tut. Klavye kısayoluyla durdurulmasıyla 2>açık mod2> açılır.
Grafiği tıklayın ve kaydırın. İşlemci şeritlerindeki bir görevin aşırı işlem süresi kullanıyor gibi göründüğünü not edin. RunService.Stepped üzerinde fareyi gezin ve render için kaç saniye sürdüğünü not et.
Zaman çizelgesindeki üst üste yazılan çubuklar bir kod hierarşisi gösterir, bu nedenle dikkat altındaki ve altındaki katmanlarda gezinmeyi deneyin.
LocalScript etiketini, öğrenimin adını gösteren ve Raycast etiketini, sorunun raycasting ile ilgili olabileceğini gösteren etiketleri vardır.
Problemi Çözme Etiketleri Oluşturulması
MicroProfiler'ın başlangıç noktasını sağladığından, sorunlu kodu çözebilirsiniz.
Oyun testini durdurun ve Explorer penceresini localscript için filtreleyin, dosyayı bulmak için.
raycast için bir arama, bu kod bölümünün muhtemelen deneyimin kötü sözleşme imzalamaiçin suçluyu olduğunu gösterir:
local RAYS_PER_SECOND = 1500local function onStepped()for _ = 1, RAYS_PER_SECOND dolocal startPosition = getRandomPosition()local endPosition = getRandomPosition()local direction = endPosition - startPositionWorkspace:Raycast(startPosition,endPosition)endendRunService.Stepped:Connect(onStepped)Özellikle, kodun her saniye 1,500 güneş ışığını rastgele yönlerde yayıyor olduğunu görebilirsiniz.
Bu kod bölümünün rendeleme gecikmesine neden olduğunu doğrulamak için içeriği debug.profilebegin() ve debug.profileend() ile 包装 :
local function onStepped()debug.profilebegin("Raycast Spam")for _ = 1, RAYS_PER_SECOND dolocal startPosition = getRandomPosition()local endPosition = getRandomPosition()local direction = endPosition - startPositionWorkspace:Raycast(startPosition,endPosition)enddebug.profileend()end
Problemi Onaylama ve Düzeltme
Deneyimi test etmeye başlayın ve MicroProfiler'ı tekrar açın.
MicroProfiler'ın artık özel etiketi gösterdiğini ve bu işlevin aslında kök nedeni olduğunu gösteren bir not oluşturun.
Oynatma testini durdur.
onStepped() işlevini ve RunService.Stepped:Connect(onStepped) bağlantısını sil veya yorumla.
Deneyin tekrar test edilmesini başlatın ve debug istatistikleri sunumunu tekrar kontrol edin.
MicroProfiler grafiğindeki görüntü kare hızı ve eşdeğer görüntü bekleme süresi için büyük artışı göz önünde bulundurun.