From 10136a987dea4d5614c6d7265a0e07200d3fd27b Mon Sep 17 00:00:00 2001 From: m0_75251201 Date: Wed, 9 Jul 2025 11:35:52 +0800 Subject: [PATCH] =?UTF-8?q?(client)=20feat:=E6=B7=BB=E5=8A=A0Tick=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=E5=8F=8A=E6=97=B6=E9=92=9F=E6=8E=A7=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Client/Assets/Scripts/Base.meta | 8 ++ Client/Assets/Scripts/Base/Clock.cs | 124 ++++++++++++++++++ Client/Assets/Scripts/Base/Clock.cs.meta | 2 + Client/Assets/Scripts/Interface.meta | 8 ++ Client/Assets/Scripts/Interface/Tick.meta | 8 ++ Client/Assets/Scripts/Interface/Tick/ITick.cs | 11 ++ .../Scripts/Interface/Tick/ITick.cs.meta | 2 + .../Scripts/Interface/Tick/ITickPhysics.cs | 9 ++ .../Interface/Tick/ITickPhysics.cs.meta | 2 + .../Assets/Scripts/Interface/Tick/ITickUI.cs | 9 ++ .../Scripts/Interface/Tick/ITickUI.cs.meta | 2 + Client/Assets/Scripts/Test.meta | 8 ++ Client/Assets/Scripts/Test/InitClock.cs | 30 +++++ Client/Assets/Scripts/Test/InitClock.cs.meta | 2 + 14 files changed, 225 insertions(+) create mode 100644 Client/Assets/Scripts/Base.meta create mode 100644 Client/Assets/Scripts/Base/Clock.cs create mode 100644 Client/Assets/Scripts/Base/Clock.cs.meta create mode 100644 Client/Assets/Scripts/Interface.meta create mode 100644 Client/Assets/Scripts/Interface/Tick.meta create mode 100644 Client/Assets/Scripts/Interface/Tick/ITick.cs create mode 100644 Client/Assets/Scripts/Interface/Tick/ITick.cs.meta create mode 100644 Client/Assets/Scripts/Interface/Tick/ITickPhysics.cs create mode 100644 Client/Assets/Scripts/Interface/Tick/ITickPhysics.cs.meta create mode 100644 Client/Assets/Scripts/Interface/Tick/ITickUI.cs create mode 100644 Client/Assets/Scripts/Interface/Tick/ITickUI.cs.meta create mode 100644 Client/Assets/Scripts/Test.meta create mode 100644 Client/Assets/Scripts/Test/InitClock.cs create mode 100644 Client/Assets/Scripts/Test/InitClock.cs.meta diff --git a/Client/Assets/Scripts/Base.meta b/Client/Assets/Scripts/Base.meta new file mode 100644 index 0000000..824045e --- /dev/null +++ b/Client/Assets/Scripts/Base.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 45b1e814df7542342aa8a366c514a477 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Client/Assets/Scripts/Base/Clock.cs b/Client/Assets/Scripts/Base/Clock.cs new file mode 100644 index 0000000..72ae380 --- /dev/null +++ b/Client/Assets/Scripts/Base/Clock.cs @@ -0,0 +1,124 @@ + + +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.SceneManagement; + +namespace Cell +{ + public class Clock : MonoBehaviour + { + private static Clock _instance; + public bool pause = false; + public List ticks = new(); + public List tickPhysics = new(); + public List tickUIs = new(); + + //float timer = 0; + public static Clock Instance + { + get + { + if (_instance == null) + { + // 检查场景中是否已存在实例 + _instance = FindAnyObjectByType(); + + // 如果不存在,创建一个新的 + if (_instance == null) + { + GameObject clockObject = new GameObject("[Clock]"); + _instance = clockObject.AddComponent(); + DontDestroyOnLoad(clockObject); // 确保对象不被销毁 + } + } + return _instance; + } + } + + + + private void Awake() + { + // 确保只有一个实例存在 + if (_instance != null && _instance != this) + { + Destroy(gameObject); + return; + } + + _instance = this; // 设置当前实例为静态变量 + SceneManager.sceneLoaded += OnSceneLoaded; // 注册场景加载事件 + } + + private void OnDestroy() + { + // 移除事件监听 + SceneManager.sceneLoaded -= OnSceneLoaded; + } + + private void OnSceneLoaded(Scene scene, LoadSceneMode mode) + { + // 场景加载完成后调用 Init 方法 + Init(); + + } + + /// + /// 初始化方法 + /// + public void Init() + { + ticks.Clear(); + tickPhysics.Clear(); + tickUIs.Clear(); + + foreach (var obj in UnityEngine.Object.FindObjectsByType(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); + } + } + } + + 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; + } + void FixedUpdate() + { + if(!pause) + { + foreach (var physicsTick in tickPhysics) + { + physicsTick.TickPhysics(); + } + } + } + } +} diff --git a/Client/Assets/Scripts/Base/Clock.cs.meta b/Client/Assets/Scripts/Base/Clock.cs.meta new file mode 100644 index 0000000..815db4b --- /dev/null +++ b/Client/Assets/Scripts/Base/Clock.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: cd0367766d04d8c4db80bcfe0202e619 \ No newline at end of file diff --git a/Client/Assets/Scripts/Interface.meta b/Client/Assets/Scripts/Interface.meta new file mode 100644 index 0000000..24f6ac9 --- /dev/null +++ b/Client/Assets/Scripts/Interface.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e255bfd5da1971b47bd84828bf348d0c +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Client/Assets/Scripts/Interface/Tick.meta b/Client/Assets/Scripts/Interface/Tick.meta new file mode 100644 index 0000000..953535b --- /dev/null +++ b/Client/Assets/Scripts/Interface/Tick.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f07f237520336f549bf53af368893863 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Client/Assets/Scripts/Interface/Tick/ITick.cs b/Client/Assets/Scripts/Interface/Tick/ITick.cs new file mode 100644 index 0000000..4e50016 --- /dev/null +++ b/Client/Assets/Scripts/Interface/Tick/ITick.cs @@ -0,0 +1,11 @@ + + +namespace Cell +{ + public interface ITick + { + public void Tick() + { + } + } +} diff --git a/Client/Assets/Scripts/Interface/Tick/ITick.cs.meta b/Client/Assets/Scripts/Interface/Tick/ITick.cs.meta new file mode 100644 index 0000000..7678188 --- /dev/null +++ b/Client/Assets/Scripts/Interface/Tick/ITick.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 3897d32ba1dc53c4ca44915fd7372a99 \ No newline at end of file diff --git a/Client/Assets/Scripts/Interface/Tick/ITickPhysics.cs b/Client/Assets/Scripts/Interface/Tick/ITickPhysics.cs new file mode 100644 index 0000000..8659a52 --- /dev/null +++ b/Client/Assets/Scripts/Interface/Tick/ITickPhysics.cs @@ -0,0 +1,9 @@ +namespace Cell +{ + public interface ITickPhysics + { + public void TickPhysics() + { + } + } +} diff --git a/Client/Assets/Scripts/Interface/Tick/ITickPhysics.cs.meta b/Client/Assets/Scripts/Interface/Tick/ITickPhysics.cs.meta new file mode 100644 index 0000000..e4fbfe1 --- /dev/null +++ b/Client/Assets/Scripts/Interface/Tick/ITickPhysics.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 13a5a7579420a2a43bdb17c2f7e586f5 \ No newline at end of file diff --git a/Client/Assets/Scripts/Interface/Tick/ITickUI.cs b/Client/Assets/Scripts/Interface/Tick/ITickUI.cs new file mode 100644 index 0000000..e1d7517 --- /dev/null +++ b/Client/Assets/Scripts/Interface/Tick/ITickUI.cs @@ -0,0 +1,9 @@ +namespace Cell +{ + public interface ITickUI + { + public void TickUI() + { + } + } +} \ No newline at end of file diff --git a/Client/Assets/Scripts/Interface/Tick/ITickUI.cs.meta b/Client/Assets/Scripts/Interface/Tick/ITickUI.cs.meta new file mode 100644 index 0000000..9268b24 --- /dev/null +++ b/Client/Assets/Scripts/Interface/Tick/ITickUI.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: db424d45aa0c9dd41b739434758b274a \ No newline at end of file diff --git a/Client/Assets/Scripts/Test.meta b/Client/Assets/Scripts/Test.meta new file mode 100644 index 0000000..f67b47a --- /dev/null +++ b/Client/Assets/Scripts/Test.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 49d0f94faee5d0f4bba9b2e76bafdc9e +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Client/Assets/Scripts/Test/InitClock.cs b/Client/Assets/Scripts/Test/InitClock.cs new file mode 100644 index 0000000..62d968a --- /dev/null +++ b/Client/Assets/Scripts/Test/InitClock.cs @@ -0,0 +1,30 @@ +using UnityEngine; +using UnityEngine.SceneManagement; + +namespace Cell +{ + public class InitClock : MonoBehaviour + { + static float timer = 0; + // Start is called once before the first execution of Update after the MonoBehaviour is created + void Start() + { + var clock= Clock.Instance; + } + + // Update is called once per frame + //void Update() + //{ + // if (Input.GetKeyUp(KeyCode.W)) + // { + // SceneManager.LoadScene("SampleScene"); + // } + // if (timer > 1) + // { + // timer -= 1; + // Debug.Log("ʱӳʼ"); + // } + // timer += Time.deltaTime; + //} + } +} diff --git a/Client/Assets/Scripts/Test/InitClock.cs.meta b/Client/Assets/Scripts/Test/InitClock.cs.meta new file mode 100644 index 0000000..074053c --- /dev/null +++ b/Client/Assets/Scripts/Test/InitClock.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: be939c7ca1c4f374b83b6535b3cbb656 \ No newline at end of file