- 1、本文档共8页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
编写一个简单通用UI框架用于管理页面和完成导航跳转重点
目标:编写一个简单通用UI框架用于管理页面和完成导航跳转最终的实现效果请拉到最下方查看框架具体实现的功能和需求
加载,显示,隐藏,关闭页面,根据标示获得相应界面实例
提供界面显示隐藏动画接口
单独界面层级,Collider,背景管理
根据存储的导航信息完成界面导航
界面通用对话框管理(多类型Message Box)
便于进行需求和功能扩展(比如,在跳出页面之前添加逻辑处理等)
编写UI框架意义
打开,关闭,层级,页面跳转等管理问题集中化,将外部切换等逻辑交给UIManager处理
功能逻辑分散化,每个页面维护自身逻辑,依托于框架便于多人协同开发,不用关心跳转和显示关闭细节
通用性框架能够做到简单的代码复用和项目经验沉淀
步入正题,如何实现
窗口类设计:基本窗口对象,维护自身逻辑维护
窗口管理类:控制被管理窗口的打开和关闭等逻辑(具体设计请看下文)
动画接口:提供打开和关闭动画接口,提供动画完成回调函数等
层级,Collider背景管理
窗口基类设计public enum UIWindowType
{
????Normal,??? // 可推出界面(UIMainMenu,UIRank等)
????Fixed,???? // 固定窗口(UITopBar等)
????PopUp,???? // 模式窗口
}
?
public enum UIWindowShowMode
{
????DoNothing,
????HideOther,???? // 闭其他界面
????NeedBack,????? // 点击返回按钮关闭当前,不关闭其他界面(需要调整好层级关系)
????NoNeedBack,??? // 关闭TopBar,关闭其他界面,不加入backSequence队列
}
?
public enum UIWindowColliderMode
{
????None,????? // 显示该界面不包含碰撞背景
????Normal,??? // 碰撞透明背景
????WithBg,??? // 碰撞非透明背景
}using UnityEngine;
using System.Collections;
using System;
?
namespace CoolGame
{
????/// summary
????/// 窗口基类
????/// /summary
????public class UIBaseWindow : MonoBehaviour
????{
????????protected UIPanel originPanel;
?
????????// 如果需要可以添加一个BoxCollider屏蔽事件
????????private bool isLock = false;
????????protected bool isShown = false;
?
????????// 当前界面ID
????????protected WindowID windowID = WindowID.WindowID_Invaild;
?
????????// 指向上一级界面ID(BackSequence无内容,返回上一级)
????????protected WindowID preWindowID = WindowID.WindowID_Invaild;
????????public WindowData windowData = new WindowData();
?
????????// Return处理逻辑
????????private event BoolDelegate returnPreLogic = null;
?
????????protected Transform mTrs;
????????protected virtual void Awake()
????????{
????????????this.gameObject.SetActive(true);
????????????mTrs = this.gameObject.transform;
????????????InitWindowOnAwake();
????????}
?
????????private int minDepth = 1;
????????public int MinDepth
????????{
????????????get { return minDepth; }
????????????set { minDepth = value; }
????????}
?
????????/// summary
????????/// 能否添加到导航数据中
????????/// /summary
????????public
文档评论(0)