[GameFramework]Demo4-内置事件订阅

笨木头  2018-03-9 17:44   Game Framework,Unity3D   阅读(888)   3条评论

本文 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函数:

 

对于加载框架自带组件的方式,都是一样的,通过UnityGameFramework.Runtime.GameEntry.GetComponent的方式加载,以后就不多说了。

 

为了订阅事件,我们需要加载框架的EventComponent组件。

订阅事件的方式很简单:Event.Subscribe(事件唯一ID, 回调函数)。

 

OpenUIFormSuccessEventArgs是框架自带的事件类,这个事件类处理的是”打开界面成功事件”,而它的EventId只是一个确保唯一的int类型,用于标识这是什么事件。

而回调函数,当然就是事件发生时我们希望调用的函数了。

 

订阅完事件之后,就是调用UI租一间的OpenUIForm函数加载UI了, 前两个参数我们在Demo3介绍过了。

最后一个参数是UserData,这是一个自定义的数据,你想传什么都行,在事件发生时,它会通过回调函数传回来。

3.事件回调函数

最后就来看看事件回调函数长什么样吧:

 

通过回调函数的e参数,我们可以获取UserData对象,也就是我们在订阅事件时传入的对象。

4.运行测试

现在,运行游戏,看看效果:

如果能成功地看到日志输出,那就代表我们成功了。

3 评论

    1. 基本上是用于解耦的,举一个比较实在的例子:
      在游戏中,我们要知道是否有怪物死亡,一旦有怪物死亡,我们就需要更新UI上的怪物剩余数量、更新英雄的经验值、做其他我们希望做的事情。

      实现这种需求,我们可以简单地循环怪物列表,如果发现了状态为Dead的怪物,就进行以上的操作。
      但是这样会有很多问题,一个是效率低,另一个是让不同类型的操作耦合在一起了(因为以上的各种操作都需要在找出死亡怪物时执行)。

      而用事件订阅可以将以上主动的操作转换为被动,我们不需要遍历怪物列表,我们只需要在各个不同的地方订阅怪物死亡消息。
      当怪物死亡时,它自己发出一个怪物死亡消息即可,至于谁要做什么操作,怪物不用管,各自的订阅者会执行自己的逻辑。

      目前来说,如果没有事件订阅机制,我基本上写不出游戏了…(其实不仅仅是游戏,其他开发也是充满了各种事件订阅机制的)

发表评论

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