关闭

登录注册页面的框架(一)

标签: 框架UI
213人阅读 评论(0) 收藏 举报
分类:

这里写图片描述

这里写图片描述

执行后,自动加载背景,然后隔两秒加载登录窗口,点击注册按钮,出现注册窗口,点注册后,再点取消,回到登录窗口,输入正确的密码显示登陆成功

准备工作就是搭好框架,不过注意每个单独的小部分都是在widge里,做成预设体,背景放在UIRoot的相机下,然后Root下挂一个空物体,作为挂登录窗口的挂点,然后场景中放置一个空物体,用来挂加载场景的脚本

这里写图片描述
这就是挂在脚本的空物体

为了有条理我做成的预设体分了类,放在不同的文件夹里

这里写图片描述
这里写图片描述
这里写图片描述

然后开始写脚本:我们的宗旨,代码一重复就把它拉出来自成一体

首先是加载背景的脚本就是挂在在空物体的

/// <summary>
/// 登录场景控制器(加载场景UI)
/// </summary>
public class LoginScenseCtrl : MonoBehaviour {
    void Start () {
        //开始加载场景UI
        StartLoadSceneUI ();
    }
    /// <summary>
    /// 开始加载场景UI
    /// </summary>

    void StartLoadSceneUI(){
        /*托管内存和非托管内存
        Resources.Load是非托管,需要手动释放(NGUI中的图集,AssetBuilble打包)
        Instantiate 是托管内存,系统自动释放*/

        //加载的场景UI预设体资源
        //1.GameObject sceneUIPre = Resources.Load ("UI/UIScense/UI Root_Login")as GameObject;
        //实例化场景UI预设体
        //1.Instantiate (sceneUIPre);

        //2.ResourcesMgr.GetInstance ().LoadRes ("UI Root_Login",resType:ResourcesMgr.ResourceType.UIScene);
        UISceneMgr.GetInstance ().OpenSceneUI (sceneUIType:SceneUIType.Login);//3.
    }

    void Update () {}
}

代码的进化顺序:1.完全可以加载出来,但是这个路径重复率高,我们可以单独弄出来,
于是有了2.(ResourcesMgr)ResourcesMgr脚本中是路径中的UI/UIScense/ 这一部分,
然后再进化3.这样路径完全省了,代码也简洁了

涉及到的ResourcesMgr代码如下:

using UnityEngine;
using System.Collections;
using System.Text;
using System.Collections.Generic;

/// <summary>
/// 资源管理器(单例)
/// </summary>
public class ResourcesMgr:SingleTo<ResourcesMgr>{
    public Dictionary<string,GameObject>  resourceDic=new Dictionary<string, GameObject>();
    //资源类型
    public enum ResourceType{
        None = 0,

        //场景UI
        UIScene,
        //窗口UI
        UIWindow
    }
    //加载资源
    //参数一资源名称,资源类型
    //返回值资源的预设克隆体
    public GameObject LoadRes(string resName,ResourceType resType = ResourceType.None){
        StringBuilder str = new StringBuilder ();

        switch(resType){
        case ResourceType.None:
            break;
        case ResourceType.UIScene:
            str.Append("UI/UIScense/");
            break;
        case ResourceType.UIWindow:
            str.Append("UI/UIWindows/");
            break;
        default:
            break;
        }
        GameObject res  =null;
        //资源的完整路径
        string resFullPath = str.Append (resName).ToString ();
        //如果在缓存中
        if(resourceDic.ContainsKey(resFullPath)){
            return GameObject.Instantiate(resourceDic[resFullPath]);
        }
        res = Resources.Load (resFullPath)as GameObject;//不在缓存中
        resourceDic.Add (resFullPath ,res);//添加到缓存中
        return GameObject.Instantiate (res);

    }
} 

UISceneMgr代码如下:

using UnityEngine;
using System.Collections;
/// <summary>
/// 场景UI管理器单例
/// </summary>
public class UISceneMgr :SingleTo<UISceneMgr>{
    public UISceneCtrBase currentSceneUICtrBase;
    public GameObject OpenSceneUI(SceneUIType sceneUIType = SceneUIType.NONE){
        string sceneUIName = string.Empty;
        switch(sceneUIType){
        case SceneUIType.NONE:
            break;
        case SceneUIType.Login:
            sceneUIName = "UI Root_Login";
            break;
        default:
            break;
        }
        GameObject sceneUI = ResourcesMgr.GetInstance ().LoadRes (sceneUIName, resType: ResourcesMgr.ResourceType.UIScene);
        //初始化当前场景UI控制器
        currentSceneUICtrBase = sceneUI.GetComponent<UISceneCtrBase> ();
        return sceneUI;
    }
}

从UISceneMgr可以看出它继承一个泛型,因为框架越来越大,数据类型越来越多,重复率也增大,所以从一开始定义一个泛型,这个泛型是实例化的

泛型的代码:

using UnityEngine;
using System.Collections;
/// <summary>
/// 泛型单例
/// </summary> 
public class SingleTo<T> where T:new(){
    private static T instance;
    public static T GetInstance()//保证只实例化一次。
    {
        if (null == instance)
            instance = new T ();
        return instance;
    }
}

getInstance是少部分类才有的一个方法,各自的实现也不同。getInstance在单例模式(保证一个类仅有一个实例,并提供一个访问它的全局访问点)的类中常见,用来生成唯一的实例,getInstance往往是static的。

GetInstance的使用:
在主函数开始时调用,返回一个实例化对象。此对象是static的,在内存中保留着它的引用,即内存中有一块区域专门用来存放静态方法和变量,可以直接使用,调用多次返回同一个对象。

0
0

猜你在找
【套餐】Hadoop生态系统零基础入门
【套餐】嵌入式Linux C编程基础
【套餐】2017软考系统集成项目——任铄
【套餐】Android 5.x顶级视频课程——李宁
【套餐】深度学习入门视频课程——唐宇迪
【直播】广义线性模型及其应用——李科
【直播】从0到1 区块链的概念到实践
【直播】计算机视觉原理及实战——屈教授
【直播】机器学习之凸优化——马博士
【直播】机器学习&数据挖掘7周实训--韦玮
查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:5626次
    • 积分:368
    • 等级:
    • 排名:千里之外
    • 原创:33篇
    • 转载:1篇
    • 译文:0篇
    • 评论:0条
    文章分类