这节课我们一起来学习如何把play界面过渡到end界面。由于我们现在没有做游戏部分,所以我们暂时设置在play界面3秒钟之后自动进去end界面。

之前一节中,我们在palyState中代码如下:

State playState (){StateWithEventMap state = new StateWithEventMap ();  //带消息映射表的状态类state.onStart += delegate {view.play.gameObject.SetActive(true);};state.onOver += delegate {view.play.gameObject.SetActive(false);};return state;}

现在我们修改下:

State playState (){StateWithEventMap state = TaskState.Create (delegate {TaskWait tw =new TaskWait();tw.setAllTime(3f);return tw;}, fsm, "end");state.onStart += delegate {view.play.gameObject.SetActive(true);};state.onOver += delegate {view.play.gameObject.SetActive(false);};return state;}

三秒之后进入end状态,Create函数的定义如下:

然后我们在Hierarchy面板中新建一个空的GameObject,然后改名为TaskManager,并把GDGeek工具包中的taskmanager.cs脚本拖给它。

运行游戏,我们发现可以跳转。结束时的按钮,重新开始游戏,我们为之添加响应,选中按钮,在右边的面板中增加函数,绑定到Ctrl中的fsmPost中,参数为Restart,如图:

然后我们在endState函数中添加响应:

state.addEvent("Restart","begin");  //得到重新开始按钮电击事件的话,进去begin状态

再次运行游戏,发现运行完美。附截图:

附上我们修改后的Ctrl.cs的全部代码:

using UnityEngine;
using System.Collections;
using GDGeek;public class Ctrl : MonoBehaviour {private FSM fsm = new FSM();public  View view=null;public void fsmPost(string msg){fsm.post (msg);}// Use this for initializationvoid Start () {fsm.addState ("begin",beginState());fsm.addState ("play",playState());fsm.addState ("end",endSdtate());fsm.init ("begin");}// Update is called once per framevoid Update () {}State beginState (){StateWithEventMap state = new StateWithEventMap ();  //带消息映射表的状态类
state.onStart += delegate {view.begin.gameObject.SetActive(true);};state.onOver += delegate {view.begin.gameObject.SetActive(false);};state.addEvent("clickStart","play");  //得到开始按钮电击事件的话,进去play状态return state;}State playState (){StateWithEventMap state = TaskState.Create (delegate {TaskWait tw =new TaskWait();tw.setAllTime(3f);return tw;}, fsm, "end");state.onStart += delegate {view.play.gameObject.SetActive(true);};state.onOver += delegate {view.play.gameObject.SetActive(false);};return state;}State endSdtate (){StateWithEventMap state = new StateWithEventMap ();  //带消息映射表的状态类state.onStart += delegate {view.end.gameObject.SetActive(true);};state.onOver += delegate {view.end.gameObject.SetActive(false);};state.addEvent("Restart","begin");  //得到重新开始按钮电击事件的话,进去begin状态return state;}
}

至于为什么要新建一个TaskManager,暂时先留出空白,咱们稍后解释。


为什么要新建TaskManager?(暂留)


我是orzangleli,谢谢你一直阅读到现在,如果你看到了这篇文章,请麻烦回复我下,给我点动力更新下去,多谢!

转载于:https://www.cnblogs.com/orzangleli/p/5003020.html

unity3D 实战 《小十传奇》系列之三:控制层(下)相关推荐

  1. ES优化实战 - 小操作节省百分之三十以上的磁盘空间

    通过关闭索引的 _source来节省磁盘 un_source 是去掉存储的数据.在查询的时候,不反回数据.数据只做索引和倒排这些.  这样做的意思是,只让es做检索,不做存储.es检索完,只返回一个i ...

  2. Unity3D实战【七】Cinemachine Post Processing 摄像机跟踪和后处理

    一.摄像机跟随 1.PackManger中安装Cinemachine 2.点击菜单栏的Cinemachine->Create Virtual Camera,会代替原来的Main Camera 3 ...

  3. 雷军:《我十年的程序员生涯》系列之三(失败的大学创业经历)

    // 转载自雷军2008年11月10日写的博客.以下内容为博客原文: 不少人想白手起家.空手套狼,在今天的商业社会里这是非常不现实的一件事情.我特别想问:你为什么不能先做能力及资源上的积累后再创业呢? ...

  4. 应用安全系列之三十四:数值溢出

    应用程序中难免会遇到数字的处理,针对数字的处理如果不当也会造成严重的问题,著名的Heartbleed漏洞也是没有验证数字的有效性导致的. 数值处理不好的,轻则产生异常,重则影响整个程序的正常运行,因此 ...

  5. 《神探tcpdump第五招》-linux命令五分钟系列之三十九

    == [系列文章] <神探tcpdump第一招>-linux命令五分钟系列之三十五 <神探tcpdump第二招>-linux命令五分钟系列之三十六 <神探tcpdump第 ...

  6. Debezium报错处理系列之三十六:Task threw an uncaught and unrecoverable exception. Task is being killed and will

    Debezium报错处理系列之三十六:Task threw an uncaught and unrecoverable exception. Task is being killed and will ...

  7. 小鑫の日常系列故事(十)——排名次

    小鑫の日常系列故事(十)--排名次 Description 小鑫在来到SDUT之后,经过十分刻苦的学习和努力终于进入了ACM集训队.很快又一次ACM集训队的选拔就要开始了,集训队员们又忙碌了起来.他也 ...

  8. Debezium报错处理系列之三十八:Timeout expired while fetching topic metadata

    Debezium报错处理系列之三十八:'trace': 'org.apache.kafka.common.errors.TimeoutException: Timeout expired while ...

  9. 软考高级信息系统项目管理师系列之三十五:组织级项目管理

    软考高级信息系统项目管理师系列之三十五:组织级项目管理 一.组织级项目管理内容 二.组织级项目管理概述 三.组织级项目管理对战略的支持 四.组织级项目管理框架内容 五.成熟度模型 组织级项目管理知识包 ...

最新文章

  1. 2.微服务间调用ribbon
  2. BI中事实表和维度表的定义+具体SQL操作(转载+自己添加实验)
  3. 共享一些变态的签名,希望不太OLD
  4. php导出excel数据代码,phpspreadsheet导出数据到Excel的方法介绍(代码示例)
  5. 【registry】NoSuchFieldError: INCLUDE_ALL
  6. es6语法在ios低版本的支持性
  7. JSP页面间传递参数
  8. 【3D制图软件●13.4.059中文破解版】一款强大的CAD软件
  9. java big5转换为gbk_简体繁体转换代码(Big5-GB | GBK简体-GBK繁体)
  10. GHOST XP SP3 遐想网络 纯净驱动预览版 2.0
  11. 如何在html中插入表情包,一款支持插入表情的编辑器实现代码(简单思路挺重要)...
  12. 模电实验——实验三 集成运算放大器的基本应用
  13. 电容在计算机运用原理,隔直电容的作用及原理 - 全文
  14. symbian学习笔记
  15. 静态背景下运动目标检测 matlab_动态拉伸、静态拉伸你做对了么?
  16. 已设置过微信号怎么改?新版微信已经支持这个功能!
  17. 【读书笔记】数据化管理:洞悉零售及电子商务运营
  18. 2011年计算机三级,2011年计算机三级网络技术辅导:网络技术上机分析
  19. Redis在win7下安装步骤
  20. HTTP 错误 404.3 - Not Found由于扩展配置问题而无法提供您请求的页面。如果该页面是脚本,请添加处理程序。如果应下载文件,请添加 MIME 映射

热门文章

  1. LeetCode 第 69 场力扣双周赛
  2. 【C语言】三子棋游戏
  3. python 7-24 sdut-array2-2-局部峰值 (10 分)
  4. db文件 linux查看工具,Linux最大文件句柄数查看及修改
  5. 华科计算机专硕英语几,考研考华科计算机考数学几英语几啊,另外考华科数..._考研_帮考网...
  6. 七牛HTML 上传按钮,七牛 JSSDK 配置+常见问题
  7. Linux下文件开头的feff的问题
  8. 吴恩达深度学习2.1练习_Improving Deep Neural Networks_initialization
  9. redhat6.5配置阿里云yum源
  10. 那是我夕阳下的奔跑--一个萌新的觉醒