01. QFramework.Toolkits 简介

QFramework.Toolkits 是包含 QFramework.cs 和 大量工具集的解决方案。

在 QFramework v1.0 之前,QFramework.Toolkits 就是 QFramework 本身,而在 QFramework v1.0 开始,QFramework 拥有了自己的开发架构—QFramework.cs,于是原来的 QFramework 就变成了 QFramework.Toolkits。

QFramework.Toolkits 称为 QFramework 工具集,是一套开箱即用的、渐进式快速开发框架。

目标是作为无框架经验的公司、独立开发者、以及 Unity3D 初学者们的第一套框架。框架内部积累了多个项目在各个技术方向的解决方案。学习成本低,接入成本低(侵入性低),重构成本低,二次开发成本低。文档内容丰富。

QFramework 工具集的设计哲学是追求极致的开发效率和开发体验。

QFramework.Toolkits 特性一览

  • 工具集(QFramework.Toolkits v0.16)

    • UIKit 界面&View快速开发&管理解决方案

      • UI、GameObject 的代码生成&自动赋值

      • 界面管理

      • 层级管理

      • 界面堆栈

      • 默认使用 ResKit 方式管理界面资源

      • 可自定义界面的加载、卸载方式

      • Manager Of Manager 架构集成(不推荐使用)

    • ResKit 资源快速开发&管理解决方案

      • AssetBundle 提供模拟模式,开发阶段无需打包即可加载资源

      • 资源名称代码生成支持

      • 同一个 API 可加载 AssetBundle、Resources、网络 和 自定义来源的资源

      • 提供一套引用计数的资源管理模型

    • AudioKit 音频管理解决方案

      • 提供背景音乐、人声、音效 三种音频播放 API

      • 音量控制

      • 默认使用 ResKit 方式管理音频资源

      • 可自定义音频的加载、卸载方式

    • CoreKit 提供大量的代码工具

      • ActionKit:动作序列执行系统

      • CodeGenKit:代码生成 & 自动序列化赋值工具

      • EventKit:提供基于类、字符串、枚举以及信号类型的事件工具集

      • FluentAPI:对大量的 Unity 和 C# 常用的 API 提供了静态扩展的封装(链式 API)

      • IOCKit:提供依赖注入容器

      • LocaleKit:本地化&多语言工具集

      • LogKit:日志工具集

      • PackageKit:包管理工具,由此可更新框架和对应的插件模块。

      • PoolKit:对象池工具集,提供对象池的基础上,也提供 ListPool 和 Dictionary Pool 等工具。

      • SingletonKit:单例工具集

      • TableKit:提供表格类数据结构的工具集

典型的 QFrameowrk.Toolkits 代码

using QFramework;
using UnityEngine;
using UnityEngine.UI;

namespace liangxiegame
{
    public partial class UIGamePanel : UIPanel
    {
        private ResLoader mResLoader;

        protected override void OnInit(IUIData uiData = null)
        {
            mResLoader = ResLoader.Allocate();

            mResLoader.LoadSync<GameObject>("GameplayRoot")
                .Instantiate()
                .Identity()
                .GetComponent<GameplayRoot>()
                .InitGameplayRoot();


            BtnPause.onClick.AddListener(() =>
            {
                AudioKit.PlaySound("btn_click");

                ActionKit.Sequence()
                    .Callback(() => BtnPause.interactable = false)
                    .Callback(() => BtnPause.PlayBtnFadeAnimation())
                    .Delay(0.3f)
                    .Callback(() => UIKit.OpenPanel<UIPausePanel>())
                    .Start(this);
            });
        }

        protected override void OnClose()
        {
            mResLoader.Recycle2Cache();
            mResLoader = null;
        }
    }
}