Unity Game FrameWork—模块使用—Event事件

官方说明:游戏逻辑监听、抛出事件的机制。
Game Framework 中的很多模块在完成操作后都会抛出内置事件,监听这些事件将大大解除游戏逻辑之间的耦合。
除了 Game Framework 内置事件外,使用者也可以定义自己的游戏逻辑事件,游戏中所有事件均派生自GameEventArgs 类,事件对象使用了引用池技术,以避免使用事件过程中频繁的内存分配。
官方对于事件的教程是比较全面的,有耐心的同学可以细看,这里大概说一下事件的使用。
看一下菜单流程ProcedureMenu中是如何订阅事件的

public override void OnEnter(ProcedureOwner procedureOwner)
{
    base.OnEnter(procedureOwner);
    GameEntry.Event.Subscribe(OpenUIFormSuccessEventArgs.EventId, OnOpenUIFormSuccess);
    m_StartGame = false;
    GameEntry.UI.OpenUIForm(UIFormId.MenuForm, this);
}

public override void OnLeave(ProcedureOwner procedureOwner, bool isShutdown)
{
    base.OnLeave(procedureOwner, isShutdown);
    GameEntry.Event.Unsubscribe(OpenUIFormSuccessEventArgs.EventId, OnOpenUIFormSuccess);
    if (m_MenuForm != null)
    {
        m_MenuForm.Close(isShutdown);
        m_MenuForm = null;
    }
}

private void OnOpenUIFormSuccess(object sender, GameEventArgs e)
{
    OpenUIFormSuccessEventArgs ne = (OpenUIFormSuccessEventArgs)e;
    if (ne.UserData != this)
    {
        return;
    }
    m_MenuForm = (MenuForm)ne.UIForm.Logic;
}

在OnEnter方法中订阅了UI打开成功事件
GameEntry.Event.Subscribe(OpenUIFormSuccessEventArgs.EventId, OnOpenUIFormSuccess);
OnLeave方法中取消订阅了UI打开成功事件
GameEntry.Event.Unsubscribe(OpenUIFormSuccessEventArgs.EventId, OnOpenUIFormSuccess);
注意:OpenUIFormSuccessEventArgs这个事件是UI打开事件,不单是菜单界面,其他界面可能也会注册事件,那怎么区分是哪个页面打开的事件呢?
其实所有注册该事件的地方都调用了,内部没有区分。只是在调用回调逻辑之后,判断是不是这个界面调用的回调。我们看一下这个是怎么实现的。
GameEntry.UI.OpenUIForm(UIFormId.MenuForm, this);
在打开UI时,我们传入了this,这个this很关键。传入了this,回调之后this存在UserData里面传回来了。
[图片]
看一下下图的源码,传入的this就是userData参数,userData用来创建事件,赋值给事件的属性了。
[图片]
回调时再传出事件,我们通过判断这个属性是不是this即可。
这里我们发现这个参数只是转了一圈什么都没有干,最后转回来用来判断和原来传入的是不是一样。那么我们传入的这个参数不一定是this,只要可以标记这个界面即可。
下图是框架的一部分回调事件,有需要时,可以先看下框架有没有已经定义好的事件。
[图片]

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值