[Game Framework之StarForce解读]02.游戏入口

笨木头  2018-02-6 17:07   Game Framework,Unity3D   阅读(2,174)   6条评论

 

本文 Game Framework 版本:3.1.0

本文 Unity3D 版本:2017.3

更多GF教程和实例:https://github.com/mutouzdl/gameframework_demo.git

 

转载请注明,原文地址:http://www.benmutou.com/archives/2486
文章来源:笨木头与游戏开发

1.入口

游戏的入口很容易找,我才找了半天就找到了,就在这:

GameEntry很简单,只在Start的时候执行了两个初始化函数:

 

InitBuiltinComponents:初始化框架自带的基础组件;

InitCustomComponents:初始化我们自己的组件。

(另外一提,GameEntry类拆分为三个文件了,别以为只有上面那一点点代码)

 

2.InitBuiltinComponents

我重点要说的是InitBuiltinComponents,这个函数里对框架的所有基础组件进行了初始化,具体如何初始化的,不在本篇文章的范围内(旁白:当然了,因为他自己也不懂)

什么?你们非要我贴代码凑字数?好吧好吧,这个函数长这样:

 

3.真正的入口

游戏真的入口在哪里?按照官方的介绍,流程是负责控制生命周期的,所以我理所当然地先从流程入手去找游戏入口。

但是,我到IDE去找,只找到了这个:

我找到了所谓的流程(Procedure),但是这个对象的组件(ProcedureComponent)很奇怪,对,它没有任何可以让我赋值的地方。

为什么直接就出现了一堆流程属性?

我很疑惑,所以我随便选了一个名为【ProcedureMenu】的东西,然后去代码里找,我找到了:

public class ProcedureMenu : ProcedureBase

 

接着当然是再去看看ProcedureBase是什么了,我又看到了:

它只不过是一个继承了底层ProcedureBase的类,然后我想了一件可怕的事情,作者曾经这么说过,以下是原话:

**流程 (Procedure)**是贯穿游戏运行时整个生命周期的有限状态机。通过流程,将不同的游戏状态进行解耦将是一个非常好的习惯。对于网络游戏,你可能需要如检查资源流程、更新资源流程、检查服务器列表流程、选择服务器流程、登录服务器流程、创建角色流程等流程,而对于单机游戏,你可能需要在游戏选择菜单流程和游戏实际玩法流程之间做切换。如果想增加流程,只要派生自 ProcedureBase 类并实现自己的流程类即可使用

(旁白:别把MarkDown的语法也拷过来啊!)

 

重点是最后一句:【如果想增加流程,只要派生自 ProcedureBase 类并实现自己的流程类即可使用】,从作者的这句话里,我们可以得知此时作者的内心活动是我的底层会自动读取继承了ProcedureBase的类“。

对,如果我没瞎猜错的话,就是这个意思。

 

所以,我们的ProcedureMenu继承了ProcedureBase,理所当然的,会出现下面这种情况:

ProcedureMenu出现在了流程组件的属性里。

至于这些流程属性前面的勾,自然是代表要不要启用这个流程(对,我瞎猜的)。

而下方的【Entrance Procedure】下拉列表,自然是选择初始执行的流程了。

至于ProcedureMenu里面做了什么事情,我们先不管,肯定就是加载菜单场景之类的。

4.创建自己的流程(就是测试一下有没有瞎猜错)

为了更加明确流程的用法,我们来测试一下,自己加一个流程。

在StarForce的Scripts目录下,随便找个目录(比如Procedure),新建一个类,内容如下:

名为【ProcedureTest】的类,继承了框架的ProcedureBase类。接下来,回到IDE的界面,看看神奇的事情:

看到了吗?我们新加的流程也出现在流程组件的属性里了。

5.切换场景

从上图可以看到,底部有一个【Entrance Procedure】属性,该属性是一个下拉列表,表示游戏运行时第一个执行的流程。

这个默认第一个执行的流程是【ProcedureLaunch】,这个流程涉及的内容比较多,我们就不深入了解了(旁白:没错,他的意思就是他还没看懂)。

我们只要知道,ProcedureLaunch里做了一些初始化操作,并且切换到Menu场景。

6.唠叨一下

从流程添加的这个规则里,我感受到了框架的优秀之处。

虽然只是冰山一角,但是已经能预见到这是一个扩展性很强的框架。

好了,本篇到此结束,下一篇我们开始研究ProcedureMenu。

6 评论

  1. 博主你好,我在看这Demo的时候有一个地方有点疑惑,就是这个ProcedureComponent,它有一个m_AvailableProcedureTypeNames的数组和一个m_EntranceProcedureTypeName字段,然后在start()方法里直接就访问这里的数据了: ProcedureBase[] procedures = new ProcedureBase[m_AvailableProcedureTypeNames.Length]; 没找到它什么什么时候给这个m_AvailableProcedureTypeNames数组赋值的,但是调试的时候这里确实有7个数据。。。望解惑,感激不尽

    1. 嗯嗯,底层编辑器类 ProcedureComponentInspector 通过反射获取ProcedureBase所有子类信息。上面提到的数组也可以获得的。

    2. 嗯嗯,底层编辑器类 ProcedureComponentInspector 通过反射获取ProcedureBase所有子类信息。上面提到的数组也可以获得的。

  2. 嗯嗯,底层编辑器类 ProcedureComponentInspector 通过反射获取ProcedureBase所有子类信息。并绘制到Inspector上。

发表评论

电子邮件地址不会被公开。 必填项已用*标注