ET框架---HotFix.Init学习笔记

HotFix.Init学习笔记

请大家关注我的微博:@NormanLin_BadPixel坏像素


我们之前看的代码都是属于Modle命名空间下的,现在我们需要来看看热更下的代码了。我们的入口就是Init.Start方法。

public static void Start()
{
    try
    {
        Hotfix.Scene.ModelScene = Game.Scene;

        // 注册热更层回调
        Game.Hotfix.Update = () => { Update(); };
        Game.Hotfix.LateUpdate = () => { LateUpdate(); };
        Game.Hotfix.OnApplicationQuit = () => { OnApplicationQuit(); };

        // 注册热更层消息回调
        ClientDispatcher clientDispatcher = new ClientDispatcher
        {
            HotfixCallback = (s, p) => { HotfixMessageDispatcher.Run(s, p); }
        };
        Game.Scene.GetComponent<NetOuterComponent>().MessageDispatcher = clientDispatcher;

        Hotfix.Scene.AddComponent<UIComponent>();
        Hotfix.Scene.AddComponent<OpcodeTypeComponent>();
        Hotfix.Scene.AddComponent<MessageDispatherComponent>();

        //Hotfix.EventSystem.Run(EventIdType.InitSceneStart);
        Hotfix.EventSystem.Run(EventIdType.LandlordsInitSceneStart);
    }
    catch (Exception e)
    {
        Log.Error(e.ToStr());
    }
}

作者的注释很详细咯。我们在这里,终于看到了之前在NetOuterComponent留下的坑,对网络消息的处理。在ClientDispatcher内。这里大家注意,网络消息也分为热更层的消息跟非热更层的消息,两者会做不同的处理,所以在这里创建ClientDispatcher的时候一并注册了热更层消息回调。


本来想在这里直接讲ClientDispatcher的,但是写完发现篇幅有点长,还讲了点其他东西,所以这里分下P吧。ClientDispatcher学习笔记


在注册了消息调度后,添加了热更层的UIComponent、OpcodeTypeComponent、MessageDispatherComponent。UI我们先不讲,其他两个在ClientDispatcher学习笔记里面顺带讲了。
最后,我们通过Hotfix.EventSystem调用了EventIdType.LandlordsInitSceneStart事件。而Hotfix.EventSystem,跟Model.EventSystem区别不大,大家可以自己去看一下。需要注意的是,在HotFix.EventSystem中注册的事件,也会注册到mono层。

// hotfix的事件也要注册到mono层,hotfix可以订阅mono层的事件
Action<List<object>> action = list => { Handle(aEventAttribute.Type, list); };
Game.EventSystem.RegisterEvent(aEventAttribute.Type, new EventProxy(action));

EventProxyMessageProxy同类型的功能。
我们来看看都有什么订阅了LandlordsInitSceneStart事件。

[Event(EventIdType.LandlordsInitSceneStart)]
public class InitSceneStart_CreateLandlordsLogin : AEvent
{
    public override void Run()
    {
        //创建登录界面
        UI ui = Hotfix.Scene.GetComponent<UIComponent>().Create(UIType.LandlordsLogin);
    }
}

创建了个UI。。。好吧,这里如果不讲点UI方面的东西就讲不下去了。

这里说明一下UIComponent的一个作用,就是在创建UI实例的时候,会根据传入的UIType进行不同的初始化操作,每个UI的初始化都写在一个单独的类当中。具体怎么实现的我们之后再详细学(我大致浏览过嘿嘿),现在我们只要知道,当我们创建**UIType.LandlordsLogin**UI时,可以找到对应的初始化方法。我们来看看,这个UI到底是如何初始化的。

LandlordsLoginFactory

作者已经注释了许多,这里我们需要注意的是这段代码。

//创建登录界面实体
UI ui = ComponentFactory.Create<UI,GameObject>(login);

//添加登录界面组件
ui.AddComponent<LandlordsLoginComponent>();

这里第一眼我还以为是是Unity.GameObject.AddComponent呢,哈哈,其实是Entity.AddComponent。这里大家不要学我。LandlordsLoginComponent有点东西,我们分个P

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值