[GameFramework]Demo3-加载UI

笨木头  2018-03-7 17:17   Game Framework,Unity3D   阅读(2,855)   18条评论

本文 Game Framework 版本:3.0.9

本文 Unity3D 版本:2017.3

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

 

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

 

对于Demo2,可能写的有点乱,因为我没想到切换流程和场景是要涉及到多个知识点的,我的错。

这次我们简单一点,来演示一下如何用Game Framework框架加载UI,不涉及其他操作。

1.创建基础项目

请确保你已经阅读过Demo1和Demo2,或者你已经知道如何创建Game Framework空项目,以及切换流程的方式。

我们需要新建一个Demo3项目,并且把初始场景和菜单场景给创建好,文件列表如下:

Demo3:初始场景

Demo3_Menu:菜单场景

Demo3_ProcedureLaunch.cs:初始流程脚本

Demo3_ProcedureMenu.cs:菜单流程脚本

至于初始场景要把Game Framework的基础组件预制体拖到场景里这种事情我就不啰嗦了。

2.初始流程脚本

Demo3_ProcedureLaunch脚本的内容如下:

using System.Collections;

using System.Collections.Generic;

using GameFramework;

using GameFramework.Procedure;

using UnityEngine;

using UnityGameFramework.Runtime;

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

public class Demo3_ProcedureLaunch : ProcedureBase {

    protected override void OnEnter(ProcedureOwner procedureOwner)

    {

        base.OnEnter(procedureOwner);

        SceneComponent scene

            = UnityGameFramework.Runtime.GameEntry.GetComponent<SceneComponent>();

        // 切换场景

        scene.LoadScene(“Demo3_Menu”, this);

        // 切换流程

ChangeState<Demo3_ProcedureMenu>(procedureOwner);

    }

}

即,在一开始的时候就切换到菜单场景和菜单流程。

3.菜单流程脚本

Demo3_ProcedureMenu脚本内容如下:

using System.Collections;

using System.Collections.Generic;

using GameFramework;

using GameFramework.Procedure;

using UnityEngine;

using UnityGameFramework.Runtime;

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

public class Demo3_ProcedureMenu : ProcedureBase {

    protected override void OnEnter(ProcedureOwner procedureOwner)

    {

        base.OnEnter(procedureOwner);

        // 加载框架UI组件

        UIComponent UI

            = UnityGameFramework.Runtime.GameEntry.GetComponent<UIComponent>();

        // 加载UI

        UI.OpenUIForm(“Assets/Demo3/UI_Menu.prefab”, “DefaultGroup”);

    }

}

这里就要稍微啰嗦一下了,UIComponent是Game Framework框架的基础组件,专门用于处理界面相关的逻辑。

比如我们现在要加载UI,就需要用到它的OpenIUIForm的函数。

函数的第一个参数需要的是UI预制体所在的路径,需要完整路径,从Assets目录开始。

函数的第二个参数需要的是UI所属的分组,比如不同的UI分组显示的层次会不一样,这里我们随便填一个”DefaultGroup”就好,应该没关系的吧,呵呵。(旁白:总感觉好随意啊!不是很靠谱的感觉)

4.UI_Menu.prefab预制体

UI_Menu是我们自己创建的预制体,怎么创建的,我就不说了,这个是Unity3D基础中的基础,如果连这个都不知道的话…(旁白:你大声说出来)

那我就稍微说两句吧,直接在Hierarchy视图里创建一个TextUI,然后调调文字,改改颜色,大家自己喜欢就好。

然后把它拖到Project视图,它就会变成一个蓝色的东西:

这个就是预制体了,Hierarchy视图里的那个UI就可以删掉了。

5.运行测试

在运行之前,记得把我们的流程给勾上,初始流程也要选上:

然后运行Demo3场景,你们会发现…(旁白:报错了!)

对,它报错了,说找不到UI什么的…

果然,UI分组的名称不能乱填呢,呵呵的(旁白:刀我已经买好了,大家说句话就行)

选中Demo3场景的Hierarchy视图里的UI组件,然后给它添加一个分组即可:

然后运行,应该能看到效果:

OK,已经看到我们的UI加载出来了,本次Demo完美结束。(旁白:等等!又报错了!)

那么,下一篇我们再演示点别的什么吧(旁白:别走!报错了!)

6.UI逻辑处理

好吧,果然逃不掉呢。

是的,又报了新的错误:Can not get UI form logic,意思是,无法获得能量,运行失败…才怪呢。是因为缺少UI的逻辑处理脚本了。

我们新建一个脚本,命名为Demo3_UIMenu.cs:

using GameFramework;

using UnityEngine;

using UnityGameFramework.Runtime;

public class Demo3_UIMenu : UIFormLogic {

}

对,就是这么简单,但是必须继承UIFormLogic,这个脚本是用于处理UI逻辑的。

然后把这个脚本拖到UI_Menu预制体上:

OK,真的没问题了。

18 评论

  1. 想问一下通过GameFramework生成UI实例之后,如何实现显示和隐藏的方法呢?
    使用GF之前我一般是直接获得UI的GameObject,通过setActive来实现,但是现在一头雾水…

    1. 生成UI成功后,保存UI的实例,然后调用GameEntry.UI.CloseUIForm就可以隐藏UI了。
      至于显示UI,还是用OpenUIForm,因为有缓存机制,它并不会重新创建一个新的实例

  2. 有个问题。UI会被加载到GameFramework\UI\UI Form Instances下面。怎么让他生成再当前场景中呢。我是从场景1,跳转到场景2,然后生成UI。但是UI生成到了场景1中

    1. 框架默认就是要加载到UI下的,至于有没有配置项可以把UI加载到你需要的地方,我暂时没有发现。
      但是,如果你确实想加载到你需要的场景,我目前知道的方式就是,由自己通过prefabs来创建UI的GameObject,而不是通过OpenUI来创建。

      1. 我也遇到了这样的问题 按照步骤来走的话 UI生成在初始界面而不是Menu界面 请问作者是如何解决的

  3. 比如那个UIFormLogic类,在自己的例子里面不会高亮,在StarForce项目里面就会高亮,我手动是可以在我的项目里面找到这个类的,运行也不会报错。。

    1. 比如那个UIFormLogic类,在自己的例子里面不会高亮,在StarForce项目里面就会高亮,我手动是可以在我的项目里面找到这个类的,运行也不会报错。。

  4. 写的虽然简单,但是个人觉得作者还是很意思的,比单纯的看代码,自己琢磨要好很多。感谢作者的分享。

发表评论

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