Implementowanie niestandardowej szybkości aktualizacji w Unity

Aby zaimplementować niestandardową częstotliwość aktualizacji w Unity, możesz utworzyć oddzielny skrypt do zarządzania własną pętlą aktualizacji przy użyciu współprogramów lub innych metod. Oto podstawowy przykład tego, jak można to osiągnąć:

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);
    }
}
  • Dołącz powyższy skrypt do obiektu GameObject w swojej scenie. Ten skrypt tworzy niestandardową pętlę aktualizacji, która wykonuje 'UpdateLogic()' w określonych odstępach czasu ('updateInterval').

Możesz dostosować 'updateInterval', aby kontrolować częstotliwość wywoływania 'UpdateLogic()'. Mniejsze odstępy będą skutkować częstszymi aktualizacjami, natomiast większe odstępy będą skutkować rzadszymi aktualizacjami.

Takie podejście zapewnia oddzielenie niestandardowej logiki od wbudowanej metody 'Update()' aparatu Unity i pozwala na lepszą kontrolę nad szybkością aktualizacji.

Pamiętaj, aby dostosować interwał do swoich potrzeb i wymagań wydajnościowych projektu. Bardzo częste aktualizacje mogą mieć wpływ na wydajność, dlatego używaj ich rozsądnie.

Wskazówka dotycząca optymalizacji

Wstępna inicjalizacja 'WaitForSeconds' poza pętlą, aby uniknąć tworzenia nowej instancji w każdej ramce, może poprawić wydajność. Oto jak możesz zmodyfikować skrypt, aby wstępnie zainicjował '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);
    }
}

Dzięki wstępnej inicjalizacji 'WaitForSeconds' unikasz narzutu związanego z tworzeniem nowej instancji w każdej klatce, co potencjalnie poprawia wydajność, zwłaszcza jeśli często uruchamiana jest niestandardowa pętla aktualizacji. Ta optymalizacja jest szczególnie przydatna, jeśli jednocześnie działa wiele instancji tego skryptu lub jeśli Twoja gra jest wrażliwa na wydajność.

Sugerowane artykuły
Aktualizacja a naprawiono aktualizację
Metody zaciemniania Unity i ochrona przed hakerami
Implementowanie interakcji kinetycznych w Unity
Implementowanie łączenia obiektów w Unity
Porównanie LateUpdate i FixUpdate w Unity
Aktualizacja vs LateUpdate
Tworzenie przedmiotów kolekcjonerskich i ulepszeń w Unity