您的位置:首页 > 移动开发 > Unity3D

Unity3D架构系列之- FSM有限状态机设计(六)(总结篇)

2015-02-13 13:48 357 查看
由于最近一直赶项目进度,没时间写,昨晚终于项目终于完成了,空闲下来,做一个总结。在这一篇中主要是把前五章一起总结一下,以及通过举例演示如何使用?有限状态机在游戏中使用的地方非常多,比如我们界面之间的切换,角色的状态切换等等。所以非常值得大家去学习一下,接下来我们主要实现的功能,为了表达清楚,我通过图例给大家说明一下:





给大家解析一下,程序运行首先进入主菜单,里面有三个按钮,开始游戏,音量,退出游戏。先从第一个说起,如果是开始游戏,它会进入到下一个界面游戏界面,游戏界面有个返回主菜单功能。二者可以互相切换。接下来是音量按钮,整个按钮是调节音量的,调节好了后,点确认和取消都是返回主菜单。二者之间互相切换,最后一个是退出游戏,会进入是否退出界面,如果否,返回主界面,如果是真正的关闭游戏。我们就把这个简单的功能用我们的有限状态机实现一下:

首先我们声明两个对象:

events主要是创建一个全局的事件系统用于我们指定的UI。

FSM是作为一个状态机被驱动。

接下来我们注册几个状态用我们的状态机:

我们用EntryPoint告诉玩家我们第一个界面是主界面:

我们为主界面定义几个actions,OPEN_AUDIO,PLAY_GAME, QUIT_GAME.其中OPEN_AUDIO和QUIT_GAME用于取代顶部栈的状态。PLAY_GAME用于增加状态栈新的item。代码如下:

退出菜单响应PROCESS_QUIT action。代码如下:

上述代码主要实现的功能:如果确认游戏结束,否则返回主菜单。

游戏类是负责对于主菜单弹出栈顶元素的。

声音菜单保留它自己的状态,处理音量逻辑。代码如下:

最后将每一个事件系统挂到状态机的actions里面,代码如下:

大家可能会问,状态机是如何切换的,我们将在Update里面实现,代码很简单:

这样就可以每一帧都可以进行检测push还是top状态机了。

为了响应主界面我们定义了一个OnGUI函数:

最后因为我们涉及到主界面各个操作,所以它们都有自己的类。

我将它们都拿出来给大家分享:

主菜单中声音菜单的逻辑代码如下:

主菜单类逻辑代码如下:

我们定义了一个菜单操作的抽象类用于继承:

游戏退出类代码如下:

最后只要将下面的脚本挂到对象上就可以了:

测试用的代码一共有AudioMenUI.cs MainGame.cs MainMenuUI.cs MenuUI.cs QuitGameUI.cs TestUIState.cs.大家只要将TestUIStat.cs挂到对象上就可以运行了。在使用的过程中可以先调试一下,前五章是给大家封装的,可以直接将其运用到项目中。这里的类只是跟大家分享一下如何去运用。

有限状态机到这里就全部结束了。有什么问题欢迎一起讨论。接下来我会给大家分享其他技术点。。。。。

转自:http://jxwgame.blog.51cto.com/943299/1614093
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  架构 设计 unity3d