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

原创 2016年08月29日 20:35:44

这里写图片描述

这里写图片描述

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

准备工作就是搭好框架,不过注意每个单独的小部分都是在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的,在内存中保留着它的引用,即内存中有一块区域专门用来存放静态方法和变量,可以直接使用,调用多次返回同一个对象。

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

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

上次总结到泛型 脚本UISceneMgr中涉及到了获取挂点的脚本UISceneCtrBase这是个场景基类,以后还有有一个窗口基类,using UnityEngine; using System.C...

SSH框架登录注册页面用struts的xml配置方式校验遇到的问题及解决方法

SSH框架用struts的xml配置进行前台验证,验证登录和注册页面遇到的问题及解决方法。

yii框架实现注册页面短信验证60秒倒计时

先说下简单的,直接用jquery来实现短信验证60秒倒计时,然后在说明在yii框架下怎么实现的。 /*--------------------...

一个简单的注册登录页面(包括阿里大于的手机验证)html+JS+AJAX+PHP

欢迎登录 登录名称: 注册 密码: 忘记密码 登录 重置         背景:非计算机专业,在校学习期间,接触过linux,perl,...

教你写一个炫酷的Material Design 风格的登录和注册页面

每个人都会喜欢漂亮的登录界面,一个App 给人们的第一印象是非常重要的。这篇文章将教你使用谷歌材料设计规范(Material design spec )和谷歌的新的设计支持库( design supp...

简易 的QQ APP登录以及注册页面的实现

1:首页面的效果图XML代码的实现: 这里主要使用了相对布局和线性布局来实现<RelativeLayout xmlns:android="http://schemas.android.com/apk...

登录、注册页面及后台代码

一.登录页面及后台代码 1.登录页面如图1所示 首先进行身份选择,由“管理员”和“用户”两种身份进行选择,选择不同的身份,程序会进入不同的数据表检索登录信息;当用户名或密码为空时会提示;当用户名或密码...

淘淘商城系列——单点登录之用户注册页面实现

首先,我们还是先看一下注册页面,如下图所示。 上图箭头指向的链接在register.jsp的代码当中的位置如下图所示。 由于我现在对js不是很熟悉,注册页面对输入合法性的校验就不像正规网站...

利用php和mysql实现注册登录页面

利用php和mysql实现注册登录页面

99个漂亮的注册和登录页面设计(附PSD)

原文地址:http://www.qianduan.net/99-beautiful-free-signin-login-and-signup-psd-designs.html 整理自...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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