Files
UnityAI/StrayFog框架架构分析.md

12 KiB
Raw Blame History

StrayFog 框架架构分析

一、框架整体架构

1.1 模块划分

模块层级 路径 职责描述
Core层 Assets/StrayFog/Core 核心基础框架,模拟行为系统、全局数据管理
HF层 Assets/Game/GameHFScripte/CopyToHF 游戏核心业务框架,资源管理、事件系统、相机管理等
General层 Assets/Game/GameGeneralScripte 通用工具层,状态机、辅助工具等

1.2 架构图

┌─────────────────────────────────────────────────────────────────┐
│                      StrayFog Framework                         │
├─────────────────────────────────────────────────────────────────┤
│  ┌──────────────────┐  ┌──────────────────┐  ┌───────────────┐  │
│  │   GameGeneral    │  │     GameHF       │  │    Core       │  │
│  │  状态机/工具类   │  │  业务核心模块    │  │ 基础框架层    │  │
│  └────────┬─────────┘  └────────┬─────────┘  └───────┬───────┘  │
├───────────┼─────────────────────┼───────────────────┼───────────┤
│           │                     │                   │           │
│           ▼                     ▼                   ▼           │
│  ┌─────────────────────────────────────────────────────────┐    │
│  │                    Unity Engine                         │    │
│  └─────────────────────────────────────────────────────────┘    │
└─────────────────────────────────────────────────────────────────┘

二、Core层架构

2.1 SimulateBehaviour 模拟行为系统

2.1.1 核心接口

public interface ISimulateBehaviour
{
    long simulateGlobalId { get; }                    // 模拟行为全局ID
    int bindGameObjectInstanceId { get; }            // 绑定对象实例ID
    void BindGameObject(GameObject _go);             // 绑定GameObject
    void UnBindGameObject();                         // 解绑GameObject
    // ... 完整的MonoBehaviour生命周期方法
}

2.1.2 设计目的

设计目标 实现方式
解耦MonoBehaviour 将逻辑从MonoBehaviour中剥离便于测试和复用
生命周期控制 完整模拟Unity生命周期支持自定义调度
对象池优化 配合对象池实现高效对象复用

2.1.3 目录结构

SimulateBehaviour/
├── ISimulateBehaviour.cs                    # 核心接口定义
├── Bind/                                    # 绑定实现
│   ├── IBindSimulateBehaviour.cs
│   ├── AbsBindSimulateBehaviour_Mono.cs     # Mono绑定基类
│   ├── AbsBindSimulateBehaviour_UI.cs       # UI绑定基类
│   └── BindSimulateBehaviour_Collect.cs     # 收集器
├── MonoBehaviour/                            # 各生命周期模拟实现
│   ├── SimulateMonoBehaviour_Awake__xxx.cs
│   ├── SimulateMonoBehaviour_Update__xxx.cs
│   └── ... (40+生命周期方法)
└── UIBehaviour/                             # UI生命周期模拟
    ├── SimulateUIBehaviour_Awake__xxx.cs
    └── ...

2.2 全局数据管理

SFGlobalData.cs - 全局路径和平台管理

public sealed class SFGlobalData 
{
    public static string assetBundleRoot;       // AB包根路径
    public static string streamingAssetsRoot;   // 流式资源根路径
    public static string cdnassetBundleRoot;    // CDN资源路径
    public static RuntimePlatform Platform();   // 当前平台判断
}

三、HF层架构

3.1 接口体系

3.1.1 核心接口继承链

IHFObject (基础对象接口)
    ├── IHFRecycle (回收接口)
    │       └── void Recycle();
    ├── IHFGlobal (全局对象接口)
    │       └── long globalId { get; }
    ├── IHFClone (克隆接口)
    ├── IHFLanguage (语言接口)
    ├── IHFScene (场景接口)
    └── IHFSerializable (序列化接口)

3.1.2 接口职责表

接口 核心职责 关键字段/方法
IHFObject 基础对象标识
IHFRecycle 对象回收机制 Recycle()
IHFGlobal 全局唯一标识 globalId
IHFClone 对象克隆能力 系列Clone方法
IHFLanguage 多语言支持 语言切换
IHFScene 场景管理 场景加载/卸载

3.2 对象池系统

3.2.1 HFObjectMemPool - GameObject对象池

public class HFObjectMemPool
{
    private Queue<GameObject> m_UnoccupiedPool;    // 空闲队列
    private Dictionary<int, GameObject> m_UsingPool; // 使用中字典
    public GameObject GetItem(out bool isnew);     // 获取对象
    public void GiveBack(GameObject item);         // 归还对象
    public void Recycle();                         // 完全回收
}

3.2.2 HFScriptMemPool - 泛型脚本对象池

public class HFScriptMemPool<T> : IHFRecycle
    where T : IHFRecycle
{
    private Queue<T> m_UnoccupiedPool;
    private List<T> m_UsingPool;
    // 支持MonoBehaviour和普通类的自动创建
}

3.2.3 对象池设计特点

特性 实现方式 优势
双池结构 空闲池 + 使用池 高效管理对象状态
内存泄漏检测 归还时校验来源 及时发现问题
泛型支持 HFScriptMemPool<T> 类型安全
Mono支持 自动创建GameObject 无缝集成Unity

3.3 事件系统

3.3.1 核心接口

public interface IHFEventHandle<K,T> : IHFRecycle
{
    void AddListener<T1>(K key, Action<T> callback);   // 添加监听
    void RemoveListener<T1>(K key, Action<T> action);  // 移除监听
    void Dispatch(T arg);                              // 分发事件
    void RemoveAll(K key);                             // 清空监听
}

3.3.2 AbsHFEventHandle 实现机制

public abstract class AbsHFEventHandle<K,T> : IHFEventHandle<K,T>
    where K : struct, Enum
    where T : IHFEventArg<K>
{
    // 多级索引: EventId -> TypeHashCode -> Action列表
    HFMultiKeyDictionary<K, int, IHFCacheEventAction<K,T>> mICacheEventActionMaping;
}

3.3.3 事件系统架构

事件分发流程:
Dispatch(arg)
    │
    ▼
获取 EventId 对应的 Action字典
    │
    ▼
获取 参数类型HashCode 对应的 CacheEventAction
    │
    ▼
遍历执行所有 Action<T>
    │
    ▼
调用 arg.Recycle() 回收事件参数

3.4 AssetBundle 资源管理器

3.4.1 HFABMgr 核心结构

public partial class HFABMgr : AbsHFSingleMonoBehaviour<HFABMgr>
{
    public float progress { get; }                     // 加载进度
    Dictionary<int, HFAssetLoader> mHFAssetLoaderMaping;       // 加载器映射
    Dictionary<int, HFAssetBundlePathAttribute> mHFAssetBundlePathAttributeMaping; // 属性映射
}

3.4.2 资源加载流程

资源加载流程:
OnStartLoad(request)
    │
    ▼
检查缓存 → 获取/创建 HFAssetLoader
    │
    ▼
loader.AddRequest(request)
    │
    ▼
loader.LoadAsset() → 异步加载
    │
    ▼
加载完成 → 回调处理

3.4.3 依赖管理

通过Manifest文件解析资源依赖关系

HFAssetBundlePathAttribute OnGetDependencyAbpAttr(string _depManifestName)
{
    // 解析依赖项名称 → 获取属性 → 缓存
}

3.5 相机管理系统

3.5.1 HFCameraManager 架构

public partial class HFCameraManager : AbsHFSingleRunTime<HFCameraManager>
{
    private Dictionary<int, AbsHFCameraItem> m_List_CameraItem; // 相机列表
    public HFMainCamera mainCamera;                              // 主相机

    public void AddCamera(AbsHFCameraItem cameraItem);           // 添加相机
    public void RemoveCamera(AbsHFCameraItem cameraItem);        // 移除相机
    public AbsHFEventHandle GetCamera(string _cameraName);       // 获取相机
}

3.5.2 相机堆栈管理

相机层级架构:
HFMainCamera (主相机)
    │
    ├── CameraStack (相机堆栈)
    │       ├── CameraItem1 (Weight=10)
    │       ├── CameraItem2 (Weight=20)
    │       └── CameraItem3 (Weight=5)
    │
    └── 按Weight排序 → 渲染顺序控制

四、General层架构

4.1 状态机系统

4.1.1 核心类层次

IGFStateMachineBehaviour (接口)
    │
    ├── AbsGFStateMachineBehaviour (抽象基类)
    │       ├── AbsGFAttachStateBehaviour (状态行为)
    │       ├── AbsGFAttachLayerBehaviour (层行为)
    │       └── AbsGFAttachMachineBehaviour (机行为)
    │
    └── IGFStateMachineBehaviourClassify (分类接口)

4.1.2 状态机特性

特性 说明
层级化设计 支持状态、层、机三个层级的行为绑定
参数化驱动 通过参数控制状态切换
Inspector扩展 自定义编辑器支持

4.2 工具类

4.2.1 扩展方法集合

HFUGUIExtendEngine.cs - UGUI扩展方法40+方法)

功能分类 方法示例
坐标转换 HFWorldToLocalPointInRectangle
布局操作 HFFixedPositionInCanvas, HFForceRebuildLayoutImmediate
RectTransform HFIdentityStreech, HFCopyRectTransformFrom
事件监听 HFAddListener

4.2.2 其他工具

工具类 职责
HFAssetBundleHelper AB包辅助工具
HFDllHelper DLL加载辅助
HFEnumForAssetBundle AB包相关枚举
MinGameModel 微信小游戏适配

五、架构设计特点

5.1 设计模式应用

模式 应用场景 实现类
单例模式 全局管理器 AbsHFSingleMonoBehaviour, AbsHFSingleRunTime
工厂模式 对象创建 对象池的GetItem
观察者模式 事件系统 IHFEventHandle
策略模式 多平台适配 SFGlobalData.Platform()
模板方法 生命周期 SimulateBehaviour系列

5.2 架构优势

优势 体现
解耦性 逻辑与MonoBehaviour分离
可测试性 纯逻辑类易于单元测试
性能优化 对象池减少GC
扩展性 接口驱动,易于扩展
可维护性 清晰的模块划分

5.3 潜在改进点

改进方向 说明
异步加载优化 可引入协程池或Job System
资源依赖可视化 可增加依赖关系图工具
性能监控 可增加加载时间、内存占用统计
热更新支持 可考虑集成Lua或ILRuntime

六、总结

StrayFog框架是一个结构清晰、设计完善的Unity游戏框架核心特点包括

  1. 模拟行为系统 - 实现了完整的MonoBehaviour生命周期解耦
  2. 对象池机制 - 高效的内存管理策略
  3. 事件驱动架构 - 灵活的事件分发系统
  4. 资源管理体系 - 完善的AssetBundle加载和依赖管理
  5. 模块化设计 - 清晰的分层和职责划分

该框架适合中大型Unity项目使用具备良好的扩展性和维护性。


版本: v1.0
分析日期: 2024年
适用项目: OnlineGame