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);
}
}