นำเสนอโดย Backtrace

เมื่อพูดถึงการตรวจสอบการสร้างเกม Unity เพื่อหาปัญหาหน่วยความจำที่อาจเกิดขึ้น โมดูลตัวสร้างโปรไฟล์หน่วยความจำ Unity เป็นเครื่องมือที่สำคัญ แม้ว่า Memory Profiler ในตัวภายใต้หน้าต่าง Profiler จะให้ข้อมูลพื้นฐานเกี่ยวกับหน่วยความจำแก่คุณ แต่คุณสามารถใช้แพ็คเกจ Memory Profiler ที่ดาวน์โหลดเพิ่มเติมเพื่อวิเคราะห์การใช้หน่วยความจำของเกมโดยละเอียดได้ เมื่อรวมกับความสามารถของ Backtrace ในการตรวจจับปัญหาหน่วยความจำไม่เพียงพอบนแพลตฟอร์มมือถือ คุณสามารถค้นหาและแก้ไขปัญหาได้อย่างมีประสิทธิภาพก่อนที่จะทำลายประสิทธิภาพของเกมและส่งผลกระทบต่อประสบการณ์การเล่นเกม

โมดูลตัวสร้างโปรไฟล์หน่วยความจำ Unity

สามารถติดตั้งโมดูล Unity Memory Profiler ในโครงการ Unity ใดก็ได้เพื่อตรวจจับและแก้ไขการรั่วไหลของหน่วยความจำ ลด ANR ค้างและหยุดทำงาน และเพิ่มประสิทธิภาพเวลาในการโหลดเกม เมื่อรวมกับ Backtrace คุณไม่เพียงแต่สามารถปรับปรุงประสิทธิภาพบนอุปกรณ์ที่ช้ากว่าเท่านั้น แต่ยังกำหนดเป้าหมายไปยังอุปกรณ์ที่ก่อนหน้านี้ไม่สามารถเข้าถึงได้เนื่องจากความต้องการหน่วยความจำที่สูงกว่า ซึ่งนำไปสู่การขายที่เพิ่มขึ้นและการรักษาลูกค้าที่ดีขึ้น

ภาพรวมหน่วยความจำ

หนึ่งในคุณสมบัติที่มีประโยชน์ที่สุดของ Memory Profiler คือความสามารถในการถ่ายภาพสแนปช็อตของจุดต่างๆ ในช่วงเวลาระหว่างการเล่นเกม ตัวสร้างโปรไฟล์หน่วยความจำช่วยให้คุณจัดเก็บและเปรียบเทียบสแน็ปช็อตเพื่อตรวจสอบแหล่งที่มาที่เป็นไปได้ของ หน่วยความจำรั่ว โดยใช้เครื่องมือที่มีลักษณะคล้าย ‘diff’

เมื่อเปรียบเทียบสแน็ปช็อตสองภาพ คุณอาจพบปัญหาที่ตรวจไม่พบก่อนหน้านี้ ตัวอย่างเช่น หากตรวจพบวัตถุใหม่ๆ ในฉากที่สองมากกว่าฉากแรก นั่นอาจบ่งชี้ถึงการรั่วไหลของหน่วยความจำ นอกจากนี้ คุณสามารถเปรียบเทียบสแน็ปช็อตทั้งสองเพื่อดูว่าสแน็ปช็อตที่สองใช้หน่วยความจำมากกว่าอันแรกมากหรือไม่ และดำเนินการตามความเหมาะสมเพื่อแก้ไขการรั่วไหล

แผนที่ต้นไม้

คุณสมบัติที่มีประโยชน์อีกอย่างของ Memory Profiler Module คือ Tree Map ช่วยให้คุณเห็นภาพว่าเนื้อหาใดที่ใช้ในฉากใช้หน่วยความจำมากที่สุด ดังนั้นจึงสามารถใช้แผนผังต้นไม้เพื่อตรวจสอบและเพิ่มประสิทธิภาพรอยเท้าหน่วยความจำของเกมของคุณได้อย่างรวดเร็ว หากคุณเห็นว่ามีเนื้อหาบางอย่าง เช่น พื้นผิวที่กินพื้นที่หน่วยความจำของคุณไปมาก ก็ตรวจสอบเพิ่มเติมได้ บนอุปกรณ์พกพา การกำกับดูแลทั่วไปอย่างหนึ่งคือการลืมการบีบอัดพื้นผิวที่ไม่ได้บีบอัดที่นำเข้า

การกระจายตัวของหน่วยความจำ

ขึ้นอยู่กับประเภทบิลด์และความซับซ้อนของเกม การกระจายตัวของหน่วยความจำในที่สุดอาจทำให้แอปพลิเคชันมีหน่วยความจำไม่เพียงพอ (OOM) แม้ว่าแอปพลิเคชันจะมีหน่วยความจำไม่เพียงพอ แต่ก็อาจทำให้เกิดการเรียกใช้ Garbage Collector และ/หรือการขยายตัวของฮีปบ่อยครั้งโดยไม่จำเป็น ซึ่งอาจส่งผลให้ประสิทธิภาพของเกมลดลง เครื่องมือการกระจายตัวของหน่วยความจำช่วยให้คุณตรวจสอบวิธีการจัดสรรหน่วยความจำและขอบเขตของหน่วยความจำที่ถูกแยกส่วน คุณสามารถใช้ข้อมูลนี้เพื่อเพิ่มประสิทธิภาพเกมของคุณเพิ่มเติมโดยการปรับโครงสร้างโค้ดที่ลดการกระจายตัวของหน่วยความจำ ตัวอย่างเช่น การใช้คอลเล็กชันและอาร์เรย์ซ้ำแทนการสร้างคอลเล็กชันใหม่ สามารถลดการกระจายตัวของหน่วยความจำได้

ปัญหาทั่วไปที่นำไปสู่การรั่วไหลของหน่วยความจำ

มีหลายวิธีที่อาจเกิดการรั่วไหลของหน่วยความจำ แต่ต่อไปนี้เป็นวิธีที่พบได้บ่อยที่สุด:

การใช้ GameObjects ถาวร

หนึ่งในการกำกับดูแลที่พบบ่อยที่สุดซึ่งนำไปสู่การรั่วไหลของหน่วยความจำคือการใช้อ็อบเจกต์เกมต่อเนื่องอย่างไม่เหมาะสม บ่อยครั้ง นักพัฒนาอาจใช้คลาส Singleton หรือทำเครื่องหมายคอมโพเนนต์เป็น DontDestroyOnLoad. แม้ว่าสถาปัตยกรรมเกมของคุณอาจต้องใช้คลาสบางคลาสเพื่อคงอยู่ในฉากต่างๆ แต่ก็อาจนำไปสู่การรั่วไหลของหน่วยความจำได้เช่นกัน หากออบเจกต์ที่อ้างอิงโดยคลาสถาวรไม่ได้ถูกยกเลิกการโหลด หน่วยความจำรั่วเหล่านั้นอาจสะสมอย่างรวดเร็ว และเกมของคุณอาจเสี่ยงต่อการใช้หน่วยความจำไม่เพียงพอ อีกสถานการณ์หนึ่งที่อาจนำไปสู่การรั่วไหลของหน่วยความจำคือเมื่อผู้ใช้จัดสรรวัตถุหรือทรัพยากรไม่ถูกโหลดหรือล้างหลังจากยกเลิกการโหลดฉาก.

วางไข่โดยไม่มีการจัดการวัตถุที่เหมาะสม

ข้อผิดพลาดที่พบบ่อยที่สุดที่นักพัฒนาเกมมือใหม่อาจทำคือการใช้ ยกตัวอย่าง วัตถุแต่กลับลืมที่จะทำลายมัน ในช่วงเวลาหนึ่ง การสร้างอินสแตนซ์ของวัตถุอย่างต่อเนื่องอาจทำให้เกมมีหน่วยความจำไม่เพียงพอ ในทำนองเดียวกัน การใช้ระบบอนุภาคที่สร้างอนุภาคมากเกินไปหรืออนุภาคที่วางไข่ในลูปการอัพเดทอาจทำให้ประสิทธิภาพการทำงานลดลงและความเสี่ยงที่หน่วยความจำไม่เพียงพอ

เคล็ดลับมือโปร: เป็นที่น่าสังเกตว่า หากคุณทำซ้ำวงจรของการวางไข่และทำลายวัตถุในเกม (หรือวัตถุในเกมที่มีเอฟเฟกต์อนุภาค) บ่อยมาก ให้พิจารณาใช้ระบบ Object Pooling เพื่อลดโอกาสที่ Garbage Collector (GC) จะถูกเรียกใช้บ่อยครั้ง (เนื่องจาก อาจทำให้ประสิทธิภาพลดลง)

การใช้เหตุการณ์ที่ไม่เหมาะสม

ในโครงการเกมจำลองสถานการณ์แบบเรียลไทม์ของเกม VR ที่ดูแลโดยผู้เขียน เกมจะช้าลงเรื่อย ๆ หลังจากผ่านไปสองสามวันในเกม และในที่สุดเกมจะหยุดทำงาน (แอปพลิเคชันไม่ตอบสนอง/ANR) การวินิจฉัยเบื้องต้นพบว่าแอปพลิเคชันมีหน่วยความจำไม่เพียงพอ อย่างไรก็ตาม วิธีการแก้ปัญหาแบบดั้งเดิมของเกมกลับล้มเหลว เนื่องจากโค้ดปรากฏขึ้นเพื่อทำเครื่องหมายที่ช่องด้านขวาทั้งหมด เช่น การใช้ระบบการรวมออบเจกต์และการปรับพื้นผิวให้เหมาะสมและเนื้อหาอื่นๆ ที่โหลด หลังจากนั้น ผู้เขียนได้แนะนำให้ติดตั้งตัวสร้างโปรไฟล์หน่วยความจำเพื่อสแนปช็อตสองอินสแตนซ์ของวันในเกมเพื่อวิเคราะห์การใช้หน่วยความจำและตรวจสอบแหล่งที่มาของปัญหา ปรากฎว่าเหตุการณ์ถูกลงทะเบียนโดยสองสคริปต์ที่แตกต่างกัน แต่มีเพียงสคริปต์เดียวเท่านั้นที่ยกเลิกการลงทะเบียนเหตุการณ์ ซึ่งเก็บวัตถุไว้ในหน่วยความจำแม้ว่าฉากจะถูกยกเลิกการโหลด ซึ่งนำไปสู่ ​​OOM

ตรวจสอบปัญหาหน่วยความจำด้วย Backtrace

แม้ว่าจะมีข้อดีหลายประการในการใช้ Memory Profiler Module ที่ดาวน์โหลดได้เพื่อแก้ปัญหาและป้องกันปัญหาเกี่ยวกับหน่วยความจำในระหว่างขั้นตอนการพัฒนา การเพิ่ม Backtrace ให้กับโปรเจ็กต์ของคุณช่วยปกป้องโปรเจ็กต์ของคุณเพิ่มเติมโดยอนุญาตให้คุณระบุปัญหาที่ตรวจไม่พบก่อนหน้านี้ในระหว่างช่วงการพัฒนาและการทดสอบการเล่น Backtrace ช่วยให้คุณตรวจหาข้อยกเว้นของแอปพลิเคชันไม่ตอบสนอง (ANR) และข้อยกเว้นหน่วยความจำไม่เพียงพอ (OOM) บนอุปกรณ์พกพา ดังนั้นคุณจึงสามารถเจาะลึกปัญหาหน่วยความจำเพิ่มเติมได้โดยใช้ Backtrace ควบคู่กับ Memory Profiler เพื่อค้นหา แก้ไขปัญหา และแก้ไขปัญหาเกี่ยวกับหน่วยความจำก่อน พวกเขาออกไปจากมือ

คอยติดตามบล็อกถัดไปเกี่ยวกับวิธีการกำหนดค่า Backtrace เพื่อตรวจหาข้อยกเว้น OOM ในบิลด์มือถือ!

ตรวจสอบทรัพยากรด้านล่างเพื่อเรียนรู้เพิ่มเติมเกี่ยวกับ Memory Profiler และวิธีการติดตั้งในโครงการ Unity ถัดไปของคุณ

ลอง Backtrace วันนี้เพื่อเริ่มตรวจหาข้อผิดพลาด ปัญหาเกี่ยวกับหน่วยความจำ และ ANR ก่อนที่จะทำลายประสบการณ์การเล่นเกมของลูกค้า

Backtrace คือ Unity VSP (Verified Solution Partner) เรียนรู้เพิ่มเติมเกี่ยวกับวิธีที่เราทำงานร่วมกับ Unity และ ลงทะเบียนฟรี วันนี้:

กำหนดการสาธิต

ทรัพยากร

Unity Memory Profiler

Recommended Posts