【服务器05】之【登录/注册账号成功转至游戏场景】

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.

相关推荐
cooldream200911 天前
Navicat导入Excel数据时数据被截断问题分析与解决方案
excel·navicat
Navicat中国13 天前
SQL 干货 | SQL 反连接
数据库·sql·mysql·postgresql·navicat
我会说:明天更快乐15 天前
零,报错日志 2002-Can‘t connect to server on‘106.54.209.77‘(1006x)
sql·navicat
Navicat中国16 天前
Navicat 17 新功能 | 数据分析 data profiling
大数据·数据库·信息可视化·数据挖掘·数据分析·navicat
MinggeQingchun22 天前
MySQL - Navicat自动备份MySQL数据
mysql·navicat
golitter.1 个月前
Navicat图形化设置字段unique
mysql·navicat
C吴新科1 个月前
Navicat 工具 下载安装
数据库·navicat
Navicat中国2 个月前
Navicat 17 新特性 | 聚焦 MongoDB
数据库·sql·mongodb·信息可视化·nosql数据库·navicat
Navicat中国2 个月前
Navicat On-Prem Server 2.0 | MySQL与MariaDB基础管理功能正式上云
数据库·mysql·mariadb·navicat
Navicat中国2 个月前
Navicat 17 新特性 | 新增 Redis 哨兵部署模式
数据库·redis·信息可视化·navicat