本文 Game Framework 版本:3.0.9本文 Unity3D 版本:2017.3更多GF教程和实例:https://github.com/mutouzdl/gameframework_demo.git
转载请注明,原文地址:http://www.benmutou.com/archives/2571
文章来源:笨木头与游戏开发
这一篇我们来看看怎么订阅内置的一些事件,这些事件有很多很多,比如打开UI成功事件…以及……对,我们一起来看看吧。(旁白:你倒是多举几个例子啊!)
1.创建项目、初始场景、菜单场景
对于这些基础操作,大家参考之前的Demo就好了,这里不多说。
最终我们需要一个初始场景、一个菜单场景,菜单场景里随便加载一个菜单(使用框架的方式),如果大家不指定怎么做的话,请阅读《Demo3-加载UI》或者直接查看本Demo4源码。
2.订阅打开UI成功事件
还记得我们是在哪个地方打开UI的吗?(旁白:不记得)
OK,记得就好,我们的UI是在菜单流程里打开的,因为我们打开的是菜单UI。
为了在UI成功打开的时候做一些羞羞的事情,我们需要用到事件订阅,现在,打开Demo4_ProcedureMenu.cs脚本,修改OnEnter函数:
protected override void OnEnter(ProcedureOwner procedureOwner)
{
base.OnEnter(procedureOwner);
// 加载框架Event组件
EventComponent Event
= UnityGameFramework.Runtime.GameEntry.GetComponent<EventComponent>();
// 加载框架UI组件
UIComponent UI
= UnityGameFramework.Runtime.GameEntry.GetComponent<UIComponent>();
// 订阅UI加载成功事件
Event.Subscribe(OpenUIFormSuccessEventArgs.EventId, OnOpenUIFormSuccess);
// 加载UI
UI.OpenUIForm("Assets/Demo4/UI_Menu.prefab", "DefaultGroup", this);
}
对于加载框架自带组件的方式,都是一样的,通过UnityGameFramework.Runtime.GameEntry.GetComponent的方式加载,以后就不多说了。
为了订阅事件,我们需要加载框架的EventComponent组件。
订阅事件的方式很简单:Event.Subscribe(事件唯一ID, 回调函数)。
OpenUIFormSuccessEventArgs是框架自带的事件类,这个事件类处理的是"打开界面成功事件",而它的EventId只是一个确保唯一的int类型,用于标识这是什么事件。
而回调函数,当然就是事件发生时我们希望调用的函数了。
订阅完事件之后,就是调用UI租一间的OpenUIForm函数加载UI了, 前两个参数我们在Demo3介绍过了。
最后一个参数是UserData,这是一个自定义的数据,你想传什么都行,在事件发生时,它会通过回调函数传回来。
3.事件回调函数
最后就来看看事件回调函数长什么样吧:
private void OnOpenUIFormSuccess(object sender, GameEventArgs e)
{
OpenUIFormSuccessEventArgs ne = (OpenUIFormSuccessEventArgs)e;
// 判断userData是否为自己
if (ne.UserData != this)
{
return;
}
Log.Debug("UI_Menu:恭喜你,成功地召唤了我。");
}
通过回调函数的e参数,我们可以获取UserData对象,也就是我们在订阅事件时传入的对象。
4.运行测试
现在,运行游戏,看看效果:
如果能成功地看到日志输出,那就代表我们成功了。