学习Unity已经将近一个月了,今天初接触Json,记录一下!仅供参考,大神看看就好.
今天使用LitJson搭配NGUI实现登录界面的登录与注册功能,由于我也是新手,有做的不好的地方,欢迎大家指正!
第一步:搭建界面:
具体过程我就不多说了,我做的界面也不是太好,应为自己也是刚接触NGUI,就不献丑了......
搭建好的界面大概是这样的:
一个登录界面,一个注册界面(原谅我吧,字体不支持中文),
将要实现的功能:登录时会与储存的账户密码对比,账号错误时输出:账号不存在.密码错误时输出:密码错误,请重新输入.账号密码为空时输出:账号密码不能为空,请重新输入! .最后,账号密码都正确时输出:登录成功!
注册界面: 输入的账号密码为空时输出:账号密码不能为空.账号与储存的账号一样时输出:该账号已经有人用了,再换一个吧!:两次输入密码不一样时输出:两次输入的密码不一样.最后一种情况则输出:注册成功! 注册成功时会查找我们的json文件,将用户名密码写入文件储存. 最后,实现在开始运行时读取文件.
话不多说,进入正题:为了简便,我将所有代码都写在了一个脚本上.
在UIRoot 目录下创建了空物体,重命名为:GameManager,然后在右侧Inspector面板最下方点击Add Component,搜索栏输入GameManager然后双击enter键以创建并绑定我们的脚本:
双击打开我们的脚本文件.
根据我们需要的功能,我们须要声明并找到我们的两个panel,以及登录页的两个输入框,两个按钮,注册页的三个输入框,两个按钮.
public class GameManager : MonoBehaviour {
public UIPanel login, signUp;
public UIInput un, pw, reun, repw, repw2;
可以在Start方法中使用GameObject.Find();方法查找,也可以在场景中点中GameManager空物体,分别将上述面板以及输入框及按钮拖入inspector面板的GameManager属性中.
void Start () {
login = GameObject.Find("LoginPanel").GetComponent <UIPanel >();
signUp = GameObject.Find("Register").GetComponent<UIPanel>();
un = GameObject.Find("LoginPanel/Username/un").GetComponent<UIInput>();
pw = GameObject.Find("LoginPanel/Password/pw").GetComponent<UIInput>();
reun = GameObject.Find("Register/Username/un").GetComponent<UIInput>();
repw = GameObject.Find("Register/Password/pw").GetComponent<UIInput>();
repw2 = GameObject.Find("Register/RePassword/pw").GetComponent<UIInput>();
signUp.gameObject.SetActive(false);
}
这里我们须要创建一个字典来临时储存所有的账户和密码.
public class GameManager : MonoBehaviour {
public UIPanel login, signUp;
public UIInput un, pw, reun, repw, repw2;
//创建一个字典来储存账号信息
public Dictionary<string, string> allAccount = new Dictionary<string, string>();
先写一下Login按钮的点击事件:
//登录按钮点击事件
public void LoginButton() {
//获取输入框中的值
string username = un.value;
string password = pw.value;
//根据这两个值进行逻辑判断
if (username == "" || password == "") {
print("用户名或密码为空,请重新输入");
return;//如果用户名或密码为空,进入这里
}
else if (allAccount.ContainsKey(username))
{//否则如果用户名正确
if (password == allAccount[username])
{
//如果与这个用户名一对的密码正确
print("登录成功!!");
return;
}
else {
//如果用户名正确但是密码不正确
print("密码错误");
return;
}
}
else {
//其他情况输出用户名或者密码错误
print("用户名或密码错误,请重新输入");
return;
}
}
然后是登录界面的注册按钮事件:
//登录界面的注册按钮事件
public void RegisterButton() {
login.gameObject.SetActive(false);
signUp.gameObject.SetActive(true);
}
此时就跳转到了注册页面了,接下来是对注册页面的一些操作:
先写这个页面的注册按钮事件吧:
//注册页面的注册按钮事件
public void SignUpButton() {
//获取输入框的值
string username = reun.value;
string password = repw.value;
string password2 = repw2.value;
//根据这两个值进行逻辑判断
if (username == "" || password == "")
{
//如果用户名和密码为空时
print("用户名和密码不能为空!!");
return;
}
else if (allAccount.ContainsKey(username))
{
//如果用户名和已知的重复时
print("该用户名已经被用了,请换一个吧!");
return;
}
else if (password != password2)
{
//如果两次输入密码不一致时
print("两次输入的密码不一样");
return;
}
else {
allAccount.Add(username, password);
print("注册成功!!");
}
}
还是这个方法,我们需要将allAccount中的数据写入到Json文件中,实现数据的保存;
首先引用一下: 注:这一步前需要先将Json文件导入到你的项目中,再新建一个.txt格式的储存信息的文件
注:这一步前需要先将LitJson文件导入到你的项目中,再新建一个.txt格式的储存信息的文件(我的文件名字是RegisteJson.txt)
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using LitJson;
using System.IO;
开始写入文件:(写入文件后需要关闭文件写入工具,刷新储存文件)
else {
//将数据存入字典中
allAccount.Add(username, password);
//将数据存入Json文件中
//声明一个字符串类型来储存文件的位置
string path = Application.dataPath + "/Appconfig/RegisteJson.txt";
//记录储存文件的信息
FileInfo file = new FileInfo(path);
if (!file.Exists) {
//如果找不到文件则警告
Debug.LogError("找不到储存文件!!!!!");
}
//开始写入数据
//创建一个写入对象,用于写入数据
StreamWriter writer = new StreamWriter(path );
//将字典内容转换成Json可识别内容(不知道怎么形容好........)
JsonData jd = JsonMapper.ToJson(allAccount);
//写入数据
writer.Write(jd);
//关闭写入器
writer.Close();
//刷新储存文件
file.Refresh();
print("注册成功!!");
return;
}
然后就是返回按钮的事件了:
//返回按钮事件
public void BackButton() {
signUp.gameObject.SetActive(false);
login.gameObject.SetActive(true);
}
由于写入模式是覆盖式,所以我们需要在开始时将数据读取出来储存到字典中:
创建一个读取数据方法:
//读取数据方法
public void ReadJson() {
//读取数据
//声明一个字符串类型来储存文件的位置
string path = Application.dataPath + "/Appconfig/RegisteJson.txt";
//记录储存文件的信息
FileInfo file = new FileInfo(path);
if (!file.Exists)
{
//如果找不到文件则警告
Debug.LogError("找不到储存文件!!!!!");
}
//读取数据
string all = File.ReadAllText(path);
allAccount = JsonMapper.ToObject<Dictionary<string, string>>(all );
}
然后在start()方法中调用读取数据方法:
void Start () {
login = GameObject.Find("LoginPanel").GetComponent <UIPanel >();
signUp = GameObject.Find("Register").GetComponent<UIPanel>();
un = GameObject.Find("LoginPanel/Username/un").GetComponent<UIInput >();
pw = GameObject.Find("LoginPanel/Password/pw").GetComponent<UIInput>();
reun = GameObject.Find("Register/Username/un").GetComponent<UIInput>();
repw = GameObject.Find("Register/Password/pw").GetComponent<UIInput>();
repw2 = GameObject.Find("Register/RePassword/pw").GetComponent<UIInput>();
signUp.gameObject.SetActive(false);
ReadJson();
}
至此,我们的一些小功能就全部实现了!!!