using UnityEngine; // Слой приложения: "сердцебиение" модуля Населения. Модуль -- чистый C# и не знает про Update, // поэтому раз в несколько секунд его досчитывает этот объект. Живёт между сценами (город <-> карта мира). // Создаётся сам при запуске игры, вешать никуда не нужно. public class PopulationTicker : MonoBehaviour { const float Interval = 2f; // секунд реального времени между расчётами static PopulationTicker instance; float next; [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.AfterSceneLoad)] static void Create() { if (instance != null) return; var go = new GameObject("PopulationTicker"); DontDestroyOnLoad(go); instance = go.AddComponent(); } void Start() { next = Time.unscaledTime + Interval; // первый расчёт -- после загрузки сохранения (она идёт в Start сцены) } void Update() { if (Time.unscaledTime < next) return; next = Time.unscaledTime + Interval; if (GameServices.TryGet(out IPopulation population)) population.Tick(GameClock.UnixNow); } void OnDestroy() { if (instance == this) instance = null; } }