Unity 游戏框架搭建 2018 (一) 架构、框架与 QFramework 简介 (2)

QFramework 的目标是要做到像 Quick-Cocos2d-x 一样 “简单、强大”。当时笔者纠结过很多名字,比如 QuickEngine,QuickUnity 等等。Q 代表 Quick,并且 Q 这个字母给人感觉灵活有弹性,所以最终确定为 QFramework。

QFramework 的目标

记得在此系列上一轮的第十篇中有如下一段话:

笔者意愿是想把 QFramework 打造成,让使用的人觉得所有框架中出现的概念要非常清晰,没有任何模糊的概念,出现的概念已经达成共识的概念,没有任何生僻概念,使用门槛尽很低:)。

这个 flag 是 2016 年立的,目前从用户的反馈来看完成得还不错。

QFramework 群里有人形容 QFramework 三个词:简单、粗暴、还有点小精致,笔者觉得形容地非常地贴切。

目前主要三个模块,UIKit,ResKit,ActionKit。目前还有一个模块 EditorKit 正在开发中。

看到这里大家可能对 ActionKit 有些陌生,它的前身就是 QChain,负责所有的异步逻辑,包含 UniRx 和 Promise 还有一套轻量级的行为树。之后会用一个非常详细的文章介绍它。

QFramework 快速入门:

要介绍 QFramework 只要附上三段代码就够了:

1.Action Kit

chainning style(Driven by MonoBehaviour or Update)

this.Sequence() .Delay(1.0f) .Event(()=>Log.I("Delayed 1 second")) .Until(()=>something is done) .Begin();

object oriented style

var sequenceNode = new SequenceNode(); sequenceNode.Append(DelayAction.Allocate(1.0f)); sequenceNode.Append(EventAction.Allocate(()=>Log.I("Delayed 1 second")); sequenceNode.Append(UntilAction.Allocate(()=>something is true)); this.ExecuteNode(sequenceNode);

2.Res Kit

// allocate a loader when initialize a panel or a monobehavour var loader = ResLoader.Allocate<ResLoader>(); // load someth in a panel or a monobehaviour loader.LoadSync<GameObject>("Resources/smobj"); loader.LoadSync<Texture2D>("Resources/Bg"); // load by asset bundle's assetName loader.LoadSync<Texture2D>("HomeBg"); // load by asset bundle name and assetName loader.LoadSync<Texture2D>("home","HomeBg"); // resycle this panel/monobehaivour's loaded res when destroyed loader.Recycle2Cache() loader = null

3.UI Kit

// open a panel from assetBundle UIMgr.OpenPanel<UIMainPanel>(); // load a panel from specified Resources UIMgr.OpenPanel<UIMainPanel>(prefabName:"Resources/UIMainPanel"); // load a panel from specield assetName UIMgr.OpenPanel<UIMainPanel>(prefabName:"UIMainPanel1");

QFramework 介绍到这里。

Unity 里的常用架构 一份六一礼物

今天是六一,作为礼物先送上一段对笔者影响最大的一段话:

在写一个项目的时候,不要短视地说我就把这个项目做完了,就是交一个差上线了就完了,我们希望每写一个游戏的时候,我们都积累一些东西,把写的每一行代码,都当成是一个可以收藏的,甚至是可以传递下去的这样的一个资产。有了这样一个思想,可能我们在写代码的时候,整个的思维模式会完全不一样。——刘钢《Unity 项目架构和开发管理》

以上这段话来自刘钢老师的讲座《Unity项目架构设计与开发管理》 的结尾。

Unity 项目架构设计与开发管理

笔者比较幸运,在学习 Unity 之后不久就看了刘钢老师的这个视频,笔者当时很受启发。而视频中所提出的 Manager Of Managers 很好地为 QFramework 指明了方向。视频讲得通俗易懂,里边很多内容都值得反复咀嚼,笔者之后花了很长时间去消化里边的内容。直到今天,笔者再看一遍视频还是会有很多收获的,希望大家看完之后也有所收获有所启发。

视频中比较精彩的部分是从一个什么架构都没有的项目一点一点演化到 MVVM 和 StrangeIOC 架构。

关于Unity的架构有如下几种常用的方式简单总结如下:

1.EmptyGO:

  在 Hierarchy 上创建一个空的 GameObject,然后挂上所有与 GameObject 无关的逻辑控制的脚本。使用GameObject.Find() 访问对象数据。

缺点:逻辑代码散落在各处,不适合大型项目。

2.Simple GameManager:

  所有与 GameObject 无关的逻辑都放在一个单例中。
缺点:单一文件过于庞大。

3.Manager Of Managers:

将不同的功能单独管理。如下:

MainManager: 作为入口管理器。

EventManager: 消息管理。

GUIManager: 图形视图管理。

AudioManager: 音效管理。

PoolManager: GameObject管理(减少动态开辟内存消耗,减少GC)。

LevelManager: 关卡管理。

GameManager: 游戏管理。

SaveManager: 配置&存储管理。

MenuManager 菜单管理。

4.将 View 和 Model 之间增加一个媒介层。

MVCS:StrangeIOC 插件。

MVVM:uFrame 插件。

5. ECS (Entity Component Based System)

Unity 是基于 ECS,比较适合 GamePlay 模块使用。
还有比较有名的 Entitas-CSharp

相关链接:

我的框架地址:https://github.com/liangxiegame/QFramework

教程源码:https://github.com/liangxiegame/QFramework/tree/master/Assets/HowToWriteUnityGameFramework/

QFramework&游戏框架搭建QQ交流群: 623597263

转载请注明地址:凉鞋的笔记

微信公众号:liangxiegame

Unity 游戏框架搭建 2018 (一) 架构、框架与 QFramework 简介

如果有帮助到您:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wssxps.html