Unity登录注册数据库
打开【服务器01】的文章项目
导入新UI系统
点击2D
双击输入栏位置
修改输入框尺寸及位置
放大字体
修改默认输入文字 发现中文字变成了口口口口
原因是新UI系统不支持中文,解决这个问题需要更换字体
并且修改输入时字体大小
我们取电脑中找Font文件夹
首先在本机系统中查找对应包(比如Windows系统就查找c盘下的Windows文件包)
双击Windows找到Font文件夹
双击进去
里面装着这个系统的所有字体,勿删
复制一个黑体到unity文件中
在unity中创建好Fonts包 后拖拽即可
右键字体选择 Font Asset 创建
一个简易的字体就创建完成了,但这个字体还不能使用
将新创建的字体改为静态
ctrl + d 复制一份改为动态
此时选择静态字体 点击加号
将复制出来的动态字体拖拽到静态字体的 Fallback List中
输入时的Text也要换下字体
此时TMP可以正常显示中文了
然后创建一个旧版的Input Field
新版的 内容类型 设置成 标准Standard
旧版设置成
这样运行后输入效果
接下来创建登录按钮
首先创建一个新版UI的Button ------用来做 登录
再创建一个旧版UI的Button ------用来做 注册
简单处理一下位置
导入资源
新导入的Plugins 是用来存储动态库的
动态库通常是.dll结尾的 应用程序扩展文件
这个东西就是一组被封装起来的API
有了它我们就可以连接数据库 使用数据库的类
这三个是库 也就是说当打包时没有这三个库的支持 是不能打包的
换句话说
只有MySql.Data这个东西zaiunity中运行是可以连接数据库的,
但是打包的话需要上面那三个库的支持
我们查看它的属性
接下来创建输入账号密码错误时的错误提示
将Image铺满
处理一下颜色 和 Button 的位置
接着设置一下右上角的button关闭提示页面
然后将Image(账号密码输入错误的提示界面)隐藏
接下来我们再unity脚本中创建 连接数据库的文件夹
创建脚本MySqlAccess.cs
双击点开数据库复制外网地址
复制外网地址
粘粘到代码上
登录阿里云
创建数据库
接下来创建navicat的数据库
打开连接后变绿色点击新建数据库
接下来创建表
点击保存
输入表名
此时我们就可以查看创建的表了
回到unity继续编写代码
保存后在navicat数据库的表填写数据
创建空物体
然后将脚本挂载
现在开始测试一下,首先创建一个新版UIText 更改字体
创建一个测试代码
数据库输入值后需要点击√按钮进行保存
unity运行测试
测试成功
继续编写代码
试一下查询语句
复制以下代码
填入信息
点击运行看是否可以成功插入
继续编写代码
我们再做一次测试
复制
粘粘
更新成功
继续编写代码
此时增删改查方法就已经完成了就不做测试
现在开始编写登陆脚本:
首先在Navicat中新建一个表
保存
打开表
我们想再添加一个解释属性
我们回到上步骤添加一下
顺便修改个表名
现在继续编写代码实现登录
using UnityEngine;
using MySql.Data.MySqlClient;
using System.Data;
public class MySqlAccess : MonoBehaviour{
//定义一个连接字符串
string connStr = "server=" +
"rm-cn-83l3seehd00091po.rwlb.zhangbei.rds.aliyuncs.com;" +
"user = hanyunhanData;" +
"database = water;" +
"port = 3306;" +
"password = 13512647882hH;" +
"Charset = utf8";
//unity与数据库的连接方法 - 需要连接数据库时调用
MySqlConnection ConectToDataBase() {
//实例化数据库连接对象 并传入连接信息
MySqlConnection conn = new MySqlConnection(connStr);
conn.Open();
return conn;
}
//定义一个公共的查询方法
public string QueryData(string tableName, string condition) {
#region -相当于把语句沾沾到navicat中
//数据库查询语句在unity的使用
string query = $"select * from {tableName} where {condition}";
//使用连接方法ConectToDataBase()连接数据库
MySqlConnection conn = ConectToDataBase();
//构造查询条件 依据query中的SQL语句查询
MySqlCommand cmd = new MySqlCommand(query, conn);
#endregion
#region 相当于点开始查询的按钮
//执行查询语句的条件
MySqlDataReader reader = cmd.ExecuteReader();
//获取数据库读取到的数据
string myString = "未获得数据库数据";
//循环读取数据库中的数据
while (reader.Read()) {
int id = reader.GetInt32("id");
string name = reader.GetString("name");
string password = reader.GetString("password");
myString = string.Format("{0}{1}{2}", id, name, password);
Debug.Log("数据库中循环读取的数据{0}{1}{2}");
}
#endregion
//关闭数据库
conn.Close();
return myString;
}
public void InsertData(string tableName, string columns, string valuers) {
//插入的SQL语句
string query = $"Insert into {tableName} ({columns}) values ({valuers})";
//使用连接方法ConectToDataBase()连接数据库
MySqlConnection conn = ConectToDataBase();
//构造插入条件 依据query中的SQL语句插入
MySqlCommand cmd = new MySqlCommand(query, conn);
//执行SQL语句插入
cmd.ExecuteNonQuery();
//关闭数据库
conn.Close();
}
//更新语句
public void UpdateData(string tableName, string setStatement, string condition) {
//更新的Sql语句
string query = $"Update {tableName} set {setStatement} where {condition}";
//使用连接方法ConectToDataBase()连接数据库
MySqlConnection conn = ConectToDataBase();
//构造更新条件 依据query中的SQL语句更新
MySqlCommand cmd = new MySqlCommand(query, conn);
//执行SQL语句更新
cmd.ExecuteNonQuery();
//关闭数据库
conn.Close();
}
//删除数据的方法
public void DeleteData(string tableName, string condition) {
//删除的Sql语句
string query = $"Delete from {tableName} where {condition}";
//使用连接方法ConectToDataBase()连接数据库
MySqlConnection conn = ConectToDataBase();
//构造删除条件 依据query中的Sql语句删除
MySqlCommand cmd = new MySqlCommand(query, conn);
//执行SQL语句删除
cmd.ExecuteNonQuery();
//关闭数据库
conn.Close();
}
//登陆方法 游戏内消耗物品的二级密码
public bool CheckLogin(string tableName, string username, int password) {
//建立查询条件
string condition = $"name = '{username}' and password = {password}";
//使用条件字符串查询
string query = $"select * from {tableName} where {condition}";
//使用连接方法ConectToDataBase()连接数据库
MySqlConnection conn = ConectToDataBase();
//构造擦汗寻条件 依据query中的SQL语句查询
MySqlCommand cmd = new MySqlCommand(query, conn);
//执行查询语句的条件
MySqlDataReader reader = cmd.ExecuteReader();
//判断账户密码是否存在
bool loginSuccess = reader.HasRows;
//关闭数据库
conn.Close();
//返回账户结果
return loginSuccess;
}
//登陆方法 检测登陆界面用户名和密码
public bool CheckLogin(string username, int password){
//建立查询条件
string condition = $"name = '{username}' and password = {password}";
//使用条件字符串查询
string query = $"select * from userinfo where {condition}";
//使用连接方法ConectToDataBase()连接数据库
MySqlConnection conn = ConectToDataBase();
//构造擦汗寻条件 依据query中的SQL语句查询
MySqlCommand cmd = new MySqlCommand(query, conn);
//执行查询语句的条件
MySqlDataReader reader = cmd.ExecuteReader();
//判断账户密码是否存在
bool loginSuccess = reader.HasRows;
//关闭数据库
conn.Close();
//返回账户结果
return loginSuccess;
}
//注册方法
public void RegisterUser(string username, int password) {
//准备插入条件
string columns = "name,password";
string values = $"'{username}',{password}";
//插入到表格中
InsertData("userinfo",columns,values);
}
}
现在回到Unity中再创建一个脚本来使用一下登陆与注册
在Unity中做一个登陆失败的提示页面
打开隐藏的错误提示页面
修改之后取消激活
编写代码:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.UI;
using TMPro;
public class LogUI : MonoBehaviour{
//获取MySqlAccess类 在LogUI类中使用MySql类中的成员和方法
private MySqlAccess mySqlAccess;
//获取登陆失败提示文本
public GameObject errorUI;
//获取账户输入框------新版UI
public TMP_InputField inputUsername;
//获取密码输入框------旧版UI
public InputField inputPassword;
private void Start(){
mySqlAccess = GameObject.Find("DataBaseConnection").GetComponent<MySqlAccess>();
}
//登录检测 点击按钮时运行
public void OnLoginButtonClick() {
//获取输入账号框中的内容
string username = inputUsername.text;
//获取输入密码框的密码 并强制转换为int
int password = int.Parse(inputPassword.text);
//调用MySqlAccess类中登陆检测方法 判断账号是否合法
//合法允许登录 否则提示错误
if (mySqlAccess.CheckLogin(username, password)){
//登陆成功 切换场景
SceneManager.LoadScene(1);
}
else {
//登录失败提示
errorUI.SetActive(true);
}
}
}
现在回到Unity中挂载脚本测试
之后设置登录按钮的点击函数
现在我们开始测试
首先点击Build Settings
将UI登陆界面和游戏开始场景放在Build Settings中
再看navicat上的账号和密码
我们首先登陆一个错误的账号和密码
输入正确的账号密码
成功跳转连接数据库成功
接下来我们编写注册的代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.UI;
using TMPro;
public class LogUI : MonoBehaviour{
//获取MySqlAccess类 在LogUI类中使用MySql类中的成员和方法
private MySqlAccess mySqlAccess;
//获取登陆失败提示文本
public GameObject errorUI;
//获取账户输入框------新版UI
public TMP_InputField inputUsername;
//获取密码输入框------旧版UI
public InputField inputPassword;
private void Start(){
mySqlAccess = GameObject.Find("DataBaseConnection").GetComponent<MySqlAccess>();
}
//登录检测 点击按钮时运行
public void OnLoginButtonClick() {
//获取输入账号框中的内容
string username = inputUsername.text;
//获取输入密码框的密码 并强制转换为int
int password = int.Parse(inputPassword.text);
//调用MySqlAccess类中登陆检测方法 判断账号是否合法
//合法允许登录 否则提示错误
if (mySqlAccess.CheckLogin(username, password)){
//登陆成功 切换场景
SceneManager.LoadScene(1);
}
else {
//登录失败提示
errorUI.SetActive(true);
}
}
//注册功能 点击按键时执行
public void OnRegisterButtonClick() {
//获取注册框上的注册信息
string username = inputUsername.text;
//获取密码框上的密码
int password = int.Parse(inputPassword.text);
//调用我们的注册方法
mySqlAccess.RegisterUser(username, password);
}
}
回到Unity中
开始测试注册
看一下navicat账号密码信息
点击注册之后
注册成功可点击登陆进入Game场景
End.