> 文章列表 > 【Unity+MySQL】实现简单的注册登录系统

【Unity+MySQL】实现简单的注册登录系统

【Unity+MySQL】实现简单的注册登录系统

目录

  • 1 安装Unity引擎和Navicat软件
  • 2 安装MySQL8.0数据库
    • 2.1 下载msi文件
    • 2.2 安装MySQL Server 8.0
    • 2.3 配置环境变量
    • 2.4 安装MySQL服务
    • 2.5 开启MySQL服务
    • 2.6 修改root密码
  • 3 Navicat中新建数据库
    • 3.1 连接
    • 3.2 新建数据库
    • 3.2 新建用户表
  • 4 Unity中实现交互功能
    • 4.1 Unity中使用UI搭建注册登录界面
    • 4.2 DatabaseManager脚本实现注册登录功能
      • 4.2.1 环境配置
    • 4.3 绑定交互事件
    • 4.4 测试功能
    • 4.5 系统缺陷

1 安装Unity引擎和Navicat软件

确保这两个软件都能够在你的计算机上良好地运行。

2 安装MySQL8.0数据库

2.1 下载msi文件

这里选择msi文件安装,会安装到C盘且没有路径选择。但是其安装的图形化界面可更新MySQL和其他数据库驱动到最新版本。
镜像地址:http://mirrors.sohu.com/mysql/MySQL-8.0/
【Unity+MySQL】实现简单的注册登录系统

2.2 安装MySQL Server 8.0

下载完成后双击运行msi文件。
Next→
【Unity+MySQL】实现简单的注册登录系统
Next→
【Unity+MySQL】实现简单的注册登录系统
选择自定义安装,
Next→
【Unity+MySQL】实现简单的注册登录系统
选择安装路径,
Next→
【Unity+MySQL】实现简单的注册登录系统
Install安装,
【Unity+MySQL】实现简单的注册登录系统
安装完成,Finish。

2.3 配置环境变量

此电脑→计算机→属性,
【Unity+MySQL】实现简单的注册登录系统
关于→高级系统设置,
【Unity+MySQL】实现简单的注册登录系统
高级→环境变量,
【Unity+MySQL】实现简单的注册登录系统
系统变量→双击Path,
【Unity+MySQL】实现简单的注册登录系统
新建→输入mysql安装目录\\bin,
【Unity+MySQL】实现简单的注册登录系统
确定→确定→确定。

2.4 安装MySQL服务

现在如果使用以下命令连接数据库,会出现错误。

mysql -uroot -p

使用以下命令安装MySQL服务。

mysqld -install

【Unity+MySQL】实现简单的注册登录系统

2.5 开启MySQL服务

搜索“计算机管理”,
【Unity+MySQL】实现简单的注册登录系统
服务和应用程序→服务→MySQL→启动,
【Unity+MySQL】实现简单的注册登录系统
遇到如下问题:
【Unity+MySQL】实现简单的注册登录系统

  1. 找到 MySQL 的安装路径,看看有没有data文件夹,如果没有data文件夹,自己重新建一个;如果有的话,就把里面的内容全部清空,但保留该目录。

  2. 到安装路径下的bin路径下,使用如下命令初始化MySQL,并静待一段时间。

    mysqld --initialize
    
  3. 接着,输入如下命令启动MySQL:

    net start mysql
    

    【Unity+MySQL】实现简单的注册登录系统
    MySQL启动成功。

2.6 修改root密码

由于安装时没有设置密码,因此需要修改root密码。

  1. 以管理员身份运行 cmd,使用命令停止MySQL服务:
    net stop mysql
    

    【Unity+MySQL】实现简单的注册登录系统

  2. 执行以下命令进入安全模式,注意不要关掉此窗口 (窗口1),因为此时该CMD相当于开启了MySQL服务。
    mysqld --console --skip-grant-tables --shared-memory
    

    【Unity+MySQL】实现简单的注册登录系统

  3. 新开启一个CMD窗口(窗口2),执行下面的命令,表示切换至mysql数据库:
    mysqlmysql> 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
    

    【Unity+MySQL】实现简单的注册登录系统

  4. 关闭步骤2的CMD(窗口1),在当前CMD中(窗口2)中执行开启MySQL命令启动服务,接着就可以使用新密码登录数据库了。
    net start mysqlmysql -u root -p
    

    【Unity+MySQL】实现简单的注册登录系统

3 Navicat中新建数据库

3.1 连接

打开Navicat软件,连接→MySQL…,
【Unity+MySQL】实现简单的注册登录系统
输入连接名和密码,
【Unity+MySQL】实现简单的注册登录系统

3.2 新建数据库

右键新建数据库,
【Unity+MySQL】实现简单的注册登录系统
填写数据库名,选择字符集与排序规则,
【Unity+MySQL】实现简单的注册登录系统
确定,新建数据库。

3.2 新建用户表

打开unitygame数据库,表→新建表,
【Unity+MySQL】实现简单的注册登录系统
点击添加字段,编辑表的各项字段和数据类型,
【Unity+MySQL】实现简单的注册登录系统
Ctrl+S保存该数据表,输入表名,

【Unity+MySQL】实现简单的注册登录系统

4 Unity中实现交互功能

4.1 Unity中使用UI搭建注册登录界面

【Unity+MySQL】实现简单的注册登录系统
两个输入框分别输入用户名和密码,两个按钮分别实现注册和登录。

4.2 DatabaseManager脚本实现注册登录功能

Unity中新建一个DatabaseManager脚本,双击打开该脚本。
写入代码如下:

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);if(cmd.ExecuteScalar() != null){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版本:
【Unity+MySQL】实现简单的注册登录系统
下载完成后,双击安装:
【Unity+MySQL】实现简单的注册登录系统
Next→
【Unity+MySQL】实现简单的注册登录系统
Typical(默认安装在C盘的MySQL下,可以选择Custom自定义安装选择安装路径)→Next→
【Unity+MySQL】实现简单的注册登录系统
Install→
【Unity+MySQL】实现简单的注册登录系统
Finish完成安装。

接着,在Unity中File→Build Settings→Player Setting→Player,将Other Settings下的Configuration中的Api Compatibility Level修改为.NET Framework:

【Unity+MySQL】实现简单的注册登录系统
再在Assets下新建一个Plugins文件夹,将下载的MySQL Connector/NET文件夹如下位置(v4.0)的MySql.Data.dll复制到Plugins文件夹下。
【Unity+MySQL】实现简单的注册登录系统

4.3 绑定交互事件

在Unity中创建一个空的游戏物体,将DatabaseManager脚本添加到该游戏对象中,将输入用户名和密码的输入框拖拽到对应的变量中,并将注册与登录按钮绑定DatabaseManager脚本中对应的注册和登录方法以响应用户的注册和登录操作。
【Unity+MySQL】实现简单的注册登录系统【Unity+MySQL】实现简单的注册登录系统

4.4 测试功能

UI界面输入:
【Unity+MySQL】实现简单的注册登录系统
系统输出信息:
【Unity+MySQL】实现简单的注册登录系统
数据库存储信息:
【Unity+MySQL】实现简单的注册登录系统

4.5 系统缺陷

  1. 缺陷:注册界面与登录界面是同一个界面,导致用户输入用户密码进行注册后,即可点击登录。
    解决方案:设计一个注册界面,一个登录界面,用户在注册界面注册成功后,再跳转到登录界面登录。
  2. 缺陷:用户注册时没有对用户信息进行校验,如一个用户用同一个用户名进行注册时应该进行提示。
    解决方案:使用Unity连接数据库实现对用户名的查询,如果数据库中不存在具有该用户名的用户记录,可以继续进行注册流程,否则提示用户名已被占用。
  3. 缺陷:用户注册时的注册时间没有加入用户表。
    解决方案:使用触发器实现在插入用户数据时自动更新注册时间列。
  4. 缺陷:用户注册时输入的密码以明文存储于数据库中,这是不安全的。
    解决方案:注册时将用户输入的未加密的密码进行哈希处理,并将哈希后的密码存储到数据库。登录时检查接收到的用户名和密码(加密后)是否与数据库中的匹配。