Animation旧版动画 Unity 通过数据库实现登录注册功能

Animation

旧版动画 可以制作一些简单的动画

(1)想给谁做动画就选中谁
(2)Window -----> Animation -----> 就可以打开一个窗口了

Unity 通过数据库实现登录注册功能

注意 写的时候一定要想清楚再写 要不会丢三落四

​ 另外 一定要.text 不要直接输入框就插入 就很尴尬

​ 如果sql 语句的 语法不确认 可以查看w3school 上面有语法

using UnityEngine;
using Mono.Data.Sqlite;
using UnityEngine.UI;
using System.Collections.Generic;
using System.Collections;


/*
 * 登录  ----->  用用户输入的账户查密码
 * 如果返回过来的密码 和 用户输入的密码相同  说明找到了 用户输入的正确
 * 如果返回过来的密码 和 用户输入的密码不相同  说明 账户对了 但是密码输入错误了
 * 如果返回过来的密码是空的 说明账户都输入错误了 
 */

public class LoginController : MonoBehaviour
{
	
	//数据库
	private SqliteConnection con;
	private SqliteCommand _command;
	private SqliteDataReader _reader;
	//连接数据库的字符串
	private string connectionStr;

	private SqliteDataReader uname;


	#region 登录界面找的组件
	//找这些组件
	private GameObject loginWindow;
	private InputField Login_unameInput;
	private InputField Login_pwdInput;
	private Toggle Login_rememberMeToggle;
	private Button Login_loginBtn;
	private Button Login_signBtn;
	private Text Login_promptText;
	#endregion

	#region 注册界面找的组件
	private GameObject signInWindow;
	private InputField SignIn_unameInput;
	private InputField SignIn_pwdInput;
	private InputField SignIn_secondPwdInput;
	private Button SignIn_signBtn;
	private Button SignIn_returnBtn;
	private Text SignIn_promptText;
	#endregion
	
	/// <summary>
	/// 是否记住密码
	/// </summary>
	private bool rememberMe = false;
	
	private void Awake()
	{
		#region 登录的
		loginWindow = transform.GetChild(0).gameObject;
		Login_unameInput = transform.GetChild(0).GetChild(0).GetComponent<InputField>();
		Login_pwdInput = transform.GetChild(0).GetChild(1).GetComponent<InputField>();
		Login_rememberMeToggle = transform.GetChild(0).GetChild(2).GetComponent<Toggle>();
		Login_loginBtn = transform.GetChild(0).GetChild(3).GetComponent<Button>();
		Login_signBtn = transform.GetChild(0).GetChild(4).GetComponent<Button>();
		Login_promptText = transform.GetChild(0).GetChild(5).GetComponent<Text>();
		#endregion

		#region 注册的
		signInWindow = transform.GetChild(1).gameObject;
		SignIn_unameInput = transform.GetChild(1).GetChild(0).GetComponent<InputField>();
		SignIn_pwdInput = transform.GetChild(1).GetChild(1).GetComponent<InputField>();
		SignIn_secondPwdInput = transform.GetChild(1).GetChild(2).GetComponent<InputField>();
		SignIn_signBtn = transform.GetChild(1).GetChild(3).GetComponent<Button>();
		SignIn_returnBtn = transform.GetChild(1).GetChild(4).GetComponent<Button>();
		SignIn_promptText = transform.GetChild(1).GetChild(5).GetComponent<Text>();
		#endregion
	}

	private void Start()
	{
		//绑定登录里的回调
		Login_rememberMeToggle.onValueChanged.AddListener(OnRememberMeToggleValueChange);
		Login_loginBtn.onClick.AddListener(OnLoginBtnClick);
		Login_signBtn.onClick.AddListener(OnSignBtnClick);
		//绑定注册里的回调
		SignIn_signBtn.onClick.AddListener(OnSignInButtonClick);
		SignIn_returnBtn.onClick.AddListener(OnReturnButtonClick);
		//数据库初始化
		DataBaseInit();
		//判断是否记住密码
		LoadRememerUser();
	}
	
	/// <summary>
	/// 数据库初始化
	/// </summary>
	private void DataBaseInit()
	{
		//设置连接字符串
		connectionStr = "Data Source = " + Application.streamingAssetsPath + "/Userdatabase.sqlite";
		//实例化连接对象
		con = new SqliteConnection(connectionStr);
		//打开连接
		con.Open();
		//创建指令对象
		_command = con.CreateCommand();
	}

	/// <summary>
	/// 记录记住用户加载
	/// </summary>
	private void LoadRememerUser()
	{
		if (PlayerPrefs.HasKey("uname"))
		{
			Login_unameInput.text = PlayerPrefs.GetString("uname");
			Login_pwdInput.text = PlayerPrefs.GetString("pwd");
			Login_rememberMeToggle.isOn = true;
		}
	}

	/// <summary>
	/// 记住密码的点击事件
	/// </summary>
	/// <param name="isOn"></param>
	private void OnRememberMeToggleValueChange(bool isOn)
	{
		//记录是否勾选了记住密码
		rememberMe = isOn;
		//不管之前他多少次登录成功,只要有一次取消勾选
		//重新输入错误 都取消勾选
		//取消勾选 
		if (!isOn)
		{
			PlayerPrefs.DeleteAll();
		}
	}

	/// <summary>
	/// 登录按钮的点击事件(绑定后 点击登录按钮 就触发)
	/// </summary>
	private void OnLoginBtnClick()
	{
		//校验
		if (Login_unameInput.text == "" || Login_pwdInput.text == "")
		{
			//Debug.Log("请输入用户名和密码!");
			Login_promptText.text = "请输入用户名和密码!";
			return;
		}
		//编写SQL语句
		_command.CommandText = string.Format("Select pwd From UserTable where uname='{0}'",Login_unameInput.text);
		//执行SQL语句,返回查询密码
		object pwd = _command.ExecuteScalar();
		//校验
		//如果查询的密码为空 说明账户都输错了 
		if (pwd == null)
		{
			//Debug.Log("无该账户存在!");
			Login_promptText.text = "无该账户存在!";
			return;
		}
		//如果数据库密码和用户输入的相等
		if (pwd.ToString() == Login_pwdInput.text)
		{
			//Debug.Log("登录成功!");
			Login_promptText.text = "登录成功!";
			//登陆成功在记住密码且勾选了rememberMe
			//记住用户名密码
			if (rememberMe)
			{
				PlayerPrefs.SetString("uname",Login_unameInput.text);
				PlayerPrefs.SetString("pwd",Login_pwdInput.text);
			}
		}
		//不相等 说明账号存在 但是密码输入错误了
		else
		{
			//Debug.Log("用户名或密码输入错误,请重新输入!");
			Login_promptText.text = "用户名或密码输入错误,请重新输入!";
		}
	}

	/// <summary>
	/// 登录里面 注册按钮的点击事件 切换UI用
	/// </summary>
	private void OnSignBtnClick()
	{
		loginWindow.SetActive(false);
		signInWindow.SetActive(true);
	}
	
	/// <summary>
	/// 释放所有资源
	/// </summary>
	private void DataBaseDispose()
	{
		if (_reader != null)
		{
			_reader.Close();
			_reader = null;
		}

		if (_command != null)
		{
			_command.Dispose();
			_command = null;
		}

		if (con != null)
		{
			con.Close();
			con = null;
		}
	}

	/// <summary>
	/// 程序结束执行
	/// </summary>
	private void OnApplicationQuit()
	{
		//释放所有资源
		DataBaseDispose();
	}

	/// <summary>
	/// 查询多个封装的方法
	/// </summary>
	/// <returns></returns>
	private List<ArrayList> SelectMultipleData()
	{
		List<ArrayList> result = new List<ArrayList>();
		//遍历读取下一行
		
		//_command.CommandText ="Select "
		
		//read 读取下一行
		while (uname.Read())
		{
			//每当读取一行就存起来
			//存储当前行
			ArrayList rowData = new ArrayList();
			//遍历所有的列
			for (int i = 0; i < uname.FieldCount; i++)
			{
				//存储当前行的当前列
				rowData.Add(uname.GetValue(i));
			}
			//将存储好的行数据在存储到list里
			result.Add(rowData);
		}
		//关闭读取器
		uname.Close();
		//返回结果
		return result;
	}

	/// <summary>
	/// 注册界面确认按钮点击事件
	/// </summary>
	private void OnSignInButtonClick()
	{
		/*
		 * (1)账户已经存在了 不能重复注册  提示给玩家 数据库查
		 * (2)账户不存在 可以注册 用户输入密码第二次必须与第一次相同 不相同不能注册 提示给玩家
		 * (3)当成功注册 要存储到数据库  提示给用户
		 */
		
		//编写SQL语句
		_command.CommandText = "Select uname From UserTable";

		uname = _command.ExecuteReader();
		//执行SQL语句
		List<ArrayList> sqlSelectUname = SelectMultipleData();
		//如果账户存在了 不能在注册
		for (int i = 0; i < sqlSelectUname.Count; i++)
		{
			if (SignIn_unameInput.text == sqlSelectUname[i][0].ToString())
			{
				SignIn_promptText.text = "该账户名已存在";
				return;
			}
		}
		//账户不存在 可以注册 
		//这里判断 如果输入的第二次密码与第一次不同 提示 
		if (SignIn_pwdInput.text != SignIn_secondPwdInput.text)
		{
			SignIn_promptText.text = "两次密码不一致,请重新输入";
			return;
		}
		else
		{
			//存储到数据库
			SqlInsert();
			//提示给玩家
			SignIn_promptText.text = "注册成功!请返回到登录界面进行登录";
		}
	}

	/// <summary>
	/// 注册界面里数据库的添加操作
	/// </summary>
	private void SqlInsert()
	{
		//编写SQL语句
		_command.CommandText = "Insert Into UserTable values ('" + SignIn_unameInput.text + "','" + SignIn_pwdInput.text + "')";
		//执行SQL语句
		int row = _command.ExecuteNonQuery();

	}

	/// <summary>
	/// 注册界面的返回按钮
	/// </summary>
	private void OnReturnButtonClick()
    {
		loginWindow.SetActive(true);
		signInWindow.SetActive(false);
    }
}

在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值