ActualizadorRed
Actualizador centralizado de ciclos de vida y callbacks para reducir el número de MonoBehaviour con Update.
ActualizadorRed
ActualizadorRed es un scheduler centralizado utilizado por Eco para ejecutar OnStart, OnUpdate, OnLateUpdate, actualizaciones poco frecuentes, callbacks de una sola ejecución y pequeñas coroutines.
Por qué existe
Unity ejecuta Update y LateUpdate de cada MonoBehaviour habilitado. Cuando un proyecto contiene cientos o miles de componentes pequeños, centralizar parte de esos ciclos puede reducir overhead y mejorar el control del scheduler.
MonoBehaviour A ─┐
MonoBehaviour B ─┼──► ActualizadorRed ─► OnUpdate()
MonoBehaviour C ─┘Contratos
public interface IStartable
{
void OnStart();
}
public interface IUpdateable
{
void OnUpdate();
}
public interface ILateUpdateable
{
void OnLateUpdate();
}
public interface IInfrequentUpdateable
{
void InfrequentUpdate();
}Alta y baja
ActualizadorRed.AddUpdate(this);
ActualizadorRed.AddLateUpdate(this);
ActualizadorRed.AddInfrequentUpdate(this, 0.25f);
ActualizadorRed.RemoveUpdate(this);
ActualizadorRed.RemoveLateUpdate(this);
ActualizadorRed.RemoveInfrequentUpdate(this);La implementación utiliza conjuntos para las actualizaciones normales y colas auxiliares cuando un objeto se elimina durante el propio recorrido.
Una sola ejecución
ActualizadorRed.AddOneShot(() =>
{
Debug.Log("Ejecutado en el siguiente Update");
});Esto es útil para diferir una operación al siguiente ciclo sin crear un MonoBehaviour adicional.
Invoke sin MonoBehaviour
ActualizadorRed.Invoke(() =>
{
Debug.Log("Han pasado 2 segundos");
}, 2f);Coroutines
El scheduler también puede mantener coroutines basadas en TareaParalela.EnumFunc y procesarlas fuera del MonoBehaviour que las originó.
Thread safety
La implementación actual permite THREAD_SAFE_UPDATER, protegiendo las colecciones internas con lock. Esto es especialmente importante cuando una tarea de red o worker registra callbacks desde otro hilo.
No mezclar con Unity API desde cualquier hilo
Que el scheduler sea seguro para registrar callbacks no significa que UnityEngine sea thread-safe. Los callbacks que toquen objetos de Unity deben ejecutarse en el hilo de Unity.
Relación con Componente
Componente.Awake() registra su inicialización mediante ActualizadorRed.AddStart(this). Por eso la documentación de Componente no debe asumir que toda la inicialización de red ocurre directamente en Start().
Componente
Clase base que utiliza ActualizadorRed durante la inicialización.
ActualizadorRed.cs
Implementación actual del scheduler.
