GameFramework实战一(流程的创建)

GameFramework的导入

看了之前的之前的文章,我默认大家都已经调试好了,如果没有的话,我推荐GF作者的工程源码

第一个流程的创建

在工程导入之后,我们的初始目录是这样的请添加图片描述

在GameMain文件夹中中是GF作者写的代码(我们先不要删除),我们可以先不看他们
我们在Scripts下创建一个文件夹叫做Procedure,在向其中添加一个叫做ProcedureStart.cs的文件
创建完毕之后应该是这样的:
请添加图片描述
我们打开文件进行编辑

using GameFramework;
using GameFramework.Procedure;
using UnityGameFramework.Runtime;
using ProcedureOwner = GameFramework.Fsm.IFsm<GameFramework.Procedure.IProcedureManager>;

namespace Tutorial
{
    public class ProcedureStart : ProcedureBase
    {
        // 游戏初始化时执行。
        protected override void OnInit(ProcedureOwner procedureOwner)
        {
            base.OnInit(procedureOwner);
            // 打印调试级别日志,用于记录调试类日志信息
            Log.Debug("OnInit");
        }

        // 每次进入这个流程时执行。
        protected override void OnEnter(ProcedureOwner procedureOwner)
        {
            base.OnEnter(procedureOwner);
            Log.Debug("OnEnter");

        }

        // 每次轮询执行。
        protected override void OnUpdate(ProcedureOwner procedureOwner, float elapseSeconds, float realElapseSeconds)
        {
            base.OnUpdate(procedureOwner, elapseSeconds, realElapseSeconds);
            Log.Debug("OnUpdate");
        }

        // 每次离开这个流程时执行。
        protected override void OnLeave(ProcedureOwner procedureOwner, bool isShutdown)
        {
            base.OnLeave(procedureOwner, isShutdown);
            Log.Debug("OnLeave");
        }

        // 游戏退出时执行。
        protected override void OnDestroy(ProcedureOwner procedureOwner)
        {
            base.OnDestroy(procedureOwner);
            Log.Debug("OnDestroy");
        }
    }
}

找到文件夹中的TutorialLauncher场景打开
我们点击GameFramework中的procedure,切换右边的入口为ProcedureStart请添加图片描述

请添加图片描述

运行结果:
请添加图片描述

添加更多的流程,进行流程切换

假设我们要做一个登录游戏的功能,我们需要一个登录流程,如果没有账号我们需要注册,在选择登陆和注册的时候我们需要一个菜单选择流程,登录成功之后我们进入到游戏流程

我们画一个图:

请添加图片描述

我们创建四个类:
ProcedureMenuChose //菜单选择流程
ProcedureLogin //登陆流程
ProcedureRegister //注册流程
ProcedureGameMain //游戏流程

由于我们还没有讲到UI的部分,我们没有办法进行输入,我们用特殊的方式来代替

切换到游戏流程的时候我们,需要切换场景。
我们在如图所示的地方创建场景
请添加图片描述

我们在File->build setting里面添加场景双击GameMain场景,和源场景请添加图片描述

我们点击GameFramework中的procedure调整检视面板(入口也要调整)
请添加图片描述

下面我们开始编码,由于我们没有输入,我们采用计时的方式让大家感受一下流程的切换

ProcedureMenuChose.cs

namespace Tutorial
{
    public class ProcedureMenuChose : ProcedureBase//ProcedureLogin	
    {
        float m_time_range;//流程切换的时间间隔
        float m_time;//计时
        bool index;//菜单选择,ture表示注册,false表示登陆

        protected override void OnInit(ProcedureOwner procedureOwner)
        {
            base.OnInit(procedureOwner);
            m_time = 0f;//计时清理
            m_time_range = 1f;//间隔
            index = true;//一开始我们选择注册
        }

        // 每次进入这个流程时执行。
        protected override void OnEnter(ProcedureOwner procedureOwner)
        {
            base.OnEnter(procedureOwner);
            Log.Debug("进入菜单流程");
            m_time = 0f;//计时清理
        }

        // 每次轮询执行。
        protected override void OnUpdate(ProcedureOwner procedureOwner, float elapseSeconds, float realElapseSeconds)
        {
            base.OnUpdate(procedureOwner, elapseSeconds, realElapseSeconds);
            m_time += elapseSeconds;//elapseSeconds就是Time.deltaTime
            if (m_time>1f)
            {
                if(index)
                {
                    ChangeState<ProcedureRegister>(procedureOwner);//切换到注册流程
                    index = !index;
                }
                else
                {
                    ChangeState<ProcedureLogin>(procedureOwner);//切换到登陆流程
                    index = !index;
                }
            }
        }
    }
}

ProcedureLogin.cs:

namespace Tutorial
{
    public class ProcedureLogin : ProcedureBase//ProcedureRegister	
    {
        float m_time_range;//流程切换的时间间隔
        float m_time;//计时

        protected override void OnInit(ProcedureOwner procedureOwner)
        {
            base.OnInit(procedureOwner);
            m_time = 0f;//计时清理
            m_time_range = 1f;//间隔
        }

        // 每次进入这个流程时执行。
        protected override void OnEnter(ProcedureOwner procedureOwner)
        {
            base.OnEnter(procedureOwner);
            Log.Debug("进入登陆流程");
        }

        // 每次轮询执行。
        protected override void OnUpdate(ProcedureOwner procedureOwner, float elapseSeconds, float realElapseSeconds)
        {
            base.OnUpdate(procedureOwner, elapseSeconds, realElapseSeconds);
            m_time += elapseSeconds;
            if (m_time > 1f)
            {
                ChangeState<ProcedureGameMain>(procedureOwner);//登陆成功,切换到游戏流程
            }
        }
    }
}

ProcedureRegister.cs:

namespace Tutorial
{
    public class ProcedureRegister : ProcedureBase//ProcedureGameMain	
    {
        float m_time_range;//流程切换的时间间隔
        float m_time;//计时

        protected override void OnInit(ProcedureOwner procedureOwner)
        {
            base.OnInit(procedureOwner);
            m_time = 0f;//计时清理
            m_time_range = 1f;//间隔
        }

        // 每次进入这个流程时执行。
        protected override void OnEnter(ProcedureOwner procedureOwner)
        {
            base.OnEnter(procedureOwner);
            Log.Debug("进入注册流程");
        }

        // 每次轮询执行。
        protected override void OnUpdate(ProcedureOwner procedureOwner, float elapseSeconds, float realElapseSeconds)
        {
            base.OnUpdate(procedureOwner, elapseSeconds, realElapseSeconds);
            m_time += elapseSeconds;
            if(m_time>1f)
            {
                ChangeState<ProcedureMenuChose>(procedureOwner);//注册失败,切换到菜单选择流程
            }
        }
    }
}

ProcedureGameMain.cs:

namespace Tutorial
{
    public class ProcedureGameMain : ProcedureBase//ProcedureGameMain
    {
        // 每次进入这个流程时执行。
        protected override void OnEnter(ProcedureOwner procedureOwner)
        {
            base.OnEnter(procedureOwner);
            Log.Debug("进入游戏主流程,并切换主场景");
            SceneComponent Scene
            = UnityGameFramework.Runtime.GameEntry.GetComponent<SceneComponent>();
            Scene.LoadScene("Assets/GameMain/Scene/GameMain.unity");
        }

        // 每次轮询执行。
        protected override void OnUpdate(ProcedureOwner procedureOwner, float elapseSeconds, float realElapseSeconds)
        {
            base.OnUpdate(procedureOwner, elapseSeconds, realElapseSeconds);
        }
    }
}

总结:

我们通过实战,体会了流程的创建,流程的切换的基本操作。其实流程很简单,就是继承自ProcedureBase就可以了,关于其他操作请看后续教程

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值