在学习了基于UnityGameFrameWork的starForce后我想把UGF和我的demo做一个结合。同时也是学习的总结吧。
最后效果:https://www.bilibili.com/video/BV1Bh41127z1/
首先在作者的github上下载UGF 这个工程 (ps:GF以动态库的形式存在于项目文件中的那个)
这个工程中不需要再替换源码了避免使用者碰到不该碰到的东西。
- 将框架从本地导入upm中
接着构建几个基本的流程脚本实现一下初始化游戏并进入场景切换流程切换到菜单场景的操作。
在上图中 1 的位置是我自定义的命名空间 在StarForce项目中就是StarForce
ugf可以在各种项目中使用 starforce可以算是作者给我们演示的ugf的标准操作了
在别的羡慕中出现starforce这个字眼未免太有违和感了,所以还是改成GameMain了。
在上图 2 中的位置是继承的类不是框架内部的ProcedureBase,而是在GameMain中做的一层封装如下
后面会遇到很多这样的需要我们在游戏层面上对UFG中现有的接口做一些逻辑处理的封装,详情见StarForce项目。
- 在我依次构造了ProcedureLaunch,ProcedureSplash,ProcedurePreload,ProcedureChangeScene等流程。在构造ProcedureChangeScene流程的时候有如下代码
如果没有生成数据表的话上面这里应该会有报错的下划线,因为根就没有这个DR类生成。这里的DR类是使用更据数据表生成的代码类,数据表就是平时在公司里由策划配置的配置表,gameframework配置数据表的格式是txt的但也是可以在excel中打开编辑的。
dr类脚本可以我们自己手打依葫芦画瓢,也可以通过作者的编辑器脚本自动生成。
作者在starforce项目中也集成了批量生成数据表代码的编辑器脚本,下面我简单介绍下原理和使用方法。
先是我们自己创建excel文件如scene
文件保存为unicode编码的txt文件,不要保存成ANSI编码。虽然作者E大在gf的官网有篇早期的文章让我们保存成ANSI编码但已经年代非常久远了,详情请见github上木头前辈的和E大的QA。
接着将我们保存成txt格式的数据配置表放入unity工程中
这个路径和starforce中的不太一样,是我这个工程的放置数据配置表的路径,所以在这个脚本中要改下
这个脚本中其他的地方也可以更据项目的不同更改,举一反三啦。
注意到项目中存放数据配置表的路径下每张表都有两份,实际上根据我上面的操作放进来的只有一份,另一份是生成的时候创建的二进制文件。(我已经生成过一遍了)事实上生成的时候会生成二进制文件和配置表的DR类这两部分。
二进制文件和dr类的路径如下根据自己的需求更改。(这个脚本更据我上面的操作其实是没有的,别找了需要导入下面说到的编辑器脚本)
我不想手打DR类代码所以我要使用作者的编辑器批处理自动生成dr类代码,进入starforce一探究竟。
starforce批处理方法在这
粗略的看一下编辑器代码,挺复杂的。。。好在作者作者做了分类简单明了
全在这个文件夹下,拷到自己工程下的Editor文件夹里就行了。另外两个编辑器脚本暂时不知道用来干嘛的先不管。
在自己的工程里改掉一些地方行了(写的很好,现在是我的了 )
命名空间starforce都改掉大家都懂吧
这两个是生成DR类和二进制文件的方法
我比较关注的是生成dr类代码类。进去看一下
一下就看见这个了模板文件名了 大家都知道是怎么回事了吧
这是一条路径指向模板文件
看下这个模板文件虽然在开头有注释说不可修改由软件生成,但我研究的时候是不能生成的所以还是在starforce把这个模板文件拷过来。
这些大写加下划线的都是变量,生成不同的dr类的时候也是不同的
看了这两部分应该就懂了
并手写下需要生成的txt文件的名字如下
接着就可以生成数据表了,如果没看见生成的入口,试着解决下unity的报错,报错让编译器无法正常编译。解决报错的话就各凭本事吧很简单的。
- 经过上面的操作就能生成dr类了,接着试跑通流程切换场景。
在预加载流程的时候 进入流程的时候要先读一些默认配置,加载配置表,加载字体
有个地方我注释掉了对我这个小demo暂时没用。
默认配置有什么用?
接下来就会用到。
在进入切换场景流程的时候要先设置下个场景的ID,这里场景id就是从默认配置中读出来的
看想starforce中的默认配置就懂了
同样拷到自己工程下,想自己写也可以。
进入切换场景流程的时候再拿出来就行了,根据这个ID去场景表中找到对应的资源名。然后切换场景。
buildsetting里记得add需要的场景。
流程就是上面一个流程。
然后是有些地方需要注意的 还是让我折腾了比较久
在预加载场景里这段代码一定要加,flag的值依赖于配置和数据表载入成功或是失败的订阅事件。
如果不加这段代码就是直接进入场景切换这个时候drscene还没初始化完成直接报空取不到数据,切换不了场景,我一度以为是数据表读取内部发生错误。