[UnityUI]使用UI框架

原创 2015年11月20日 18:05:50

现在,网上流传着三种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)

版权声明:欢迎转载,欢迎讨论,大家一起共同进步!呵呵哒~

《UI框架—基于Unity5.4UGUI(一)》

在这里和大家分享一下最近学习的一个UI框架,同时方便自己理解记忆和回顾。本UI框架是基于Unity5.4版本的,不过4.6版本以上应该都没问题。当然,你也完全可以使用NGUI插件完成UI部分,然后使用...
  • Say__Yes
  • Say__Yes
  • 2017年07月01日 22:59
  • 4824

几个不错的UI框架

转自:http://www.cnblogs.com/jeason1997/p/4854606.html 几个不错的UI框架 1.Unity-UI-Framework的设计与实现...
  • a1047120490
  • a1047120490
  • 2017年03月15日 22:45
  • 1220

Unity 客户端框架(六):UI框架

引自百度:编写UI框架意义 打开,关闭,层级,页面跳转等管理问题集中化,将外部切换等逻辑交给UIManager处理 功能逻辑分散化,每个页面维护自身逻辑,依托于框架便于多人协同开发,不用关心跳转和...
  • lovethRain
  • lovethRain
  • 2016年08月06日 08:18
  • 9344

基于Unity3D简单UI框架

  • 2015年07月14日 22:46
  • 17.48MB
  • 下载

Unity3d游戏开发框架-UI管理类 UIManager

新建一个文件夹:UIMgr 新建2个C#脚本:BaseUI.cs UIMgr.csusing UnityEngine; using System.Collections;public class B...
  • u013108312
  • u013108312
  • 2016年08月29日 18:10
  • 4417

Unity UI框架开发(1)--框架介绍

学习知识,分享知识。 记录下自己经常使用的这个UI框架。首先说下这个UI框架整体吧,该框架主要实现了UI的的显示、隐藏、按钮点击、UI数值更新,这也是大多数游戏UI的功能。 该框架主要分三个部分来理解...
  • chy_xfn
  • chy_xfn
  • 2016年10月16日 16:45
  • 2342

【Unity自己写框架】FairyGUI UI框架(一)

笔者之前沉迷游戏无法自拔,但是现在之前玩的游戏也不太爱玩了,发现下班到睡觉之前有2-3个小时空闲,仿佛发现了一逼宝贵的财富不能浪费。 笔者从事手游工作也有两年的时间了,主要做的是逻辑和SDK方面的工...
  • tj134679258
  • tj134679258
  • 2017年04月04日 19:13
  • 4408

Unity3D 搭建优雅的UI框架

为什么要使用UI框架?直接使用NGUI或UGUI一拖一拉直接搭载出界面不就行了? 我相信很多小白,包括我在刚学习Unity3D UI的时候都这样想过。 我的第一款款Unity2D游戏《山地赛车》,...
  • u014659211
  • u014659211
  • 2017年04月19日 11:02
  • 1279

Unity简单UI框架搭建

1、debuger封装 2、工具类封装 3、窗体基类封装 4、窗体数据类 5、窗体管理类 6、加载类 7、事件监听与动画接口 8、资源定义类...
  • D744784681
  • D744784681
  • 2017年04月17日 20:44
  • 1144

[UnityUI]使用UI框架

unity的UI框架
  • u013108312
  • u013108312
  • 2016年05月30日 11:19
  • 2083
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:[UnityUI]使用UI框架
举报原因:
原因补充:

(最多只允许输入30个字)