通用中枢模块
为 Unity 项目提供一套基础工具和常用设计模式的集合,包含泛型单例、JSON读写帮助类以及事件中心等模板。
com.dreemurrstudio.utilities 
Install via UPM
Add to Unity Package Manager using this URL
https://www.pkglnk.dev/dreemurrdango-utilities.git README Markdown
Copy this to your project's README.md
## Installation
Add **通用中枢模块** to your Unity project via Package Manager:
1. Open **Window > Package Manager**
2. Click **+** > **Add package from git URL**
3. Enter:
```
https://www.pkglnk.dev/dreemurrdango-utilities.git
```
[](https://www.pkglnk.dev/pkg/dreemurrdango-utilities)Dependencies (1)
Used By (1)
README
Unity 通用中枢模块 (Utilities Module)
概述
本模块是为 Unity 项目提供的一套基础工具和常用设计模式的集合,旨在作为其他功能模块的基石。它包含了泛型单例模式、强大的 JSON 数据读写帮助类,以及一套用于项目全局定义的模板文件(如事件中心、枚举等)
核心功能
- 泛型单例模式 (
Singleton<T>): 提供一个MonoBehaviour的泛型基类,只需继承即可快速实现单例模式,并支持在实例为空时自动在场景中查找 - JSON 帮助类 (
JsonHelper):- 基于
Newtonsoft.Json的静态类,提供强大的Save和Load功能 - 支持数据压缩(GZip),可将大型 JSON 文件保存为更小的二进制格式
- 内置对
Application.persistentDataPath和Application.streamingAssetsPath两个常用路径的快捷读写方法
- 基于
- 自动配置加载器:
- 提供
JsonConfigLoader<T>和SingleTonJsonConfigLoader<T>两个抽象基类,继承它们即可轻松实现从StreamingAssets中加载配置文件
- 提供
- 项目模板库:包文件下的Models.unitypackage包含了以下模板文件,导入后(将导入到
Assets/Scripts/Models目录下) 将可根据项目需求进行修改EventHandler: 一个静态的全局事件中心模板,用于实现模块间的低耦合通信Enums/DataCollection: 用于集中定义项目中所有通用枚举和数据结构的模板文件
- 主线程调度器: 提供
UnityMainThreadDispatcher,可以安全地将网络线程中接收到的任务(如更新UI)调度到 Unity 主线程执行
依赖项
- Newtonsoft.Json for Unity: 本模块的
JsonHelper依赖于此包。请通过 Unity 包管理器搜索并安装com.unity.newtonsoft-json
快速开始
1. 安装与设置
- 通过 Unity 包管理器从 Git URL 或本地路径添加此包
- 导入核心定义文件:
- 在包目录下,找到名为
ScriptCollection的unitypackage文件,双击将其导入到你的项目中 - 这会将
EventHandler.cs,Enums.cs和DataCollection.cs等模板文件复制到您项目的Assets/Utilities文件夹中。您可以在此路径下安全地修改它们以适应您的项目需求
- 在包目录下,找到名为
2. Singleton 用法
让你的管理器类继承自 Singleton<T>
// public class MyManager : Singleton<MyManager>
// {
// // 当有额外的初始化动作时可重写 Awake 方法
// protected override void Awake()
// {
// base.Awake(); // 确保调用基类的 Awake 来实现单例逻辑
// // ... 你的初始化代码
// }
//
// public void DoSomething()
// {
// Debug.Log("MyManager is doing something!");
// }
// }
// 在其他任何地方调用:
// MyManager.Instance.DoSomething();
3. JsonHelper 用法
方式一:直接调用静态方法
// [System.Serializable]
// public struct MyGameData
// {
// public int level;
// public float score;
// }
//
// MyGameData data = new MyGameData { level = 5, score = 1234.5f };
//
// // 保存到 StreamingAssets
// JsonHelper.SaveToStreamingAssets(data, "Configs/GameData.json");
//
// // 从 StreamingAssets 加载
// MyGameData loadedData;
// JsonHelper.LoadFromStreamingAssets("Configs/GameData.json", out loadedData);
方式二:使用自动加载器
// 1. 定义你的配置数据结构
// [System.Serializable]
// public struct GameConfig
// {
// public string gameVersion;
// public bool enableCheats;
// }
// 2. 创建一个继承自加载器的管理器
// public class ConfigManager : SingleTonJsonConfigLoader<GameConfig>
// {
// // 3. 指定配置文件的路径
// protected override string FilePathInStreamingAssets => "Configs/GameConfig.json";
// }
// 4. 在其他地方直接访问配置
// bool cheats = ConfigManager.Instance.Config.enableCheats;
4. EventHandler 用法
在导入 Samples 后,你可以在 Assets/Samples/.../EventHandler.cs 中定义你的全局事件
// 在 EventHandler.cs 中定义事件
// public static event Action<int> OnPlayerScored;
// public static void CallPlayerScored(int score) => OnPlayerScored?.Invoke(score);
// 订阅方 (例如一个UI脚本)
// void Start()
// {
// EventHandler.OnPlayerScored += UpdateScoreUI;
// }
// void OnDestroy()
// {
// EventHandler.OnPlayerScored -= UpdateScoreUI;
// }
// private void UpdateScoreUI(int newScore) { /* ... */ }
// 发布方 (例如一个游戏逻辑脚本)
// void AddScore(int amount)
// {
// // ...
// EventHandler.CallPlayerScored(currentScore);
// }
No comments yet. Be the first!