[Unity学习教程] 【Unity+MySQL】实现简单的注册登录体系

[复制链接]
查看1369 | 回复0 | 2023-8-23 11:56:42 | 显示全部楼层 |阅读模式 来自 中国北京
1 安装Unity引擎和Navicat软件

确保这两个软件都可以或许在你的盘算机上良好地运行。
2 安装MySQL8.0数据库

2.1 下载msi文件

镜像地址:http://mirrors.sohu.com/mysql/MySQL-8.0/

2.2 安装MySQL Server 8.0

下载完成后双击运行msi文件。
Next→

Next→

选择自界说安装,
Next→

选择安装路径,
Next→

Install安装,

安装完成,Finish。
2.3 配置情况变量

此电脑→盘算机→属性,

关于→高级体系设置,

高级→情况变量,

体系变量→双击Path,

新建→输入mysql安装目次\bin,

确定→确定→确定。
2.4 安装MySQL服务

如今如果使用以下命令毗连数据库,会出现错误。
  1. mysql -uroot -p
复制代码
使用以下命令安装MySQL服务。
  1. mysqld -install
复制代码

2.5 开启MySQL服务

搜索“盘算机管理”,

服务和应用步调→服务→MySQL→启动,

遇到如下题目:


  • 找到 MySQL 的安装路径,看看有没有data文件夹,如果没有data文件夹,自己重新建一个;如果有的话,就把内里的内容全部清空,但保存该目次。
  • 到安装路径下的bin路径下,使用如下命令初始化MySQL,并静待一段时间。
    1. mysqld --initialize
    复制代码
  • 接着,输入如下命令启动MySQL:
    1. net start mysql
    复制代码

    MySQL启动乐成。
2.6 修改root暗码

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

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

  • 实行以下命令进入安全模式,留意不要关掉此窗口 (窗口1),因为此时该CMD相称于开启了MySQL服务。
    1. mysqld --console --skip-grant-tables --shared-memory
    复制代码

  • 新开启一个CMD窗口(窗口2),实行下面的命令,表示切换至mysql数据库:
    1. mysql
    2. mysql> use mysql
    复制代码
    先将暗码设置为空,刷新权限:
    1. update mysql.user set authentication_string="" where user="root";
    2. flush privileges;
    复制代码
    再修改暗码为123456,更新刷新权限退却出mysql:
    1. ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';
    2. flush privileges;
    3. quit
    复制代码

  • 关闭步调2的CMD(窗口1),在当前CMD中(窗口2)中实行开启MySQL命令启动服务,接着就可以使用新暗码登录数据库了。
    1. net start mysql
    2. mysql -u root -p
    复制代码

3 Navicat中新建数据库

3.1 毗连

打开Navicat软件,毗连→MySQL…,

输入毗连名和暗码,

3.2 新建数据库

右键新建数据库,

填写数据库名,选择字符集与排序规则,

确定,新建数据库。
3.2 新建用户表

打开unitygame数据库,表→新建表,

点击添加字段,编辑表的各项字段和数据范例,

Ctrl+S生存该数据表,输入表名,

4 Unity中实现交互功能

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


两个输入框分别输入用户名和暗码,两个按钮分别实现注册和登录。
4.2 DatabaseManager脚本实现注册登录功能

Unity中新建一个DatabaseManager脚本,双击打开该脚本。
写入代码如下:
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using UnityEngine;
  5. using UnityEngine.UI;
  6. using MySql.Data.MySqlClient;
  7. public class DatabaseManager : MonoBehaviour
  8. {
  9.     private MySqlConnection connection;
  10.     private string serverName = "localhost";
  11.     private string dbName = "UnityGame";        //数据库名
  12.     private string userName = "root";                //登录数据库的用户名
  13.     private string password = "123456";                //登录数据库的密码
  14.     private string port = "3306";                        //MySQL服务的端口号
  15.     public InputField InputUsername;
  16.     public InputField InputPassword;
  17.     void Start()
  18.     {
  19.         string connectionString = "Server=" + serverName + ";Database=" + dbName + ";Uid=" + userName
  20.                                   + ";Pwd=" + password + ";Port=" + port + ";";
  21.         connection = new MySqlConnection(connectionString);
  22.         connection.Open();
  23.         Debug.Log("连接数据库成功");
  24.     }
  25.     // 注册
  26.     public void Register()
  27.     {
  28.         string username = InputUsername.text;
  29.         string password = InputPassword.text;
  30.         string query = "INSERT INTO usersinfo(username, password) VALUES (@username, @password)";
  31.         MySqlCommand cmd = new MySqlCommand(query, connection);
  32.         cmd.Parameters.AddWithValue("@username", username);
  33.         cmd.Parameters.AddWithValue("@password", password);
  34.         int rowsAffected = cmd.ExecuteNonQuery();
  35.         if (rowsAffected > 0)
  36.         {
  37.             Debug.Log("注册成功!");
  38.         }
  39.         else
  40.         {
  41.             Debug.Log("注册失败!");
  42.         }
  43.     }
  44.     // 登录
  45.     public void Login()
  46.     {
  47.         string username = InputUsername.text;
  48.         string password = InputPassword.text;
  49.         string query = "SELECT COUNT(*) FROM usersinfo WHERE username=@username AND password=@password";
  50.         MySqlCommand cmd = new MySqlCommand(query, connection);
  51.         cmd.Parameters.AddWithValue("@username", username);
  52.         cmd.Parameters.AddWithValue("@password", password);
  53.                 object result = cmd.ExecuteScalar();
  54.         int count = Convert.ToInt32(result);
  55.         if(count > 0)
  56.         {
  57.             Debug.Log("登录成功");
  58.         }
  59.         else
  60.         {
  61.             Debug.Log("登录失败");
  62.         }
  63.     }
  64. }
复制代码
该脚本界说了一个DatabaseManager类,在Start方法中创建了一个与数据库的毗连,并提供了注册(Register)和登录(Login)方法。这些方法使用MySQL的参数化查询来掩护用户的数据免受SQL注入攻击。登录方法使用ExecuteScalar()方法来检查用户名和暗码是否匹配并返回一个整数结果。
4.2.1 情况配置

初次使用MySqlConnection会报找不到,这时需要引用MySql.Data.dll。
起首,确定MySQL版本为8.0.27,去官网此处下载MySQL Connector/NET,留意由于版本兼容题目,下载6.3.9版本:

下载完成后,双击安装:

Next→

Typical(默认安装在C盘的MySQL下,可以选择Custom自界说安装选择安装路径)→Next→

Install→

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

再在Assets下新建一个Plugins文件夹,将下载的MySQL Connector/NET文件夹如下位置(v4.0)的MySql.Data.dll复制到Plugins文件夹下。

4.3 绑定交互变乱

在Unity中创建一个空的游戏物体,将DatabaseManager脚本添加到该游戏对象中,将输入用户名和暗码的输入框拖拽到对应的变量中,并将注册与登录按钮绑定DatabaseManager脚本中对应的注册和登录方法以相应用户的注册和登录使用。


4.4 测试功能

UI界面输入:

体系输出信息:

数据库存储信息:

留意,如果之前Navicat已毗连数据库,需要先关闭毗连,再打开,在数据表中才华看见数据。
4.5 体系缺陷


  • 缺陷:注册界面与登录界面是同一个界面,导致用户输入用户暗码举行注册后,即可点击登录。
    办理方案:计划一个注册界面,一个登录界面,用户在注册界面注册乐成后,再跳转到登录界面登录。
  • 缺陷:用户注册时没有对用户信息举行校验,如一个用户用同一个用户名举行注册时应该举行提示、用户名或暗码为空也应该举行提示。
    办理方案:使用Unity毗连数据库实现对用户名的查询,如果数据库中不存在具有该用户名的用户记录,可以继续举行注册流程,否则提示用户名已被占用。
  • 缺陷:用户注册时的注册时间没有参加用户表。
    办理方案:将注册时间列修改为时间戳范例,获取当前的时间戳或使用触发器实如今插入用户数据时自动更新注册时间列。
  • 缺陷:用户注册时输入的暗码以明文存储于数据库中,这是不安全的。
    办理方案:注册时将用户输入的未加密的暗码举行哈希处置处罚,并将哈希后的暗码存储到数据库。登录时检查吸收到的用户名和暗码(加密后)是否与数据库中的匹配。
  • 缺陷:用户登录时,没有针对特定错误举行提示,不论是因用户名暗码错误照旧该用户未注册都是提示“登录失败”。
    办理方案:根据不同的情况,对应给出不同的错误提示。

来源:https://blog.csdn.net/qq_41084756/article/details/130226049
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则