[UnityUI]使用UI框架

现在,网上流传着三种unity的UI框架:

1.

教程:http://blog.csdn.net/Fredomyan/article/details/46879203

github地址:https://github.com/tinyantstudio/UIFrameWork


2.

教程:http://www.cnblogs.com/neverdie/p/unity_ui_framework.html

github地址:https://github.com/MrNerverDie/Unity-UI-Framework


3.

教程:http://www.manew.com/thread-42929-1-1.html

github地址:https://github.com/chiuan/TTUIFramework


其中第一个是用ngui的,后面两个是用ugui的,所以这里只简单地介绍后面两种。


/

第二种(简单上手,源码简洁易懂):

脚本:

UIType:提供view的路径和名字

BaseView:提供事件回调函数,OnEnter,OnExit,OnPause,OnResume

BaseContext:持有UIType的引用

AnimateView:继承BaseView,持有Animator的引用

UIManager:持有一个<UIType, GameObject>的字典,其中GameObject即view,可以获取、实例化和摧毁view

ContextManager:持有一个Stack,控制view之间的切换

对每一个view的预制体,提供一个对应的BaseView和BaseContext。对于view中的子view,例如登录界面的登录按钮,可以通过拖拽父view的脚本,响应点击事件


动画:

使用unity自带的动画系统,动画也是可以绑定事件的。一个普通的动画控制器基本就是这样了(状态机):



/

第三种(功能强大):

源码分析:

1.提供对view类型的枚举

 public enum UIType
    {
        Normal,
        Fixed,
        PopUp,
        None,      //独立的窗口
    }

    public enum UIMode
    {
        DoNothing,
        HideOther,     // 关闭其他界面
        NeedBack,      // 点击返回按钮关闭当前,不关闭其他界面(需要调整好层级关系)
        NoNeedBack,    // 关闭TopBar,关闭其他界面,不加入backSequence队列
    }

    public enum UICollider
    {
        None,      // 显示该界面不包含碰撞背景
        Normal,    // 碰撞透明背景
        WithBg,    // 碰撞非透明背景
    }

UIType的实际作用是对view进行分类(源码中出现PopUp效果是使用了动画文件):

if (type == UIType.Fixed)
            {
                ui.transform.SetParent(TTUIRoot.Instance.fixedRoot);
            }
            else if (type == UIType.Normal)
            {
                ui.transform.SetParent(TTUIRoot.Instance.normalRoot);
            }
            else if (type == UIType.PopUp)
            {
                ui.transform.SetParent(TTUIRoot.Instance.popupRoot);
            }



UIMode中重要的就是HideOther和NeedBack,HideOther会隐藏其他的界面,但是不会隐藏当前的界面,而NeedBack隐藏当前的界面,不隐藏其他的界面。

UICollider由于源码并没有对这个进行处理,所以暂时不起作用。


2.TTUIPage的一些重要方法

打开页面:ShowPage<T>();

关闭页面:ClosePage();   对当前页面调用Hide方法


3.TTUIPage的生命周期

virtual void Awake():实例化页面时会执行1次

//When Instance UI Ony Once.
        public virtual void Awake(GameObject go) { }


virtual void Refresh():当调用ShowPage时就会执行

//Show UI Refresh Eachtime.
        public virtual void Refresh() { }


virtual void Active():当调用ShowPage时就会执行,执行顺序在Refresh前

//Active this UI
        public virtual void Active()
        {
            this.gameObject.SetActive(true);
            isActived = true;
        }


virtual void Hide():当调用ClosePage时就会执行

//Only Deactive UI wont clear Data.
        public virtual void Hide()
        {
            this.gameObject.SetActive(false);
            isActived = false;
            //set this page's data null when hide.
            this.m_data = null;
        }


分析:

0.TTUIPage不一定指的是一个页面,一个屏幕也不一定只存在一个TTUIPage。凡是view的预制体,都可以为它编写一个TTUIPage。

1.对每一个view的预制体写一个TTUIPage(无需挂在预制体上,TTUIPage本身就持有一个GameObject的引用,打开页面后预制体就会存储在这个引用中),写一个构造函数(函数要包含预制体的路径),并按照需求重写TTUIPage生命周期的4种方法。

2.当调用ShowPage<T>();打开页面时,如果是初次打开(即实例化),会使用Resources.Load进行实例化,并依次调用Awake、Active、Refresh方法;如果不是初次打开,则依次调用Active、Refresh方法。

3.TTUIRoot和TTUIPage都无需挂上给物体。


后来发现这个框架还是很不完善,这里修正了一些问题,上传一下:

http://pan.baidu.com/s/1mgGT55A

(要确保场景存在Canvas)

  • 6
    点赞
  • 71
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
Unity UI框架是一种用于创建用户界面(UI)的工具集和组件集合。它提供了丰富的UI元素和功能,可以帮助开发者轻松地构建交互性和可视化的界面。 Unity UI框架可以通过Unity Asset Store进行下载。打开Unity编辑器,点击"Window"菜单,选择"Asset Store"选项,会打开Asset Store窗口。在搜索栏中输入"Unity UI框架",可以找到很多可用的UI框架。 在选择和下载UI框架之前,开发者应该了解项目的需求并进行评估。可以根据项目的规模、复杂度和用户需求来选择合适的UI框架。一些常用的UI框架包括:"TextMeshPro"、"DOTween" 和 "UGUI"等。开发者可以根据自己的需要选择适合的框架。 下载UI框架后,可以将其导入到Unity项目中。在Asset Store或者Unity Package Manager中选择合适的UI框架,点击"Download" 或者 "Import"按钮进行安装。安装完成后,可以在Unity编辑器的"Assets"文件夹中找到导入的UI框架使用UI框架时,可以在Unity编辑器中创建UI元素,如按钮、文本、滑动条等,并对其进行布局和样式设置。可以通过脚本代码来实现交互性功能,如按钮的点击事件、输入框的文本处理等。UI框架还提供了很多可定制的功能和效果,如动画、过渡和绘制等,可以增强用户界面的视觉效果和交互体验。 总之,Unity UI框架是一个方便使用的工具集,可以帮助开发者快速构建用户界面。通过下载合适的UI框架,开发者可以轻松地创建、布局和管理UI元素,提供良好的用户体验。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值