FinalFrameWork
是一款自用的、简单、强大、现代化的unity框架
关联文章:
🚧施工中:
站内地址
FinalFrameWork模板
额外工具集
FinalFrameWork以下简称为FF。
1.快速安装
1.1 通过 Unity PackageManager(推荐)
1https://gitee.com/CodeInYNOU/final-core.git#master
1.2 直接前往 gitee 下载 (对于需要修改源码)
git clone https://gitee.com/CodeInYNOU/final-core.git 到本地
通过Unity PackageManager Add Package from Disk 安装到项目中,通过此方法安装时可以对框架源码进行修改。
如果您对于框架有好想法 😽 ,欢迎Pull Req ...
写在前面
像是写作文一样写!
“叮叮叮~ 叮叮叮~”
上班的闹钟响起,我被迫睁开眼睛,习惯性的按掉闹钟;手机上显示闹钟将在10分钟再响。我又闭上了眼睛,大脑里却是思绪万千,虽然离上班还有一段时间,但也没了睡意;索性起吧。穿衣、洗漱一气呵成;看了一眼窗外,外面还黑蒙蒙的,没有完全亮起来。穿过卧室的走廊,进入客厅,客厅的小爱同学正在进行天气预报。我看了一眼手机的日期,嘴里嘟囔着“哦, 12月12号,周五了今天是;今年就快要过去了啊”。
回顾
“时间还早,不如回顾一下今年吧。”我自言自语道,“这一年都发生了什么呢?”
我翻开手机日历,思绪也随着日期慢慢浮起:
第一件大事,是我终于拥有了属于自己的房子,从此告别了租房的日子。年假结束后,我回到昆明的家,一个人住进三室两厅的空间,起初还真有些不习惯。加上刚装修完,屋里还残留着些许气味,尤其是卧室定做的衣柜,味道比较明显。于是,我干脆暂时睡在客厅的沙发上,这一睡就是大半年,直到今年国庆前后,才正式搬进卧室。
在新家,我添置了两样东西:一架电子琴,一个扫地机器人。电子琴是为了圆童年的一个兴趣梦,扫地机器人嘛,则是为了拯救我这个“懒癌晚期患 ...
说明
弹出层,用于消息提示和广播通知;在游戏中,我们获得一件新道具或者是等级提升等等都需要使用弹出层来进行信息展示。除了信息的展示,例如我们的所有弹窗(背包、战利品框、确认框等…)也都属于弹出层的业务范围。
因为也是属于UI界面相关的内容,所以在ui系统下划分出弹出层子系统PopWindowManager。
12345678public class UISystem : ISystem{ private Dictionary<string, UIPanelBase> _panelDict; ...... public PopWindowManager PopWindowManager { get; private set; }}
弹窗初始化
考虑在UiSystem初始化时一并对PopWindowManager进行初始化,在初始化时我们需要传入:资源加载器、弹窗根节点、mask(可选)
12345678910111213/// <summary>/// 初始化 弹出层/// </summary>// ...
本文主要面向 unity内置传统版本输入检测 系统 并非InputSystem
本文代码针对项目特殊定制,酌情依据情况修改
系统设计
存储中介Asset
HotKeyMap用于每一个热键功能的实体数据类型。
HotKeyMgrAsset用作存储中介Asset,在运行时读取或写入这里的数据。
注意:HotKeyMgrAsset存储的List数据集合引用和Mgr中是一致的,所以修改Mgr中的数据Asset中的数据也会被修改。如果多次修改统一保存的情况,这里就需要对Asset中的数据进行深克隆;而不是直接引用。
HotKeyMapHotKeyMgrAsset12345678910111213141516171819202122232425262728293031323334353637383940[System.Serializable]public class HotKeyMap{ public HotKey key; public bool hold = false; public List<KeyCode> defaultKeyCo ...
NodeCanvas是一款很棒的插件,包含了行为树、对话树、状态机等数据结构,提供可视化的图形服务,依此我们可以扩展一种FlowTree的流式图。
思考
FlowTree
FlowTree是我想要实现的一种数据结构,即流程树结构;在流程树中的所有节点会根据检查条件选择适合的分支依次执行。这其实和官方提供的DialogTree对话树的逻辑是差不多的;但是在对话树基本节点是对话节点。
为了能够执行一些列操作,而这一些操作可能包含对话也可能只是纯粹的Action,故而需要一种新的流程树形式。
从上图中可以看出,我们可以不再依赖于对话节点,我们可以 行为、条件、子图作为起始,也可以根据这些元素作为结尾任意的连接数据。{.yellow}
实现
以上是一个基本树的目录组成结构,分别包括:
++FlowTreeOwner++ 树持有者,继承自MonoBehaviour
++FlowTree++ 树数据,继承自Graph
++FTNode++ 基础节点数据,继承自Node
++FTConnection++ 基础连接数据,继承自Connection
FlowTreeOwner123publi ...
游戏开发
未读
版本号
创建/更新时间
操作
V1.0
2023-07-13 09:10:43
创建
V1.1
2023-07-19 09:33:17
添加着色器变体说明
YooAssets 是一个资源管理工具,基于ab包实现。
通过YooAssets 可以方便的对资源进行管理、分析、更新。
快速食用
打开管理界面 Edit/Project Settings/Package Manager
1234// 输入以下内容(中国版)Name: package.openupm.cnURL: https://package.openupm.cnScope(s): com.tuyoogame.yooasset
在包管理器中安装YooAssets
划分组别
构建工具
报告工具
在打包后可以使用报告工具查看相关数据:
调试工具
模式
模式
说明
编辑器模式EditorSimulateMode
无需构建,直接使用
离线模式OfflinePlayMode
单机游戏使用
在线模式HostPlayMode
在线游戏热更新
代码范例
封装资源加载
我们可以对通用 ...
EnhancedScroller是一个加强版本的滚动区域组件,可以改善滚动条的性能并实现例如无限滚动的效果。
简单示例
创建一个滑动区域:
滑动区域需要3个部分:滑动区域、滚动条、Mask
可以使用Rect Mask 2D 替代Mask获得更好效果
列表内容都需要继承EnhancedScrollerCellView
PersonItem1234567891011121314151617181920public class PersonItem: EnhancedScrollerCellView{ private TextMeshProUGUI _text; private PersonModel _model; private Button _button; private void Awake() { _text = GetComponentInChildren<TextMeshProUGUI>(); _button = GetComponent<Button>(); ...
📑写在前面
Address是Unity推出的Ab包的新封装,可以更方便的实现Ab包的资源加载,为做区分这里将Address打出的包称之为aa包。
需求环境
在什么情况下我们需要使用Address呢?
当我们需要使用Ab包时,可以使用Address替代传统Ab包。
当我们需要将资源进行分组时,例如美术场景和程序分离。
当我们需要进行热更新时。
当我们希望在外部更新程序或资源时。
…
1.构建本地静态包
先来
写在前面
在游戏存储中我们可以使用多种方法,json、二进制、xml、csv、excel、或者是文本、自定义格式等等。使用这些的时候我们基本都需要将文件整个读入内存中,那有没有一种办法可以不用将所有数据载入内存呢?
答案就是————使用++数据库++。
数据库的种类很多,大都都服务于网络服务,在单机游戏中使用数据库的话,可以选择sqllite。
SqlLite
sqllite是一种轻量的文件型数据库,整个数据库只有一个.db文件而且其使用范围非常广,支持的平台多,是我们在使用Unity开发单机游戏时的好选择。
快速食用
要使用SqlLite,我们至少需要导入:
sqllte3.dll
Mono.Data.Sqllite.dll
在这里我们额外导入Dapper作为Orm方便我们对数据进行curd:
Dapper.dll
Dapper.Contrib.dll
Mono.Data.Sqlite.dll
创建数据表
首先我们创建一个数据表的模型类User如下:
在类名上标注表的名称,++这个名称需要和db文件中的数据表名称对应++。
12345678910111213141516171 ...
写在前面
接触过web前端的人,应该都知道网页 以Html+Css+Js的形式构成,这种高度灵活的方式一直延续至今。当然后续推出了如Vue、Rective等前端框架和Thymeleaf、Asp等模板引擎。。。扯远了…
总之,我们可以借鉴Web的做法,使用类似的结构去编写Unity Ui,如Unity 的新UI系统 UIElement(UiToolkit)也是这么做的。此文并不想介绍UIElement,因为通过作者实际使用体验来说,UIElement还有很多路要走,可能在制作编辑器领域可以打破原先Gui的桎梏,然而在运行时下的UI,MarkLight 则舒服许多。
关于MarkLight
在Ui框架的领域中一直流行MVVM的设计,M 模型 V 视图 VM 视图模型 通过三者的配合,可以将表现层与逻辑层相分离,有利于解除耦合。MarkLight 同样是使用了这一套设计方案,通过Xml文件编写View,配合ViewModel的C#文件进行控制。同时吸纳了Html的优点,使用类Css的Xml文件可以对控件进行统一的样式配置,这让换肤和界面规范统一变得十分容易。
快速食用
首先我们可以通过包 ...














