บทที่ 10: การปรับปรุงประสิทธิภาพเกมขั้นสูง

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

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


การปรับปรุงการใช้กราฟิก (Graphics Optimization)

เกมที่มีฉากใหญ่หรือรายละเอียดสูงอาจทำให้กราฟิกการ์ดทำงานหนัก ส่งผลให้เกมรันช้า การปรับปรุงการใช้กราฟิกจะช่วยให้เกมสามารถรันได้อย่างราบรื่นมากขึ้น โดยใช้เทคนิคต่าง ๆ ดังนี้:

  1. การใช้ LOD (Level of Detail)
    LOD คือการลดรายละเอียดของโมเดล 3D เมื่อผู้เล่นอยู่ห่างจากวัตถุนั้น การใช้ LOD จะช่วยลดจำนวนโพลิกอนที่ต้องแสดงผลและลดภาระการประมวลผลของกราฟิกการ์ดได้

    ขั้นตอนการใช้ LOD ใน Unity

    • ไปที่ Inspector ของโมเดล 3D ที่ต้องการปรับปรุง
    • คลิกขวาที่วัตถุ > LOD Group
    • ตั้งค่าระดับความละเอียดต่าง ๆ (เช่น LOD0 เป็นความละเอียดสูง, LOD1 เป็นความละเอียดปานกลาง)
  2. การลดขนาดของ Texture
    การใช้ Texture ที่มีขนาดใหญ่เกินไปอาจทำให้การโหลดและแสดงผลช้าลง เราสามารถลดขนาดของ Texture ได้โดยการบีบอัดไฟล์ให้เล็กลงหรือเลือกใช้ขนาดที่เหมาะสมกับการใช้งาน

    ขั้นตอนการลดขนาด Texture

    • เลือกไฟล์ Texture ใน Assets และไปที่ Inspector
    • ปรับค่าของ Max Size เพื่อลดขนาดของ Texture
  3. การใช้ Baked Lighting แทน Real-Time Lighting
    การใช้แสงแบบ Real-Time ทำให้เกิดการคำนวณแสงที่หนักหน่วง การใช้ Baked Lighting แทนจะช่วยลดการคำนวณแสงแบบเรียลไทม์ได้ โดยการเก็บข้อมูลแสงไว้ล่วงหน้า

    ขั้นตอนการใช้ Baked Lighting

    • ไปที่ Lighting Settings > ตั้งค่าแสงที่ต้องการและเลือก Baked Global Illumination
    • จากนั้นกด Generate Lighting เพื่อให้ Unity คำนวณแสงล่วงหน้า

การปรับปรุงประสิทธิภาพของฟิสิกส์ (Physics Optimization)

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

  1. การใช้ Simplified Colliders
    ในกรณีที่วัตถุมีรูปร่างซับซ้อน เราสามารถใช้ Collider แบบง่าย ๆ เช่น Box Collider หรือ Sphere Collider แทนการใช้ Mesh Collider ซึ่งจะช่วยลดการคำนวณฟิสิกส์ได้

    ขั้นตอนการใช้ Simplified Colliders

    • เลือกวัตถุที่ต้องการปรับปรุง ไปที่ Inspector
    • แทนที่ Mesh Collider ด้วย Box Collider หรือ Sphere Collider
  2. การลดความถี่ของการตรวจจับการชน (Collision Detection Frequency)
    การตรวจจับการชนแบบต่อเนื่อง (Continuous Collision Detection) อาจทำให้เกมทำงานช้าลง โดยเฉพาะถ้ามีวัตถุเคลื่อนที่เร็ว การลดการตรวจจับการชนเป็นแบบ Discrete จะช่วยลดภาระในการคำนวณได้

    การตั้งค่า Collision Detection

    • เลือกวัตถุที่มี Rigidbody ไปที่ Inspector
    • ในฟิลด์ Collision Detection เลือก Discrete แทนที่จะใช้ Continuous

การปรับปรุงการใช้หน่วยความจำ (Memory Management)

หน่วยความจำที่ใช้ในเกมมีผลโดยตรงต่อประสิทธิภาพของเกม การจัดการหน่วยความจำที่ดีจะช่วยป้องกันปัญหาเกมกระตุกหรือตกเฟรม

  1. การลบวัตถุที่ไม่ใช้งาน (Destroy Unused Objects)
    เมื่อวัตถุไม่ได้ใช้งานแล้ว เช่น ไอเท็มที่ถูกเก็บหรือศัตรูที่ถูกทำลาย ควรทำการลบวัตถุเหล่านั้นออกจากเกมเพื่อประหยัดหน่วยความจำ

    ตัวอย่างโค้ดการลบวัตถุ

    
    void OnTriggerEnter(Collider other)
    {
        if (other.gameObject.tag == "Item")
        {
            Destroy(other.gameObject); // ลบไอเท็มที่ถูกเก็บ
        }
    }
    
    
  2. การใช้ Object Pooling
    สำหรับวัตถุที่มีการสร้างและทำลายบ่อย ๆ เช่น กระสุนหรือศัตรู เราสามารถใช้ Object Pooling เพื่อเก็บวัตถุที่สร้างไว้แล้วใช้ซ้ำแทนการสร้างและทำลายวัตถุใหม่ ซึ่งจะช่วยลดการใช้หน่วยความจำและการประมวลผลได้

    การตั้งค่า Object Pooling

    • สร้างคลาส Object Pool เพื่อเก็บวัตถุที่ใช้ซ้ำ
    • เมื่อไม่ใช้วัตถุแล้ว ให้เก็บวัตถุไว้ใน Object Pool แทนที่จะลบทิ้ง

การใช้เครื่องมือวิเคราะห์ประสิทธิภาพ (Profiler)

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

ขั้นตอนการใช้ Profiler ใน Unity

  1. ไปที่ Window > Analysis > Profiler เพื่อเปิดหน้าต่าง Profiler
  2. กดปุ่ม Record เพื่อเริ่มบันทึกการทำงานของเกม
  3. เล่นเกมและดูการทำงานในแต่ละส่วน เช่น CPU Usage, Memory Usage, และ Rendering ว่าส่วนไหนที่ใช้ทรัพยากรมากที่สุด

การใช้ Profiler จะช่วยให้เราสามารถหาจุดที่ต้องปรับปรุงประสิทธิภาพได้อย่างรวดเร็วและแม่นยำ


การปรับปรุงประสิทธิภาพในโค้ด (Code Optimization)

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

  1. การใช้การเก็บข้อมูลไว้ในตัวแปร (Caching Data)
    เมื่อมีการเข้าถึงข้อมูลที่ต้องการการคำนวณหลายครั้ง เช่น ตำแหน่งของวัตถุ ควรเก็บข้อมูลนั้นไว้ในตัวแปรเพื่อลดการคำนวณซ้ำ

    ตัวอย่างโค้ดการเก็บข้อมูลไว้ในตัวแปร

    
    void Update()
    {
        Vector3 playerPosition = player.transform.position; // เก็บค่าตำแหน่งของผู้เล่นไว้ในตัวแปร
        // ใช้ playerPosition ซ้ำหลายครั้งโดยไม่ต้องคำนวณใหม่ทุกครั้ง
    }
    
    
  2. การใช้ Coroutine แทนการทำงานในทุกเฟรม
    หากมีการทำงานที่ไม่จำเป็นต้องทำในทุกเฟรม ควรใช้ Coroutine แทนการทำงานในฟังก์ชัน Update() เพื่อประหยัดการประมวลผล

    ตัวอย่างการใช้ Coroutine


IEnumerator CheckPlayerHealth()
{
    while(true)
    {
        // ตรวจสอบพลังชีวิตของผู้เล่นทุก ๆ 1 วินาที
        yield return new WaitForSeconds(1f);
    }
}

การตั้งค่า Quality Settings ใน Unity

Unity มีการตั้งค่าคุณภาพกราฟิก (Quality Settings) ที่ช่วยให้เราสามารถปรับระดับความละเอียดและการแสดงผลให้เหมาะสมกับประสิทธิภาพของอุปกรณ์ที่ใช้รันเกม

ขั้นตอนการตั้งค่า Quality Settings

  1. ไปที่ Edit > Project Settings > Quality
  2. เลือกโปรไฟล์คุณภาพที่เหมาะสม เช่น การลดคุณภาพของ Texture, การปิดการใช้งาน Shadow หรือการลดคุณภาพของ Anti-aliasing
  3. ตั้งค่าระดับคุณภาพที่หลากหลาย เพื่อให้ผู้เล่นสามารถเลือกปรับตามความสามารถของเครื่องตนเองได้

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

Free Joomla templates by Ltheme