96 lines
2.2 KiB
C#
96 lines
2.2 KiB
C#
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
using UnityEngine.SceneManagement;
|
|
using Utils;
|
|
|
|
namespace Base
|
|
{
|
|
public interface ITick
|
|
{
|
|
public void Tick()
|
|
{
|
|
}
|
|
}
|
|
|
|
public interface ITickPhysics
|
|
{
|
|
public void TickPhysics()
|
|
{
|
|
}
|
|
}
|
|
|
|
public interface ITickUI
|
|
{
|
|
public void TickUI()
|
|
{
|
|
}
|
|
}
|
|
|
|
public class Clock : MonoSingleton<Clock>
|
|
{
|
|
public bool pause;
|
|
public List<ITickPhysics> tickPhysics = new();
|
|
public List<ITick> ticks = new();
|
|
public List<ITickUI> tickUIs = new();
|
|
|
|
override protected void OnStart()
|
|
{
|
|
// 注册场景加载事件
|
|
SceneManager.sceneLoaded += OnSceneLoaded;
|
|
|
|
// 初始化时调用一次
|
|
Init();
|
|
}
|
|
|
|
private void Update()
|
|
{
|
|
if (!pause)
|
|
foreach (var tick in ticks)
|
|
tick.Tick();
|
|
|
|
foreach (var uiTick in tickUIs) uiTick.TickUI();
|
|
//if (timer > 1)
|
|
//{
|
|
// timer -= 1;
|
|
// Debug.Log("滴答");
|
|
//}
|
|
//timer += Time.deltaTime;
|
|
}
|
|
|
|
private void FixedUpdate()
|
|
{
|
|
if (!pause)
|
|
foreach (var physicsTick in tickPhysics)
|
|
physicsTick.TickPhysics();
|
|
}
|
|
|
|
private void OnDestroy()
|
|
{
|
|
// 移除事件监听
|
|
SceneManager.sceneLoaded -= OnSceneLoaded;
|
|
}
|
|
|
|
private void OnSceneLoaded(Scene scene, LoadSceneMode mode)
|
|
{
|
|
// 场景加载完成后调用 Init 方法
|
|
Init();
|
|
}
|
|
|
|
/// <summary>
|
|
/// 初始化方法
|
|
/// </summary>
|
|
public void Init()
|
|
{
|
|
ticks.Clear();
|
|
tickPhysics.Clear();
|
|
tickUIs.Clear();
|
|
|
|
foreach (var obj in FindObjectsByType<MonoBehaviour>(FindObjectsSortMode.None))
|
|
{
|
|
if (obj is ITick tickObj) ticks.Add(tickObj);
|
|
if (obj is ITickPhysics physicsObj) tickPhysics.Add(physicsObj);
|
|
if (obj is ITickUI uiObj) tickUIs.Add(uiObj);
|
|
}
|
|
}
|
|
}
|
|
} |