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

原创 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的,在内存中保留着它的引用,即内存中有一块区域专门用来存放静态方法和变量,可以直接使用,调用多次返回同一个对象。

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

创建自己的JS库

调用js库测试             function testClick(){           var testInput=AZJ.getElementsByClass...
  • Blues1021
  • Blues1021
  • 2014年11月02日 16:27
  • 729

Android Studio 表格布局实现登录界面

在xml文件中添加如下代码:
  • u010545480
  • u010545480
  • 2016年07月05日 23:03
  • 6929

SQL盲注的框架——BBQSQL

这个图形不要输吧?! 我感觉会吐血的!! ---------------------------------------------------- BBQSQL是一种用Pyhthon写的S...
  • SAKAISON
  • SAKAISON
  • 2016年09月19日 16:42
  • 369

使用SSM框架搭建Web服务器实现登录功能(Spring+SpringMVC+Mybatis)

使用SSM框架搭建Web服务器实现登录功能(Spring+SpringMVC+Mybatis)   转载自CSDN   项目地址:https://github.com/724888/lightno...
  • a724888
  • a724888
  • 2017年03月08日 09:40
  • 1661

javaEE SSH框架不使用注解的方式与使用注解的方式

一:不使用注解的方式 验证一个登陆是否合法,采用动态方法调用的方式 1、mlogin对应struts.xml中的一个action的name,class随意起个名字,这里为loginAction; 2、...
  • u013082989
  • u013082989
  • 2016年03月23日 21:09
  • 3072

使用CAS框架快速实现单点登录

作者:金云龙,如要转发,请注明出处作者 1、CAS示例程序配置 在CAS的主页上,可以看到CAS服务器,和客户端配置的完整过程,根据提示,完全可以配置成功服务器和客户端。同时,在CAS上也可以找到服...
  • XING1050192507
  • XING1050192507
  • 2014年01月07日 11:52
  • 5365

三层架构——系统用户登录模块功能实现

UI层:展现给用户的界面,并为用户提供对系统进行操作的接口,此处即为用户提供身份验证的接口(验证用户名和密码).由于UI层向用户提供了接口所以其必有接受、传递用户名、密码的方法,当用户身份验证通过后还...
  • leimengyuanlian
  • leimengyuanlian
  • 2013年01月28日 20:44
  • 11047

WEB安全实战(一)SQL盲注

前言 好长时间没有写过东西了,不是不想写,只不过是一直静不下心来写点东西。当然,拖了这么长的时间,也总该写点什么的。最近刚刚上手安全方面的东西,作为一个菜鸟,也本着学习的目的,就谈谈最近接触到的安...
  • happylee6688
  • happylee6688
  • 2014年10月30日 10:29
  • 27284

SpringMVC框架开发登录界面的验证码

本博客介绍如何开发登录界面的验证码先写个验证码生成的Controller类:package com.appweb.controller.login; import java.awt.Color; i...
  • u014427391
  • u014427391
  • 2016年09月24日 12:23
  • 7599

SSH框架搭建登录实例

最近在做网上商城的项目,是基于SSH2框架来做的,顺便学了一下搭建SSH2框架,今天就分享给大家。 我用的SSH2版本为:struts-2.3.15.3+Spring3.2+hibernate-3....
  • u010539352
  • u010539352
  • 2015年10月19日 21:52
  • 9136
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:登录注册页面的框架(一)
举报原因:
原因补充:

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