注册登录界面的框架(三)
来源:互联网 发布:网络综合布线cad图纸 编辑:程序博客网 时间:2024/04/28 12:35
现在开始最乱的代码显示登陆窗口,按钮跳转注册窗口,
搭这个框架,大大小小写了12个脚本,咱们前两篇写了7个,还有5个,其中包含一个存取名称密码的记录数据的脚本(dataMgr)
using UnityEngine;using System.Collections;/// <summary>/// 登陆场景UI控制器/// </summary>public class UILoginSceneCtrl : UISceneCtrBase { protected override void OnStart(){ base.OnStart (); StartCoroutine (OpenWindowUI()); //打开窗口 //OpenWindowUI (); } protected override void BeforeOnDestroy(){ base.BeforeOnDestroy (); } IEnumerator OpenWindowUI(){ yield return new WaitForSeconds (2.0f); GameObject windowUI = UIWindowsMgr.GetInstance ().OpenWindowUI (WindowUIType.Login); }}
它继承的UISceneCtrBase在前面说过了,是一个基类
这个脚本用来打开窗口的,协程里有一个延迟两秒,运行后,等两秒,登录窗口会蹦出来,我还设置了动画,这个最后说
UILoginSceneCtrl中涉及到了UIWindowsMgr
UIWindowsMgr.的核心代码:
using UnityEngine;using System.Collections;using System.Collections.Generic;/// <summary>/// 窗口UI管理器/// </summary>public class UIWindowsMgr :SingleTo<UIWindowsMgr>{ public Dictionary<WindowUIType,GameObject> windowDic=new Dictionary<WindowUIType, GameObject>();//这是字典 public GameObject OpenWindowUI(WindowUIType windowUIType = WindowUIType.NONE){ //如果对应的窗口类型已经在字典中就不要重复打开 if(windowDic.ContainsKey(windowUIType)){ return windowDic[windowUIType]; }//单例模式 string resName = string.Empty; switch(windowUIType){ case WindowUIType.NONE: break; case WindowUIType.Login: resName = "Login_Window"; break; case WindowUIType.Register: resName = "Register_Window"; break; case WindowUIType.Choose: resName = "Root_choose";//这是我添加的选择英雄界面,因为这时候我还没有弄主界面,所以没有,不过随着完善,应该有主界面 break; default: break; } GameObject windowUI = ResourcesMgr.GetInstance().LoadRes (resName, resType: ResourcesMgr.ResourceType.UIWindow); windowDic.Add (windowUIType,windowUI);//实例化的窗口需要放入字典中缓存起来 UIWindowCtrlBase windowCtrlBase = windowUI.GetComponent<UIWindowCtrlBase> ();//获取窗口UI控制器组件 windowCtrlBase.currentWindowUIType = windowUIType;//设置当前窗口的窗口类型 WindowUIContainerType windowUIContainerType = windowCtrlBase.windowUIContainerType;//从窗口UI控制器组件中获取窗口的挂点类型 Transform parent = null; switch(windowUIContainerType){ case WindowUIContainerType.NONE: break; case WindowUIContainerType.Center: parent = UISceneMgr.GetInstance().currentSceneUICtrBase.center_container; break; case WindowUIContainerType.LeftTop: break; case WindowUIContainerType.LeftButton: break; case WindowUIContainerType.RightTop: break; case WindowUIContainerType.RightButton: break; default: break; } windowUI.SetParent (parent); windowUI.ResetPositionAndScale(); NGUITools.SetActive (windowUI,false);//隐藏窗口 StartShowWindowUI (windowCtrlBase); return windowUI; } public void CloseWindowUI(WindowUIType windowUIType,bool delete = true){//关闭窗口 if(windowDic.ContainsKey(windowUIType)){ if(delete){ GameObject.Destroy(windowDic[windowUIType]); windowDic.Remove(windowUIType);//销毁掉移除 } } } private void StartShowWindowUI(UIWindowCtrlBase windowCtrlBase){//这是限制窗口显示的动画方式 //这里又涉及到了一个脚本UIWindowCtrlBase WindowShowAnimationType animationType = windowCtrlBase.WindowShowAnimationType ; switch(animationType){ case WindowShowAnimationType.Nomal: ShowNormal(windowCtrlBase); break; case WindowShowAnimationType.CenterToBig: ShowCenterToBig(windowCtrlBase); break; case WindowShowAnimationType.LeftToRight: ShowDirection(windowCtrlBase,Vector3.left); break; case WindowShowAnimationType.RightToLeft: ShowDirection(windowCtrlBase,Vector3.right); break; case WindowShowAnimationType.TopToBottom: ShowDirection(windowCtrlBase,Vector3.down); break; case WindowShowAnimationType.BottomToTop: ShowDirection(windowCtrlBase,Vector3.up); break; default: break; } } /// <summary> /// 正常显示 /// </summary> /// <param name="windowCtrlBase">Window ctrl base.</param> private void ShowNormal(UIWindowCtrlBase windowCtrlBase){ GameObject windowUI = windowCtrlBase.gameObject; NGUITools.SetActive (windowUI,true); } /// <summary> /// 从中间向四周放大显示 /// </summary> /// <param name="windowCtrlBase">窗口UI控制器</param> private void ShowCenterToBig(UIWindowCtrlBase windowCtrlBase){ GameObject windowUI = windowCtrlBase.gameObject; TweenScale ts = windowUI.GetOrAddCoponent<TweenScale>(); NGUITools.SetActive (windowUI,true); ts.duration = windowCtrlBase.duration; ts.delay = windowCtrlBase.delay; ts.animationCurve = windowCtrlBase.animationCurve; ts.from = Vector3.zero; ts.to = Vector3.one; } private void ShowDirection(UIWindowCtrlBase windowCtrlBase,Vector3 direction){ GameObject windowUI = windowCtrlBase.gameObject; NGUITools.SetActive (windowUI,true); TweenPosition tp = windowUI.GetOrAddCoponent<TweenPosition> (); tp.duration = windowCtrlBase.duration; tp.delay = windowCtrlBase.delay; tp.animationCurve = windowCtrlBase.animationCurve; //从左到右 tp.from = direction*300; tp.to = Vector3.zero; }}
选择动画的时候涉及的脚本
核心代码:
using UnityEngine;using System.Collections;/// <summary>/// 窗口UI控制基类/// </summary>public class UIWindowCtrlBase : MonoBehaviour { public WindowUIContainerType windowUIContainerType = WindowUIContainerType.NONE;//窗口UI的挂点类型 public WindowShowAnimationType WindowShowAnimationType = WindowShowAnimationType.Nomal;//窗口UI显示时播放的类型 [Header("窗口显示的动画模块")] //动画播放时间 public float duration = 0.5f; //动画播放延迟时间 public float delay = 0f; [HideInInspector]//在检视面板中隐藏 public WindowUIType currentWindowUIType = WindowUIType.NONE;//当前窗口UI类型 //动画曲线 public AnimationCurve animationCurve = new AnimationCurve(new Keyframe(0f, 0f, 0f, 1f), new Keyframe(1f, 1f, 1f, 0f)); // Use this for initialization void Start () { OnStart (); } void OnDestroy(){ BeforeOnDestroy (); } protected virtual void OnStart(){} protected virtual void BeforeOnDestroy(){ if (UIWindowsMgr.GetInstance ().windowDic.ContainsKey (currentWindowUIType)) UIWindowsMgr.GetInstance ().windowDic.Remove (currentWindowUIType); }}
到这里显示窗口的完了,剩下的即使点注册,切换窗口,还有记录数据
using UnityEngine;using System.Collections;/// <summary>/// 数据管理器/// </summary>public class datamgr : SingleTo<datamgr> { public const string ACCOUNT_KEY = "ACCOUNT_KEY";//账号对应的key public const string PASSWPRLD_KEY = "PASSWPRLD_KEY";//密码对应的key //用户类 public class User { public string Account { set; get; } public string passworld { set; get; } public User(string account,string passworld){ this.Account = account; this.passworld = passworld; } } public void RegisterUser(User aUser){ string inputAccount = aUser.Account; string inputPassworld = aUser.passworld; PlayerPrefs.SetString (ACCOUNT_KEY,inputAccount); PlayerPrefs.SetString (PASSWPRLD_KEY,inputPassworld); } public bool ExcuteUser(User aUser){ //先获取已经存在的用户 string account = PlayerPrefs.GetString (ACCOUNT_KEY); string password = PlayerPrefs.GetString (PASSWPRLD_KEY); //比对该用的密码 string inputAccount = aUser.Account; string inputPassworld = aUser.passworld; if(!account.Equals(inputAccount)||!password.Equals(inputPassworld)){ return false; } return true; }}
using UnityEngine;using System.Collections;/// <summary>/// 登录窗口UI控制器/// </summary>public class UILoginWidowCtrl : UIWindowCtrlBase { [SerializeField] private UIInput account; [SerializeField] private UIInput passworld; protected override void OnStart(){ base.OnStart ();//调用基类的虚方法 BindClick ();//添加点击事件 } //绑定点击回调函数 void BindClick(){ //UIButton[] btnArr = GameObject.FindObjectsOfType<UIButton> ();//范围是整个游戏 UIButton[] btnArr = transform.GetComponentsInChildren<UIButton>();//限制在本窗口 for(int i = 0;i<btnArr.Length;i++){ UIEventListener.Get(btnArr[i].gameObject).onClick = Click; } } //点击的回调函数 void Click(GameObject btnObj){Debug.Log (btnObj.name); switch(btnObj.name){ case "Register_Button": UIWindowsMgr.GetInstance().CloseWindowUI(currentWindowUIType); UIWindowsMgr.GetInstance().OpenWindowUI(WindowUIType.Register); break; case "Login_Button ": Excute(); break; default: break; } } void Excute(){ if(string.IsNullOrEmpty(account.value)){ Debug.Log("Please Input Account"); return; }if(string.IsNullOrEmpty(passworld.value)){ Debug.Log("Please Input Passworld"); return; } datamgr.User aUser = new datamgr.User (account.value,passworld.value); bool state = datamgr.GetInstance ().ExcuteUser (aUser); if (state) { Debug.Log ("Success!"); } else { Debug.Log("Failure!"); } } protected override void BeforeOnDestroy(){ base.BeforeOnDestroy (); }}
using UnityEngine;using System.Collections;public class UIRegisterWindowCtrl : UIWindowCtrlBase { [SerializeField] private UIInput account; [SerializeField] private UIInput passworld; protected override void OnStart(){ base.OnStart ();//调用基类的虚方法 BindClick (); } //绑定点击回调函数 void BindClick(){ UIButton[] btnArr = transform.GetComponentsInChildren<UIButton>();//限制在本窗口 for(int i = 0;i<btnArr.Length;i++){ UIEventListener.Get(btnArr[i].gameObject).onClick = Click; } } //点击的回调函数 void Click(GameObject btnObj){ switch(btnObj.name){ case "Register_Button": RegisterUser(); break; case "canle_Button": UIWindowsMgr.GetInstance().CloseWindowUI(currentWindowUIType); UIWindowsMgr.GetInstance().OpenWindowUI(WindowUIType.Login); break; default: break; } Debug.Log (btnObj.name); } void RegisterUser(){ datamgr.User aUser = new datamgr.User(account.value,passworld.value); Debug.Log (account.value +passworld.value); datamgr.GetInstance ().RegisterUser (aUser); } protected override void BeforeOnDestroy(){ base.BeforeOnDestroy (); }}
0 0
- 注册登录界面的框架(三)
- 登录+注册界面的实现(代码)
- Java登录界面的实现(注册、登录、背景图片)
- 登录注册页面的框架(一)
- 注册登录页面的框架(二)
- iOS登录注册登录界面(UITextField)
- 简单的登录注册界面测试(asp.net)
- 网页注册登录(三)
- 注册与登录界面的美化
- iOS 登录与注册的界面跳转
- Axure登录和注册界面的学习
- jsp 界面注册、登录按钮的实现
- 创建游戏的登录注册界面
- 注册 登录界面以及正则的使用
- Demo0002-登录/注册界面
- 三大框架之SpringMVC :一个小的登录注册项目的网页实现
- 一个很漂亮的登录界面和注册界面
- ssh框架登录注册
- 堆和栈的区别
- 第八章--更新ui的几种操作
- JMockit Mock测试入门详解
- 安装centos7之后要做的几件事
- 解构微信:打败微信的将会是一款什么样的产品?
- 注册登录界面的框架(三)
- UNC路径
- Tomcat 和Jetty对比(5)
- 关于createjs的中心点和坐标之间的联系
- css font的简写规则
- HDOJ 1257 最少拦截系统(最长上升子序列)
- HDU 5410 CRB and His Birthday
- Color
- 直播APP开发过程