首页 > 编程语言 > 详细

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

时间:2015-11-28 18:22:45      阅读:616      评论:0      收藏:0      [点我收藏+]

这节课我们一起来学习如何把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 initialization
    void Start () {
        fsm.addState ("begin",beginState());
        fsm.addState ("play",playState());
        fsm.addState ("end",endSdtate());
        fsm.init ("begin");

    }
    // Update is called once per frame
    void 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,谢谢你一直阅读到现在,如果你看到了这篇文章,请麻烦回复我下,给我点动力更新下去,多谢!

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

原文:http://www.cnblogs.com/orzangleli/p/5003020.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!