1 安装Unity引擎和Navicat软件
确保这两个软件都能够在你的计算机上良好地运行。
2 安装MySQL8.0数据库
2.1 下载msi文件
镜像地址:http://mirrors.sohu.com/mysql/MySQL-8.0/
![在这里插入图片描述](https://img-blog.csdnimg.cn/fb48fac83d0e4cbd999173defc1af3f1.png)
2.2 安装MySQL Server 8.0
下载完成后双击运行msi文件。
Next→
![在这里插入图片描述](https://img-blog.csdnimg.cn/f2810c7de9c245e0b17b1934590d30fe.png)
Next→
![在这里插入图片描述](https://img-blog.csdnimg.cn/7f2c66b21c6745788fb44d1783425793.png)
选择自定义安装,
Next→
![在这里插入图片描述](https://img-blog.csdnimg.cn/dff6d674402c47198d48450372512193.png)
选择安装路径,
Next→
![在这里插入图片描述](https://img-blog.csdnimg.cn/4aed0c268b374329a98a24d8d3d83697.png)
Install安装,
![在这里插入图片描述](https://img-blog.csdnimg.cn/067dcbb275de426b8572501d941b9ab2.png)
安装完成,Finish。
2.3 配置环境变量
此电脑→计算机→属性,
![在这里插入图片描述](https://img-blog.csdnimg.cn/57c041b2d05743e081291dd3ccc6d58d.png)
关于→高级系统设置,
![在这里插入图片描述](https://img-blog.csdnimg.cn/70c7853c632f4b8a8113f221c4ba1a6f.png)
高级→环境变量,
![在这里插入图片描述](https://img-blog.csdnimg.cn/b0ee715ec2da45b2a231614f04763227.png)
系统变量→双击Path,
![在这里插入图片描述](https://img-blog.csdnimg.cn/d494fbbe3c5241abbc3088965d178ca0.png)
新建→输入mysql安装目录\bin,
![在这里插入图片描述](https://img-blog.csdnimg.cn/00077e9eb4e941a59581f82b6608a7be.png)
确定→确定→确定。
2.4 安装MySQL服务
现在如果使用以下命令连接数据库,会出现错误。
mysql -uroot -p
使用以下命令安装MySQL服务。
mysqld -install
![在这里插入图片描述](https://img-blog.csdnimg.cn/9272ee0c9a3340edb52d634487fbd3ef.png)
2.5 开启MySQL服务
搜索“计算机管理”,
![在这里插入图片描述](https://img-blog.csdnimg.cn/b54d1d24e13c4843a304f577bec2f797.png)
服务和应用程序→服务→MySQL→启动,
![在这里插入图片描述](https://img-blog.csdnimg.cn/c339bf6210d04bebb64775c6fed0549c.png)
遇到如下问题:
![在这里插入图片描述](https://img-blog.csdnimg.cn/ae19bb80db274dbea952e48e345001e2.png)
-
找到 MySQL 的安装路径,看看有没有data文件夹,如果没有data文件夹,自己重新建一个;如果有的话,就把里面的内容全部清空,但保留该目录。
-
到安装路径下的bin路径下,使用如下命令初始化MySQL,并静待一段时间。
mysqld --initialize
-
接着,输入如下命令启动MySQL:
net start mysql
![在这里插入图片描述](https://img-blog.csdnimg.cn/3a088adf62154e84bbf7f180477add9a.png)
MySQL启动成功。
2.6 修改root密码
由于安装时没有设置密码,因此需要修改root密码。
- 以管理员身份运行 cmd,使用命令停止MySQL服务:
net stop mysql
- 执行以下命令进入安全模式,注意不要关掉此窗口 (窗口1),因为此时该CMD相当于开启了MySQL服务。
mysqld --console --skip-grant-tables --shared-memory
- 新开启一个CMD窗口(窗口2),执行下面的命令,表示切换至mysql数据库:
mysql
mysql> use mysql
先将密码设置为空,刷新权限:update mysql.user set authentication_string="" where user="root";
flush privileges;
再修改密码为123456,更新刷新权限后退出mysql:ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';
flush privileges;
quit
- 关闭步骤2的CMD(窗口1),在当前CMD中(窗口2)中执行开启MySQL命令启动服务,接着就可以使用新密码登录数据库了。
net start mysql
mysql -u root -p
3 Navicat中新建数据库
3.1 连接
打开Navicat软件,连接→MySQL…,
![在这里插入图片描述](https://img-blog.csdnimg.cn/025fccb833bb44e18d5a1227c51d4c61.png)
输入连接名和密码,
![在这里插入图片描述](https://img-blog.csdnimg.cn/7ac5047b31f84cfd811741bcab24a6bb.png)
3.2 新建数据库
右键新建数据库,
![在这里插入图片描述](https://img-blog.csdnimg.cn/3aee14cbfe144f3e98561f2d9d2e752a.png)
填写数据库名,选择字符集与排序规则,
![在这里插入图片描述](https://img-blog.csdnimg.cn/5c63f762d1374152b6c31383c84682b1.png)
确定,新建数据库。
3.2 新建用户表
打开unitygame数据库,表→新建表,
![在这里插入图片描述](https://img-blog.csdnimg.cn/c15334ac5a714be2b72b5eef600b9eaa.png)
点击添加字段,编辑表的各项字段和数据类型,
![在这里插入图片描述](https://img-blog.csdnimg.cn/ddcece3f2f264fef9b6a5d29173b6b82.png)
Ctrl+S保存该数据表,输入表名,
![在这里插入图片描述](https://img-blog.csdnimg.cn/60292ea5e260491ea4c1a7e3b05c9e42.png)
4 Unity中实现交互功能
4.1 Unity中使用UI搭建注册登录界面
![在这里插入图片描述](https://img-blog.csdnimg.cn/5b8ba76827024873b71800be9e4a6a9c.png)
两个输入框分别输入用户名和密码,两个按钮分别实现注册和登录。
4.2 DatabaseManager脚本实现注册登录功能
Unity中新建一个DatabaseManager脚本,双击打开该脚本。
写入代码如下:
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using MySql.Data.MySqlClient;
public class DatabaseManager : MonoBehaviour
{
private MySqlConnection connection;
private string serverName = "localhost";
private string dbName = "UnityGame"; //数据库名
private string userName = "root"; //登录数据库的用户名
private string password = "123456"; //登录数据库的密码
private string port = "3306"; //MySQL服务的端口号
public InputField InputUsername;
public InputField InputPassword;
void Start()
{
string connectionString = "Server=" + serverName + ";Database=" + dbName + ";Uid=" + userName
+ ";Pwd=" + password + ";Port=" + port + ";";
connection = new MySqlConnection(connectionString);
connection.Open();
Debug.Log("连接数据库成功");
}
// 注册
public void Register()
{
string username = InputUsername.text;
string password = InputPassword.text;
string query = "INSERT INTO usersinfo(username, password) VALUES (@username, @password)";
MySqlCommand cmd = new MySqlCommand(query, connection);
cmd.Parameters.AddWithValue("@username", username);
cmd.Parameters.AddWithValue("@password", password);
int rowsAffected = cmd.ExecuteNonQuery();
if (rowsAffected > 0)
{
Debug.Log("注册成功!");
}
else
{
Debug.Log("注册失败!");
}
}
// 登录
public void Login()
{
string username = InputUsername.text;
string password = InputPassword.text;
string query = "SELECT COUNT(*) FROM usersinfo WHERE username=@username AND password=@password";
MySqlCommand cmd = new MySqlCommand(query, connection);
cmd.Parameters.AddWithValue("@username", username);
cmd.Parameters.AddWithValue("@password", password);
object result = cmd.ExecuteScalar();
int count = Convert.ToInt32(result);
if(count > 0)
{
Debug.Log("登录成功");
}
else
{
Debug.Log("登录失败");
}
}
}
该脚本定义了一个DatabaseManager类,在Start方法中创建了一个与数据库的连接,并提供了注册(Register)和登录(Login)方法。这些方法使用MySQL的参数化查询来保护用户的数据免受SQL注入攻击。登录方法使用ExecuteScalar()方法来检查用户名和密码是否匹配并返回一个整数结果。
4.2.1 环境配置
初次使用MySqlConnection会报找不到,这时需要引用MySql.Data.dll。
首先,确定MySQL版本为8.0.27,去官网此处下载MySQL Connector/NET,注意由于版本兼容问题,下载6.3.9版本:
![在这里插入图片描述](https://img-blog.csdnimg.cn/00538c36aca941128e154cbd3393e03b.png)
下载完成后,双击安装:
![在这里插入图片描述](https://img-blog.csdnimg.cn/22e87777525b4828ad4a938dcb24dd19.png)
Next→
![在这里插入图片描述](https://img-blog.csdnimg.cn/4c2503220dd34bd3ab5951d51f77c8aa.png)
Typical(默认安装在C盘的MySQL下,可以选择Custom自定义安装选择安装路径)→Next→
![在这里插入图片描述](https://img-blog.csdnimg.cn/cf33fcfbac7d47048ec329fe1107ff09.png)
Install→
![在这里插入图片描述](https://img-blog.csdnimg.cn/f05e7a9c72424eac861f2b5e05cdba87.png)
Finish完成安装。
接着,在Unity中File→Build Settings→Player Setting→Player,将Other Settings下的Configuration中的Api Compatibility Level修改为.NET Framework:
![在这里插入图片描述](https://img-blog.csdnimg.cn/1f1911cfd0524ae4bf9b2aa03dd45333.png)
再在Assets下新建一个Plugins文件夹,将下载的MySQL Connector/NET文件夹如下位置(v4.0)的MySql.Data.dll复制到Plugins文件夹下。
![在这里插入图片描述](https://img-blog.csdnimg.cn/8db6b806a6a94c14b2265c629b1a94e4.png)
4.3 绑定交互事件
在Unity中创建一个空的游戏物体,将DatabaseManager脚本添加到该游戏对象中,将输入用户名和密码的输入框拖拽到对应的变量中,并将注册与登录按钮绑定DatabaseManager脚本中对应的注册和登录方法以响应用户的注册和登录操作。
![在这里插入图片描述](https://img-blog.csdnimg.cn/f2b071d1286346a0bbe8400ed2c9003a.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/6d6e28250c004d8ab4ad9c7b3d11a304.png)
4.4 测试功能
UI界面输入:
![在这里插入图片描述](https://img-blog.csdnimg.cn/1aa6f58a074b4c9b861740508929866f.png)
系统输出信息:
![在这里插入图片描述](https://img-blog.csdnimg.cn/438a9e562d52448f99eaf087c5c69810.png)
数据库存储信息:
![在这里插入图片描述](https://img-blog.csdnimg.cn/748949d1497e49518159e3f142e611f3.png)
注意,如果之前Navicat已连接数据库,需要先关闭连接,再打开,在数据表中才能看见数据。
4.5 系统缺陷
-
缺陷:注册界面与登录界面是同一个界面,导致用户输入用户密码进行注册后,即可点击登录。
解决方案:设计一个注册界面,一个登录界面,用户在注册界面注册成功后,再跳转到登录界面登录。
-
缺陷:用户注册时没有对用户信息进行校验,如一个用户用同一个用户名进行注册时应该进行提示、用户名或密码为空也应该进行提示。
解决方案:使用Unity连接数据库实现对用户名的查询,如果数据库中不存在具有该用户名的用户记录,可以继续进行注册流程,否则提示用户名已被占用。
-
缺陷:用户注册时的注册时间没有加入用户表。
解决方案:将注册时间列修改为时间戳类型,获取当前的时间戳或使用触发器实现在插入用户数据时自动更新注册时间列。
-
缺陷:用户注册时输入的密码以明文存储于数据库中,这是不安全的。
解决方案:注册时将用户输入的未加密的密码进行哈希处理,并将哈希后的密码存储到数据库。登录时检查接收到的用户名和密码(加密后)是否与数据库中的匹配。
-
缺陷:用户登录时,没有针对特定错误进行提示,不论是因用户名密码错误还是该用户未注册都是提示“登录失败”。
解决方案:根据不同的情况,对应给出不同的错误提示。
5 系列文章
-
【Unity+MySQL】实现简单的注册登录系统
-
【Unity+MySQL】实现注册登录系统(升级版)
-
【Unity+MySQL】实现注册登录系统(封装版)