【Salvation】——登录注册存储数据&验证用户
写在前面:登录注册功能是在纯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("此用户帐号还没有注册!请注册!"); } }
注:转载请注明出处
- sqlserver存储过程验证用户登录和账号是否停用或者被其他人登录中--写给新人
- iOS开发中本地数据存储的 ios登录成功后将用户的数据存储到本地 下次打开应用时不用重复登录了
- 简易的用户账号注册和登录验证程序(1)
- 验证用户是否登录,是否有过注册信息
- 使用MVC模型的用户登录及注册(注册验证)
- [SqlServer]用户注册、登录、修改密码存储过程实例
- python django 用户注册验证登录。。。
- 数据库存储过程验证用户登录
- 使用leancloud实现登录注册,数据存储,即使通讯等功能
- ASP.NET+ExtJs2.0+Ajax连接数据验证用户登录
- Yii2本身自带实现用户注册,验证,登录
- 模拟后端存储数据,实现表单的注册和登录
- Android基础学习总结(十二)——利用Bmob实现用户账户体系(注册、登录、验证等)
- Android-数据储存:用户登录界面(存储)
- 用户登录注册验证(js)
- oauth的融合到discux,涉及数据同步,用户登录验证
- 续上一篇,注册、登录Java程序(集合存储数据)
- 用户登录与注册表单验证代码
- 【公告】关于开启用户注册及登录手机短信验证的通知
- 普通用户注册 插入数据的存储过程