การสาธิตนี้แสดงวิธีการใช้ MicroProfiler เพื่อค้นหาปัญหาที่เกิดขึ้นในประสบการณ์และระบุสาเหตุรากของมันดาวน์โหลดประสบการณ์, เปิดจากไฟล์ ใน Studio และทำตามไป
ระบุปัญหา
หลังจากที่คุณเปิดประสบการณ์ใน Studio เริ่มทดสอบโดยใช้ปุ่ม F5 หรือปุ่ม เล่น
อัตราเฟรมรู้สึกดี แต่ไม่เรียบเนียนเท่าที่ควรสำหรับประสบการณ์ขนาดและขอบเขตนี้ไปที่แท็บ ดู และคลิก สรุป ใต้ สถิติ
โปรดทราบว่าอัตราเฟรมต่ำกว่า 60 เฟรมต่อวินาที (ยิงมุมมองบุคคลที่หนึ่ง)
เปิด MicroProfiler โดยกด CtrlAltF6 ( ⌘⌥F6 ).
โปรดทราบว่าเวลากรอบคือ สอดคล้อง —แถบมีความสูงใกล้เคียงกัน—ดังนั้นสิ่งที่ทําให้อัตราเฟรมต่ําเกิดขึ้นคือการทํางานในแต่ละเฟรมที่แตกต่างกันแทนที่จะทํางานเป็นครั้งคราวและทําให้เวลาของเฟรมเพิ่มขึ้น
คลิกและลากเพื่อขยับแผ่นกราฟสังเกตว่างานหนึ่งเฉพาะในกระทู้ผู้ทำงานดูเหมือนจะใช้เวลาในการประมวลผลมากกว่ากระทู้หลักเลื่อนเมาส์ไปที่ RunService.Stepped และสังเกตว่าใช้เวลานานแค่ไหนในการเรนเดอร์
แถบซ้อนกันในเส้นเวลาบ่งบอกถึงลําดับของรหัสดังนั้นให้เลื่อนไปบนชั้นที่ต่ํากว่าและต่ํากว่าเพื่อลองระบุปัญหา
สังเกตป้ายชื่อ LocalScript ซึ่งระบุชื่อของสคริปต์ และป้ายชื่อ Raycast ซึ่งระบุว่าปัญหาอาจเกี่ยวข้องกับการส่งเรย์คาสต์
สร้างฉลากแก้ไขปัญหา
ตอนนี้ MicroProfiler ได้ให้จุดเริ่มต้นแล้วคุณสามารถแก้ไขปัญหารหัสได้
หยุดการทดสอบการเล่นและกรองหน้าต่าง Explorer สําหรับ localscript เพื่อค้นหาไฟล์
การค้นหา raycast การดำเนินการ:
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)โดยเฉพาะคุณสามารถดูได้ว่ารหัสกําลังโค้ง 1,500 รังสีต่อวินาทีในทิศทางสุ่ม
เพื่อตรวจสอบว่าส่วนหนึ่งของโค้ดนี้ทำให้เกิดความล่าช้าในการเรนเดอร์ได้ ให้ห่อเนื้อหาของฟังก์ชันด้วย debug.profilebegin() และ debug.profileend() :
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
ยืนยันและแก้ไขปัญหา
เริ่มทดสอบประสบการณ์และเปิด MicroProfiler อีกครั้ง
สังเกตว่าตอนนี้ MicroProfiler แสดงฉลากที่กําหนดเองแล้วบ่งบอกว่าฟังก์ชันนี้เป็นสาเหตุรากฐานจริงๆ
หยุดการทดสอบการเล่น
ลบหรือแสดงความคิดเห็นเกี่ยวกับฟังก์ชัน onStepped() และการเชื่อมต่อ RunService.Stepped:Connect(onStepped)
เริ่มทดสอบประสบการณ์อีกครั้ง และตรวจสอบสรุปสถิติการแก้ไขข้อผิดพลาดอีกครั้ง
สังเกตการปรับปรุงอย่างมากในอัตราเฟรมและการดรอปลงในเวลาเฟรมตามแผนภูมิ MicroProfiler