UI框架学习笔记

      本文是根据学习SiKi学院上的UI框架总结得来的,仅仅是作为学习过程的记录,便于以后回顾。首先看下UI框架总体的设计思路:

这里写图片描述

      一.UIPanelType:枚举类型,为了存储UI界面有哪几种类型。
      二.UIPanelType.json:json文件,为了保存UI界面的Prefab存储路径。
      三.UIManager:
      (1)解析json并存储在Dictionary中,用于实例化UI界面;
      (2)保存所有实例化的面板,避免重复加载UI界面;
      (3)用Stack保存所有显示的页面,避免跨界面操作;
      四.界面都有四种状态:显示,暂停,恢复,关闭。因此可以设计为对应四种状态函数,分别为:OnEnter(),OnPause(),OnResume(),OnExit(),四种状态函数关系如上。且将它们写在BasePanel中,每个UI界面再分别继承与BasePanel类,这样便于维护。
      (1)OnEnter():UI界面被显示的时候调用,因此可以在此处插入声音、动画等;
      (2)OnPause():UI界面跳转到新界面时被被调用;
      (3)OnResume():UI界面从新界面跳转回来被调用;
      (4)OnExit():当前UI界面被关闭时调用;
      五.进行UI框架设计时,遇到的问题:
      (1)JsonUtility无法解析数组类型
解决方案:JsonUtility仅仅只支持对象解析,而不支持数组与List解析。如果要解析List或数组,需要将该json文件List或数组属性转换成对象对象。
      (2)扩展方法的使用
      扩展方法无法访问被扩展类的私有数据,增加的被扩展类的安全性。
      特点:
      1.静态类
      2.静态方法
      3.第一个参数为扩展类型,需要将其用this修饰,表示被扩展类型

eg:
public static class MyExtensions
    {
        public static int WordCount(this String str)
        {
            return str.Split(new char[] { ' ', '.', '?' }, 
                             StringSplitOptions.RemoveEmptyEntries).Length;
        }
    }

string s = "Hello Extension Methods";  
int i = s.WordCount(); 

(3)GetComponent方法:获取组件会优先子类对象,而不是父类对象

Class ATest{

}

Class BTest:ATest{

}

Class C: MonoBehaviour {

    private ATest aTest;

    void Start () {
        aTest = this.GetComponent<ATest>();
        Debug.Log(aTest.GetType());//输出为BTest
    }
}

(4)CanvasGroup组件的使用
      alpha属性:UI是否可以显示
      blocksRaycasts属性:控制UI上的按钮事件是否可以触发

六.源码链接
链接: https://pan.baidu.com/s/1slCxTBR 密码: bft9

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值