01. 项目简介
01. 简介
大家好,我是 QFramework 的作者 凉鞋,QFramework 从第一次代码提交到现在快 7 年了(2015 年 12 月 ~ 2022 年 7 月)了,而经过了 7 年时间的打磨,我们终于迎来了 v1.0 版本。
此教程,将收录于 QFramework 的官方文档,发布于 qframework.cn,同时也会包含在 QFramework.Toolkits 的编辑器内置文档中。
QFramework 简介
QFramework 是一套渐进式、快速开发框架,适用于任何类型的游戏及应用项目。
QFramework 包含一套 开发架构 和 大量的工具集。
QFramework 特性速览:
开发架构(QFramework.cs v1.0)
简单、易上手、强大
MVC
IOC、分层支持
CQRS 支持
符合 SOLID原则
可以使用 DDD 的方式设计项目
不到 1000 行代码
工具集(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:提供表格类数据结构的工具集
QFramework 的设计哲学是从每个细节上提升开发效率。
同时 QFramework 还包含丰富的生态。
QFrameowrk.Toolkits 内置编辑器
资源
|
||
---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
典型的 QFramework.cs 架构代码
namespace QFramework.Exmaple
{
public class CounterAppController : MonoBehaviour , IController
{
// Viewprivate Button mBtnAdd;
private Button mBtnSub;
private Text mCountText;
// Modelprivate ICounterAppModel mModel;
void Start()
{
// 获取模型
mModel = this.GetModel<ICounterAppModel>();
// View 组件获取
mBtnAdd = transform.Find("BtnAdd").GetComponent<Button>();
mBtnSub = transform.Find("BtnSub").GetComponent<Button>();
mCountText = transform.Find("CountText").GetComponent<Text>();
// 监听输入
mBtnAdd.onClick.AddListener(() =>
{
// 交互逻辑this.SendCommand<IncreaseCountCommand>();
});
mBtnSub.onClick.AddListener(() =>
{
// 交互逻辑this.SendCommand(new DecreaseCountCommand(/* 这里可以传参(如果有) */));
});
// 表现逻辑
mModel.Count.RegisterWithInitValue(newCount => // -+
{
UpdateView();
}).UnRegisterWhenGameObjectDestroyed(gameObject);
}
void UpdateView()
{
mCountText.text = mModel.Count.ToString();
}
public IArchitecture GetArchitecture()
{
return CounterApp.Interface;
}
private void OnDestroy()
{
mModel = null;
}
}
}
典型的 QFramework.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;
}
}
}
大量的示例
小游戏《点点点》
小游戏《FlappyBird》
作者:王二 soso https://github.com/so-sos-so
小游戏《Cube Master》
作者:王二 soso https://github.com/so-sos-so
简易关卡编辑器2D
小游戏《贪吃蛇》
作者:一只皮皮虾 https://gitee.com/PantyNeko/
以上的示例都是由 QFramework.cs 制作而成的官方示例。
另外还有群友制作的开源游戏
CrazyCar
Unity制作的联机赛车游戏,后台为SpringBoot + Mybatis;游戏采用QFramework框架,支持KCP和WebSocket网络(商用级)
作者: TastSone https://github.com/TastSong
案例《五子棋》
源码地址:
案例《扫雷》
作者:Joker
源码地址:
本教程简介
在上一版官方教程《QFramework 使用指南 2020》写完之后,经过两年(2022 年),QFramework 改进了很多工具的使用体验,同时又新增了一套非常简单且强大的开发架构,这样就迎来了 QFramework 第一个正式版本 QFramework v1,这样就导致导致 QFramework 的推荐使用的 API 发生了一些变化,虽然旧版本的 API 还能用,但是按照《QFramework 使用指南 2020》写的很多代码会报很多警告,这会让很多初学者感到疑惑,所以笔者打算在《QFramework 使用指南 2020》的基础上,重制一套新的 QFramework 使用教程,名字叫做《QFramework v1.0 使用指南》。
教程分为架构篇和工具集篇,架构篇着重介绍 QFramework.cs 这套架构入门以及使用规范,工具篇着重介绍 QFramework 中的大量的工具集的使用。