写在前面:登录注册功能是在纯Unity3D环境内实现的,用到UGUI绘制界面技术,数据库的部分是后面拓展加进来的,这里数据存储是指存在XML用户文件中。


注册用户名和密码

zc()

用户名和密码登录

denglu()

检测用户名是否存在

按钮选择进入和返回

open_bz()/close_bz()

一、登录窗口绘制

1、Create    UI    Panel 面板 (和窗口屏幕一样大)

√   Canvas 设置

Rander  Mode → Screen Space - Camera(模式)

把主摄像机 变成它的渲染相机 → 拖拽Main Camera → Render Camera

这里可以用  小手鼠标操作  拖拽面板  放大操作

2、√  Canvas   Scaler   屏幕模式

Ui  Scale Mode → Scale with Screen Si

设计(参考)分辨率:X:800  Y:600

Screen Math Mode → Match Width Or Height 匹配高

3、Panel 改名称 → Panel_bg(背景)

给一张图片:Source Image  …

颜色透明度:Image(Script) color:… 4个数值 → 往大调

4、Panel_bg下增加一个 Panel块   Panel_k

透明度:同样的改法  → SF Window 图片(边框)

color:可以改变颜色,任意颜色

Text:文本 → Font:自备(华文行楷)Bold → Rich Text(副文本)将√取消 → Best Fit(大小自适应)√勾选 → color 选择颜色

5、Button 按钮

text:修改文本文字 xxxx

Transition(过渡效果):Color Tint颜色过渡

  • Normal Color 正常颜色(自选)
  • Hightlight Color 高亮颜色(自选)

Sprit  Swap 过渡图片

6、InputField  输入框

placeholder :占位符 有提示,可输入

Text :文本控件 用来接收用户输入的信息用的

Source Image:背景图片

Color:颜色

√ Input Field(Script)→ Interactable √ 允许交互,一定要勾上

7、Character Limit:……  最大输入字符限制(0为没有限制)

Content Type:……  standard 标准输入模式     Password 星号密码输入模式

8、创建Script文件 - dl.C#文件 实现退出功能

//退出函数
public void Quit ()
{
#if UNITY_EDITOR
UnityEditor.EditorApplication.isPlaying = false;
#else
Application.Quit();
#endif
}
  • 拖拽文件到Canvas上,关联dl
  • 关联Button_tc 选择Button_tc,点击底部加号 +
  • [ none ]     物体选择   Canvas
  • No   Function → 选Quit 退出方法
二、注册窗口绘制

1、Canvas中创建UI → Image 调节图片大小 → 绘一张纯色的背景图片

在图片下 创建子物体

2、继续写 dl.C# 功能代码

√  显示Image_zc 打勾即显示(现在不显示,要去掉这个√),要用代码打勾√

public void open_zc(){
……
//(ture) 打勾 → 打开
//(false) 取消 → 关闭
}

实现关联注册按钮   同样, Canvas → open_zc()

注册窗口里“确认提交”和“取消提交”也要关联  Canvas → close_zc()

dl → 关联物体 - Image_zc

三、通用信息框的制作和测试

1、通用信息框:提示信息,包括两个文本框和一个按钮

dl → 关联物体

  • Image_ty_xxk  →Button_ty_xxk
  • Text_info
  • Text_ts

2、关联事件 - Canvas → dl → ty_xxk_close() "确定”按钮  关闭信息框

四、创建XML用户文件

1、在dl代码中 引入命令控件

  • using System.IO;
  • using System.Xml;

2、添加 void start() 函数 → 判断本地xml文件是否存在,存在不创建,不存在自动创建

  • 发布成Exe文件时,user.xml文件在同步生成的data文件夹中
  • 没发布时,user.xml文件在编辑器里,Assets目录下

3、记得修改默认帐号信息 → 用户名,密码

五、注册函数

1、添加其他的用户资料,写入本地xml文件中 → 写之前检测特定的空

  • 空着没写
  • 乱写(有不符合要求的)
  • 两个密码不一致

2、在dl文件中,写入注册函数 public void zc() → 关联“确认提交”Button_zc_ok,点击加号 + , Canvas → zc()

六、检查用户名是否被占用

1、先把密码的内容类型设置为:password 星号密码类型

2、打开用户文件,查找已有的子节点<Root> ,获取User信息,与用户在“注册”中填的信息,比较

  • 有,给出提示,直接返回
  • 没有,继续操作
七、完整的dl.C#代码

 

//dl.C#(登录注册功能)

using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using UnityEngine.EventSystems;
using System.IO;
using System.Xml;
public class dl1 : MonoBehaviour {
public Image image_zc;
public Image image_ty_xxk;
public Text text_info;
public Text text_ts;
private string _xmlpath;
public InputField InputField_name_zc;
public InputField InputField_pass_zc;
public InputField InputField_pass1_zc;
public InputField InputField_tel_zc;
public InputField InputField_qq_zc;
public InputField InputField_name;
public InputField InputField_pass;
//创建xml文件
void Start () {
_xmlpath=Application.dataPath+"/user.xml";
if (!File.Exists (_xmlpath)) {
//新建xml实例
XmlDocument xmlDoc = new XmlDocument();
//创建根节点,最上层节点
XmlElement root = xmlDoc.CreateElement("Root");
xmlDoc.AppendChild(root);
//创建用户子节点
XmlElement user = xmlDoc.CreateElement("User");
user.SetAttribute("user_name","Elena");
user.SetAttribute("user_pass","I1314");
root.AppendChild(user);
xmlDoc.Save(_xmlpath);
Debug.Log("xml creat success!");
}
}
//退出函数
public void Quit ()
{
#if UNITY_EDITOR
UnityEditor.EditorApplication.isPlaying = false;
#else
Application.Quit();
#endif
}
//打开注册窗口
public void open_zc(){
image_zc.gameObject.SetActive (true); }
//关闭注册窗口
public void close_zc(){
image_zc.gameObject.SetActive (false); }
//打开通用信息框窗口
public void ty_xxk(string str){
image_ty_xxk.gameObject.SetActive (true);
text_info.text = str;
text_ts.text = str;
}
//关闭通用信息框窗口
public void ty_xxk_close(){
image_ty_xxk.gameObject.SetActive (false); }
//注册函数 public void zc(){
if (InputField_name_zc.text == "" || InputField_pass_zc.text == "" || InputField_pass1_zc.text == "" || InputField_tel_zc.text == "" || InputField_qq_zc.text == "") {
ty_xxk("信息不完整!有空的项目!");
return;
}
if (InputField_pass1_zc.text != InputField_pass_zc.text) {
ty_xxk("两次输入的密码不一致!!");
return;
}
//判断用户帐号是否被占用!
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(_xmlpath);
XmlNodeList nodeList = xmlDoc.SelectSingleNode("Root").ChildNodes;
foreach (XmlElement xe in nodeList){
if (xe.GetAttribute("user_name") == InputField_name_zc.text){
ty_xxk("该用户名已被占用!请更换用户名!");
return;
}
} //取得根节点
XmlNode root = xmlDoc.SelectSingleNode("Root");
//创建User新节点
XmlElement user = xmlDoc.CreateElement("User");
//XmlElement user1 = xmlDoc.CreateElement("User_lov");
//XmlText lov = xmlDoc.CreateTextNode ("158");
//user1.AppendChild (lov);
//设置属性
user.SetAttribute("user_name",InputField_name_zc.text);
user.SetAttribute("user_pass",InputField_pass_zc.text);
//将新节点加入根节点
root.AppendChild(user);
//root.AppendChild(user1);
//保存文件
xmlDoc.Save(_xmlpath);
//打开通用信息窗口显示信息
ty_xxk("恭喜!注册成功!");
//请空已注册的信息
InputField_name_zc.text="";
InputField_pass_zc.text="";
}
//登录函数
public void denglu(){
if (InputField_pass.text == "" || InputField_name.text == "") {
ty_xxk("用户名或密码不能为空!");
return;
}
//判断用户名是否已注册
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(_xmlpath);
XmlNodeList nodeList = xmlDoc.SelectSingleNode("Root").ChildNodes;
foreach (XmlElement xe in nodeList){
//判断用户名是否已注册
if (xe.GetAttribute("user_name") == InputField_name.text){
var mima=xe.GetAttribute("user_pass");
if(InputField_pass.text==mima){
ty_xxk("登录成功!");
Application.OpenURL ("http://www.cnblogs.com/ljq66/");
return;
}else{
ty_xxk("登录失败!密码错误!");
return;
}
}
}
//没有注册
ty_xxk("此用户帐号还没有注册!请注册!");
}
}

注:转载请注明出处

【Salvation】——登录注册存储数据&验证用户的更多相关文章

  1. node+mysql+express实现登录/注册/修改密码/删除用户 接口

    实现用户的注册.登录.修改密码.删除用户操作 用到的数据库:nodecms:表:user 目录结构: db目录下存放数据库操作语句: userSQL.js 用户有关的操作语句 router目录 接口路 ...

  2. Thinkphp框架 表单自动验证登录注册 ajax自动验证登录注册

    说明:这里没练习静态自动验证:如果用到静态验证首先自定义一个控制器,再在Model文件夹里创建一个NiHaoModel.php 类  NiHao是自定义的,前缀可以随意,但是一定要用驼峰法(首字母大写 ...

  3. vue登录注册及token验证

    // router.jsimport Vue from 'vue'import VueRouter from 'vue-router' Vue.use(VueRouter) const routes ...

  4. 模拟用户登录,内含验证码验证和request等操作

    模拟用户登录,内含验证码验证和jsp等操作 1.案例需求: 1. 访问带有验证码的登录页面login.jsp 2. 用户输入用户名,密码以及验证码. * 如果用户名和密码输入有误,跳转登录页面,提示: ...

  5. Java实战之01Struts2-03属性封装、类型转换、数据验证

    九.封装请求正文到对象中 1.静态参数封装 在struts.xml配置文件中,给动作类注入值.调用的是setter方法. 原因:是由一个staticParams的拦截器完成注入的. 2.动态参数封装: ...

  6. strut2 的数据验证

    数据验证 用户的输入验证,必须做,且工作量巨大. 1.验证的方式 客户端验证:javascript 服务端验证:逻辑验证(我们的代码) 注意:如果客户端和服务端二选一的话,服务器端的不能省. 实际开发 ...

  7. 学习Struts--Chap06:Struts2之数据验证

    1.数据验证的概述 1.1.数据验证的重要性 数据验证是非常必要的,不但和我们的常识性理解有关系,还有可能涉及到一些非法输入等问题,所以我们需要进行必要的数据验证,以保证我们在数据输入的时候都是正确且 ...

  8. 项目一:第八天 1、前台系统导入 实现客户注册 发验证码,邮件 springdata-redis存储数据 3、实现客户登陆

    1 前台系统客户注册功能 页面:signup.html 1.1 验证手机号是否注册(邮箱同样) 1. 使用Jquery-validate插件进行相关校验,使用校验规则 <input type=& ...

  9. Ruby Rails学习中:User 模型,验证用户数据

    用户建模 一. User 模型 实现用户注册功能的第一步是,创建一个数据结构,用于存取用户的信息. 在 Rails 中,数据模型的默认数据结构叫模型(model,MVC 中的 M).Rails 为解决 ...

随机推荐

  1. Java单链表实现

    /** * * 单链表基本操作 * * @author John * */ class LinkList { private Node first; private int pos = 0; publ ...

  2. Spring配置属性文件

    在项目开发阶段和交付阶段数据库的连接信息往往是不同的,可以把这些信息写成属性文件,再在Spring中导入即可引用 jdbc.properties属性文件如下: jdbc.driverClassName ...

  3. 反转字符串的几种实现(Java)

    反转字符串的几种实现(Java) 首先第一种是利用Java中的类库对象进行反转 //第一种 使用Java类库的diam实现反转 public String reverse(String str){ S ...

  4. mongodb 在windows下面进行分片

    在mongodb里面存在另一种集群,就是分片技术,跟sql server的表分区类似,我们知道当数据量达到T级别的时候,我们的磁盘,内存就吃不消了,针对这样的场景我们该如何应对. 一:分片 mongo ...

  5. Apache服务器处理404错误页面技巧

    1.打开Apache目录,查找httpd.conf文件 2.打开httpd.conf文件,找到<Directory "    "></Directory>这 ...

  6. JS设计模式(二) 惰性模式

    惰性模式:减少代码每次执行时的重复性判断,通过重新定义对象来避免原对象中的分支判断,提高网站性能. 例如针对不同浏览器的事件注册方法: var AddEvent = function(dom, typ ...

  7. Minutes和TotalMinutes的区别

    今天测试提了一个BUG,说是消息提醒的时机不对,设置的提前2小时,还没到就提醒了. 看了下代码 (m.ExpectReceiveTime - DateTime.Now).Minutes < (p ...

  8. Quartz学习——Spring和Quartz集成详解(三)

    Spring是一个很优秀的框架,它无缝的集成了Quartz,简单方便的让企业级应用更好的使用Quartz进行任务的调度.下面就对Spring集成Quartz进行简单的介绍和示例讲解!和上一节 Quar ...

  9. JPEG流封装AVI视频

    前言:前几天工作任务,要把JPEG流封装为AVI视频,就找了些AVI文件结构资料和示例代码研究了下,现将学习总结及最终完成的可用代码分享出来,由于本人也是现学现用,如有不恰当或错误之处,欢迎提出! 1 ...

  10. 微软的一篇ctr预估的论文:Web-Scale Bayesian Click-Through Rate Prediction for Sponsored Search Advertising in Microsoft’s Bing Search Engine。

    周末看了一下这篇论文,觉得挺难的,后来想想是ICML的论文,也就明白为什么了. 先简单记录下来,以后会继续添加内容. 主要参考了论文Web-Scale Bayesian Click-Through R ...