一、实现的内容

创建一个登录页面,可以注册、登录需要输入的是账号和密码登录后可以自动跳转到游戏界面

参考:

Unity3D制作注册登录界面,并实现场景跳转_unity登录界面制作步骤-CSDN博客

【Unity+MySQL】实现简单的注册登录系统_unity 账号系统-CSDN博客

Unity连接MySQL实现注册登录功能_unity 登陆注册数据库-CSDN博客

二、具体操作

1.创建数据库,创建表(navicat)

2.制作登录页面

在包含有游戏的Unity项目中,打开一个新的scene。需要注意,在新版的unity中,text等ui插件被放在了Legacy下,需要选择UI-Legacy才能找到。

3.编写代码,实现交互

注意,配置MySQL Connector/NET,在Unity的File→Build Settings→Player Setting→Player,将Other Settings下的Configuration中的Api Compatibility Level修改为.NET Framework。如果没有足够的unity配置,这个选项将不能选,需要在unityhub里面再添加模块,之后就可以选了。

配置好之后就可以写代码了,如果以下代码报错说明没有相关库什么的,就是没配好。

using MySql.Data.MySqlClient;

在写完代码之后,我发现C#代码无法拖入,报错如下:

经尝试,不仅是这次编写的这个代码不可以赋值,之前编写的其他代码也全部不能了,也会这么报错。而且之前场景里的代码不工作了。解决见unity错误解决:Can‘t add script component ‘manage‘ because the script class cannot be found.-CSDN博客

补充足够的库之后,我写了代码尝试运行,但是报错如下:

Authentication failed, see inner exception. UnityEngine.Debug:Log (object) log:Click_login (string,string) (at Assets/login/log.cs:59) log:OnClick_login () (at Assets/login/log.cs:68) UnityEngine.EventSystems.EventSystem:Update () (at ./Library/PackageCache/com.unity.ugui@1.0.0/Runtime/EventSystem/EventSystem.cs:530)

再考虑到一直有这个报错:

An error occurred while resolving packages:   Project has invalid dependencies:     com.unity.modules.accessibility: Package [com.unity.modules.accessibility@1.0.0] cannot be found 

我们在pacakagemanager找到如下:

 删除之后还是没变,最后我觉得应该是密码输错了,后来发现果然是。

参考

出现net stop MySQL服务名无效时的解决方法_net stop mysql 服务名无效-CSDN博客

【MySQL】忘记了root用户密码如何重置_重置mysql root命令-CSDN博客

MySQL8.0重置密码Windows10报错解决记录_mysql80修改密码失败windows-CSDN博客mysql忘记root密码如何解决?_mysql忘记root密码解决方案-CSDN博客  

最后改为

user:root

password:1234 

 改完之后还是不对...我又重新下了一个mysql低版本的进行配置,配置成功,代码如下:

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 = "unity00"; //数据库名

private string userName = "root"; //登录数据库的用户名

private string password = "1122"; //登录数据库的密码

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("登录失败");

}

}

}

4.实现信息的打印(在登录页面)

因为上面的代码我直接用了别人的只修改了小部分,所以我设想的部分功能还没有完全实现。首先就是我希望例如登陆成功,登陆失败可以弹窗或者是在登陆页面打印出来,而不需要在console看。

简单实现的话,就是设一个文本框实时改动里面的文本就行了。

具体需要补充的代码如下:

public Text reminderText;

reminderText.text = "xxxx!";

5.实现登陆后跳转

在Build Settings里添加两个页面,并且增加代码:

SceneManager.LoadScene(1);

至此,已经完成全部内容。

 三、情景展示

unity+mysql+navicat实现登录

好文链接

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: