Triển khai tốc độ cập nhật tùy chỉnh trong Unity

Để triển khai tốc độ cập nhật tùy chỉnh trong Unity, bạn có thể tạo một tập lệnh riêng để quản lý vòng lặp cập nhật của riêng mình bằng coroutine hoặc các phương pháp khác. Đây là một ví dụ cơ bản về cách bạn có thể đạt được điều này:

using UnityEngine;

public class CustomUpdateManager : MonoBehaviour
{
    public float updateInterval = 0.1f; // Customize your update interval here

    private float timeSinceLastUpdate;

    private void Start()
    {
        timeSinceLastUpdate = 0f;
        StartCoroutine(CustomUpdateLoop());
    }

    private IEnumerator CustomUpdateLoop()
    {
        while (true)
        {
            // Custom update loop
            UpdateLogic();

            // Wait for the specified interval
            yield return new WaitForSeconds(updateInterval);
        }
    }

    private void UpdateLogic()
    {
        // Your custom update logic goes here
        Debug.Log("Custom Update");

        // For example, move an object
        transform.Translate(Vector3.forward * Time.deltaTime);
    }
}
  • Đính kèm tập lệnh ở trên vào GameObject trong cảnh của bạn. Tập lệnh này tạo một vòng lặp cập nhật tùy chỉnh thực thi 'UpdateLogic()' tại một khoảng thời gian được chỉ định ('updateInterval').

Bạn có thể điều chỉnh 'updateInterval' để kiểm soát tần suất 'UpdateLogic()' được gọi. Khoảng thời gian nhỏ hơn sẽ dẫn đến cập nhật thường xuyên hơn, trong khi khoảng thời gian lớn hơn sẽ dẫn đến cập nhật ít thường xuyên hơn.

Cách tiếp cận này đảm bảo rằng logic tùy chỉnh của bạn được tách rời khỏi phương thức 'Update()' tích hợp sẵn của Unity và cho phép bạn kiểm soát tốt hơn tốc độ cập nhật.

Hãy nhớ điều chỉnh khoảng thời gian theo nhu cầu của bạn và yêu cầu về hiệu suất của dự án. Các bản cập nhật rất thường xuyên có thể ảnh hưởng đến hiệu suất, vì vậy hãy sử dụng chúng một cách thận trọng.

Mẹo tối ưu hóa

Việc khởi tạo trước 'WaitForSeconds' bên ngoài vòng lặp để tránh tạo phiên bản mới trong mỗi khung có thể cải thiện hiệu suất. Đây là cách bạn có thể sửa đổi tập lệnh để khởi tạo trước 'WaitForSeconds':

using UnityEngine;

public class CustomUpdateManager : MonoBehaviour
{
    public float updateInterval = 0.1f; // Customize your update interval here

    private float timeSinceLastUpdate;
    private WaitForSeconds waitForSeconds;

    private void Start()
    {
        timeSinceLastUpdate = 0f;
        waitForSeconds = new WaitForSeconds(updateInterval); // Pre-initialize WaitForSeconds
        StartCoroutine(CustomUpdateLoop());
    }

    private IEnumerator CustomUpdateLoop()
    {
        while (true)
        {
            // Custom update loop
            UpdateLogic();

            // Wait for the pre-initialized WaitForSeconds
            yield return waitForSeconds;
        }
    }

    private void UpdateLogic()
    {
        // Your custom update logic goes here
        Debug.Log("Custom Update");

        // For example, move an object
        transform.Translate(Vector3.forward * Time.deltaTime);
    }
}

Bằng cách khởi tạo trước 'WaitForSeconds', bạn tránh được chi phí tạo phiên bản mới cho mỗi khung hình, có khả năng cải thiện hiệu suất, đặc biệt nếu vòng cập nhật tùy chỉnh của bạn chạy thường xuyên. Việc tối ưu hóa này đặc biệt hữu ích nếu bạn có nhiều phiên bản của tập lệnh này chạy đồng thời hoặc nếu trò chơi của bạn nhạy cảm với hiệu suất.

Bài viết được đề xuất
Tạo đồ sưu tầm và tăng sức mạnh trong Unity
Triển khai đầu vào bàn phím và chuột trong Unity
Triển khai Điều khiển tai nghe VR trong Unity
Tạo trò chơi lấy cảm hứng từ Pac-Man trong Unity
Tương tác với các đối tượng trong trò chơi Unity
Cập nhật so với Cập nhật muộn
Cập nhật so với Cập nhật cố định