บทที่ 6: การสร้างแอนิเมชันขั้นสูง

การสร้าง แอนิเมชัน (Animation) เป็นส่วนสำคัญในการทำให้ตัวละครและวัตถุในเกมดูมีชีวิตชีวาและสมจริงมากขึ้น Unity มีเครื่องมือที่เรียกว่า Animator ที่ช่วยให้เราสามารถสร้างและจัดการแอนิเมชันของตัวละครได้อย่างมีประสิทธิภาพ นอกจากแอนิเมชันพื้นฐาน เช่น การเดิน การวิ่ง หรือการกระโดด เรายังสามารถสร้างแอนิเมชันขั้นสูงที่ซับซ้อนยิ่งขึ้น เช่น การใช้ Blend Trees เพื่อเชื่อมโยงแอนิเมชันหลาย ๆ แบบเข้าด้วยกัน

ในบทนี้ เราจะเรียนรู้การสร้างแอนิเมชันขั้นสูงใน Unity โดยใช้ Animator Controller, Blend Trees, และการควบคุมแอนิเมชันผ่านโค้ด C# เพื่อให้สามารถสร้างการเคลื่อนไหวที่ราบรื่นและตอบสนองต่อการกระทำของผู้เล่นได้ดีขึ้น


การใช้ Animator Controller ในการควบคุมแอนิเมชัน

Animator Controller เป็นเครื่องมือที่ใช้ในการจัดการและควบคุมลำดับการทำงานของแอนิเมชันใน Unity โดยเราสามารถเชื่อมโยงแอนิเมชันหลายแบบเข้าด้วยกัน และสร้างการเปลี่ยนผ่าน (Transitions) ระหว่างแอนิเมชันเหล่านั้นได้อย่างราบรื่น

ขั้นตอนการสร้าง Animator Controller

  1. ไปที่ Assets > คลิกขวา > Create > Animator Controller เพื่อสร้าง Animator Controller ใหม่
  2. ตั้งชื่อตามต้องการ และลากตัวละครที่ต้องการควบคุมแอนิเมชันไปยัง Hierarchy
  3. ใน Inspector ของตัวละคร ให้เพิ่มคอมโพเนนต์ Animator และนำ Animator Controller ที่สร้างไว้ไปใส่ในฟิลด์ Controller
  4. เปิด Animator Window โดยไปที่ Window > Animation > Animator

ใน Animator Window นี้ เราสามารถสร้างการเปลี่ยนผ่านแอนิเมชัน เช่น การเปลี่ยนจากการยืนไปเป็นการเดิน หรือจากการเดินไปเป็นการวิ่ง โดยการสร้างเงื่อนไข (Conditions) เช่น เมื่อผู้เล่นกดปุ่มเดินหรือวิ่ง


การสร้างการเปลี่ยนผ่านของแอนิเมชัน (Animation Transitions)

การเปลี่ยนแอนิเมชันจากหนึ่งไปยังอีกหนึ่ง เช่น จากการยืนไปเป็นการเดิน สามารถทำได้โดยการสร้าง Transition ซึ่งจะเชื่อมโยงแอนิเมชันที่แตกต่างกัน

ขั้นตอนการสร้าง Transition

  1. เลือกแอนิเมชันหลักใน Animator Window เช่น Idle (ท่ายืน)
  2. คลิกขวาแล้วเลือก Make Transition จากนั้นลากไปยังแอนิเมชันที่ต้องการเชื่อมต่อ เช่น Walk (ท่าเดิน)
  3. คลิกที่ลูกศรของ Transition และตั้งเงื่อนไข (Conditions) ใน Inspector เช่น การใช้ตัวแปรที่ชื่อว่า Speed เพื่อควบคุมว่าเมื่อใดจะเปลี่ยนแอนิเมชัน

การใช้ตัวแปรเพื่อควบคุม Transition ตัวแปรที่ใช้ใน Animator Controller ช่วยให้เราสามารถควบคุมการเปลี่ยนผ่านของแอนิเมชันได้อย่างยืดหยุ่น เช่น การใช้ตัวแปร Speed ในการเปลี่ยนจากท่ายืนเป็นท่าเดิน

ตัวอย่างการเพิ่มตัวแปร Speed

  1. เปิด Animator Window และไปที่แถบ Parameters
  2. คลิกปุ่ม + เพื่อเพิ่มตัวแปรใหม่ เลือก Float และตั้งชื่อตัวแปรว่า Speed
  3. ในการเปลี่ยนจากท่ายืนเป็นท่าเดิน ให้สร้างเงื่อนไขว่า Speed > 0.1 จะเปลี่ยนเป็นท่าเดิน

การใช้ Blend Trees เพื่อเชื่อมโยงแอนิเมชันหลายแบบ

Blend Trees เป็นเครื่องมือที่ช่วยให้เราสามารถเชื่อมโยงแอนิเมชันหลายแบบเข้าด้วยกันอย่างราบรื่น เช่น การเปลี่ยนจากท่าเดินไปเป็นท่าวิ่ง โดยขึ้นอยู่กับค่าของตัวแปรที่ใช้ควบคุมแอนิเมชัน เช่น ความเร็ว (Speed)

ขั้นตอนการสร้าง Blend Trees

  1. เปิด Animator Window คลิกขวาเลือก Create State > From New Blend Tree
  2. ดับเบิลคลิกที่ Blend Tree เพื่อเข้าไปยังหน้าต่างการตั้งค่า
  3. ใน Blend Tree ให้คลิก + Add Motion เพื่อเพิ่มแอนิเมชันต่าง ๆ เช่น ท่าเดิน (Walk) และท่าวิ่ง (Run)
  4. กำหนดตัวแปรควบคุม เช่น Speed โดยค่าความเร็วที่เพิ่มขึ้นจะทำให้แอนิเมชันเปลี่ยนจากเดินไปวิ่ง

ตัวอย่างโค้ดการควบคุม Blend Trees


using UnityEngine;

public class PlayerMovement : MonoBehaviour
{
    public Animator animator;
    public float moveSpeed = 5f;

    void Update()
    {
        float speed = Input.GetAxis("Vertical") * moveSpeed;
        animator.SetFloat("Speed", Mathf.Abs(speed)); // ตั้งค่า Speed เพื่อควบคุม Blend Tree

        // การเคลื่อนไหวของตัวละคร
        transform.Translate(0, 0, speed * Time.deltaTime);
    }
}

คำอธิบายโค้ด

  • ตัวแปร Speed ใช้ควบคุมการเปลี่ยนแปลงระหว่างท่าเดินและท่าวิ่งใน Blend Tree โดยการตั้งค่าตามการเคลื่อนไหวของผู้เล่น
  • ฟังก์ชัน SetFloat() ถูกใช้เพื่ออัปเดตค่าของตัวแปร Speed ใน Animator Controller

การควบคุมแอนิเมชันผ่านโค้ด C#

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

ตัวอย่างโค้ดการควบคุมแอนิเมชันด้วยโค้ด C#


using UnityEngine;

public class PlayerController : MonoBehaviour
{
    public Animator animator;

    void Update()
    {
        if (Input.GetKeyDown(KeyCode.Space))
        {
            animator.SetTrigger("Jump"); // เรียกแอนิเมชันกระโดดเมื่อกดปุ่ม Space
        }

        if (Input.GetKeyDown(KeyCode.LeftShift))
        {
            animator.SetBool("isRunning", true); // เรียกแอนิเมชันท่าวิ่งเมื่อกดปุ่ม Shift
        }
        else if (Input.GetKeyUp(KeyCode.LeftShift))
        {
            animator.SetBool("isRunning", false); // กลับสู่ท่าเดินเมื่อปล่อยปุ่ม Shift
        }
    }
}

คำอธิบายโค้ด

  • ฟังก์ชัน SetTrigger() ใช้เพื่อเรียกแอนิเมชันเมื่อเกิดเหตุการณ์เฉพาะ เช่น การกระโดด
  • ฟังก์ชัน SetBool() ใช้เพื่อเปิดหรือปิดการแสดงผลแอนิเมชัน เช่น การวิ่งและการหยุดวิ่ง

การจัดการการเปลี่ยนผ่านของแอนิเมชันตามสถานะของเกม (Game States)

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

ตัวอย่างโค้ดการควบคุมแอนิเมชันตามสถานะของเกม


using UnityEngine;

public class PlayerHealth : MonoBehaviour
{
    public Animator animator;
    public int health = 100;

    void Update()
    {
        if (health <= 0)
        {
            animator.SetTrigger("Die"); // เรียกแอนิเมชันตัวละครตายเมื่อพลังชีวิตหมด
        }
    }

    public void TakeDamage(int damage)
    {
        health -= damage;
        if (health > 0)
        {
            animator.SetTrigger("Hurt"); // แสดงแอนิเมชันเมื่อได้รับบาดเจ็บ
        }
    }
}

ในโค้ดนี้ เมื่อพลังชีวิตของผู้เล่นหมด ตัวละครจะเข้าสู่แอนิเมชันการตาย หากได้รับความเสียหายแต่ยังไม่ตาย ตัวละครจะแสดงแอนิเมชันบาดเจ็บ


บทที่ 6 นี้ช่วยให้นักเรียนได้เรียนรู้วิธีการสร้างแอนิเมชันขั้นสูงใน Unity โดยใช้ Animator Controller, Blend Trees, และการควบคุมแอนิเมชันผ่านโค้ด C# การเข้าใจวิธีการทำงานของแอนิเมชันจะช่วยให้ตัวละครและเกมมีความน่าสนใจและสมจริงมากขึ้น


Free Joomla templates by Ltheme