Skip to content

Viết bài hướng dẫn sử dụng Coroutine trong Unity 3D qua ví dụ

  • by

1. Coroutine là gì?

Coroutine là một phương thức đặc biệt trong Unity cho phép bạn tạm dừng thực thi code và tiếp tục nó sau một khoảng thời gian. Nó rất hữu ích cho các tác vụ cần thời gian như animation, loading, hoặc thực hiện các hành động theo sequence.

2. Cách tạo và sử dụng Coroutine

Dưới đây là ví dụ cơ bản về cách tạo và sử dụng Coroutine:

using UnityEngine;
using System.Collections;

public class CoroutineExample : MonoBehaviour
{
    void Start()
    {
        // Cách gọi một coroutine
        StartCoroutine(SimpleCoroutine());
    }

    IEnumerator SimpleCoroutine()
    {
        Debug.Log("Bắt đầu coroutine");
        yield return new WaitForSeconds(2f);  // Đợi 2 giây
        Debug.Log("Sau 2 giây");
    }
}

3. Ví dụ thực tế: Di chuyển object

Ví dụ sau đây minh họa cách sử dụng Coroutine để di chuyển một object trong Unity:

public class MoveObject : MonoBehaviour
{
    public float moveDistance = 5f;
    public float duration = 2f;

    void Start()
    {
        StartCoroutine(MoveOverTime());
    }

    IEnumerator MoveOverTime()
    {
        Vector3 startPosition = transform.position;
        Vector3 endPosition = startPosition + Vector3.right * moveDistance;
        float elapsedTime = 0f;

        while (elapsedTime < duration)
        {
            elapsedTime += Time.deltaTime;
            float progress = elapsedTime / duration;
            
            transform.position = Vector3.Lerp(startPosition, endPosition, progress);
            yield return null;  // Đợi đến frame tiếp theo
        }

        transform.position = endPosition;
    }
}

4. Các loại yield return phổ biến

Unity cung cấp nhiều loại yield return khác nhau cho các mục đích khác nhau:

  • yield return null: Đợi đến frame tiếp theo
  • yield return new WaitForSeconds(float): Đợi một khoảng thời gian cụ thể
  • yield return new WaitForFixedUpdate(): Đợi đến fixed update tiếp theo
  • yield return new WaitUntil(() => condition): Đợi đến khi điều kiện thỏa mãn

5. Dừng Coroutine

Có hai cách để dừng Coroutine trong Unity:

void StopCoroutineExample()
{
    // Dừng một coroutine cụ thể
    StopCoroutine(MoveOverTime());
    
    // Dừng tất cả coroutine
    StopAllCoroutines();
}

Lưu ý quan trọng

  • Coroutine chỉ chạy khi GameObject đang active
  • Coroutine sẽ tự động dừng khi GameObject bị destroy
  • Nên sử dụng StopCoroutine khi không cần thiết nữa để tối ưu hiệu năng

Leave a Reply

Your email address will not be published. Required fields are marked *