zoukankan      html  css  js  c++  java
  • [cb]NGUI事件及复杂UI管理

    事件管理

    看了有些文章关于NGUI的事件管理,许多人的做法的是封装一个事件处理层,避免在每个UI控件上都绑定事件处理脚本。本文说说我们项目中的UI事件管理吧。

    UIEventListener

    我们项目的做法是:在每一个需要进行事件处理的控件上绑定UIEventListener脚本

    示例代码

    void Init()
    {
        //方式一
        var PausePanel = GetControl<Gameobject>("PausePanel");
        PausePanel.GetComponent<UIEventListener>().onClick = new UIEventListener.VoidDelegate((obj) => PausePanel.gameObject.SetActive(false));
        //方式二
        var GMBtn = GetControl<Gameobject>("GMBtn");
        UIEventListener.get(GMbtn).onClick = GMBtnClick;
    }

    UI面板管理

    在我们的项目中,每一个UI面板都是一个单独的Scene而不是prefab,每一个UI面板都有一个对应的Class管理类

    实际使用

    在cb-Art工程/Product/UI/Battle.unity [战斗界面UI],使用导出功能把UI场景打包成一个单独的Assetbundle。

    在cb-Clien工程需要用到的地方 动态加载进来

    在cb-Client/Code/UI/CUIBattle.cs [战斗界面UI处理],通过一个Class单独处理这个Assetbunld中加载出来的UI面板

    注:每一个UI都有一个和自己名字对应的Class来处理。[eg:Home.unity->CUIHome]

    优缺点

    这种做法代码文件量比较大,但代码文件按面板独立便于管理,查错也更方便

    UI类图

    CUIBase

  • 相关阅读:
    第八周学习进度
    《梦断代码》阅读笔记01
    冲刺记录一
    NABCD简介
    第七周学习进度
    《编程珠玑》阅读笔记03
    第六周学习进度
    数据库数据定期同步实现
    数据库之间的数据同步
    数据同步——otter
  • 原文地址:https://www.cnblogs.com/zhaoqingqing/p/3860144.html
Copyright © 2011-2022 走看看