有过开发经验的同学都应该知道,数据库在与程序连接时,一般都需要相应的驱动包,这里我们以MySql与Unity3D连接为例
一、准备所需要的全部程序集
1、首先从D:\Unity\Editor\Data\Mono\lib\mono\2.0(Unity安装目录)中找到以下5个dll文件


2、下载所需要的MySql驱动包:(MySql驱动包需要与Unity版本对应,比如我用的Unity2017.1.1,只能支持.net 3.5及以下的版本,所以下载的时候,请让MySql.Data.dll支持的版本小于或等于你的Unity支持的版本),另外MySql.Data.dll可以去MySql官网下载Connector安装

下面是我整理的所需要的文件:
Unity连接MySql所需的全部dll文件,百度网盘,提取码:9d6a
3、创建Unity项目,创建所需要的界面(为了方便使用,此处我直接使用UGUI搭建):

4、将所需要的dll文件全部放入Plugins文件夹中,并做好文件夹和场景物体的归类

5、创建C#类,为了方便使用和管理,我们直接封装一些Sql语句,在这里,如果你在using MySql.Data.MySqlClient不成功时,再次确认你的MySql.Data文件在Inspector面板下是否报错!如果报错,换个对应版本的dll
-
public
class
MySqlAccess {
-
-
//连接类对象
-
private
static MySqlConnection mySqlConnection;
-
//IP地址
-
private
static
string host;
-
//端口号
-
private
static
string port;
-
//用户名
-
private
static
string userName;
-
//密码
-
private
static
string password;
-
//数据库名称
-
private
static
string databaseName;
-
-
/// <summary>
-
/// 构造方法
-
/// </summary>
-
/// <param name="_host">ip地址</param>
-
/// <param name="_userName">用户名</param>
-
/// <param name="_password">密码</param>
-
/// <param name="_databaseName">数据库名称</param>
-
public MySqlAccess(string _host,string _port, string _userName, string _password, string _databaseName) {
-
host = _host;
-
port = _port;
-
userName = _userName;
-
password = _password;
-
databaseName = _databaseName;
-
OpenSql();
-
}
-
-
/// <summary>
-
/// 打开数据库
-
/// </summary>
-
public void OpenSql() {
-
try {
-
string mySqlString =
string.Format(
"Database={0};Data Source={1};User Id={2};Password={3};port={4}"
-
, databaseName, host, userName, password, port);
-
mySqlConnection =
new MySqlConnection(mySqlString);
-
//if(mySqlConnection.State == ConnectionState.Closed)
-
mySqlConnection.Open();
-
-
}
catch (Exception e) {
-
throw
new Exception(
"服务器连接失败,请重新检查MySql服务是否打开。" + e.Message.ToString());
-
}
-
-
}
-
-
/// <summary>
-
/// 关闭数据库
-
/// </summary>
-
public void CloseSql() {
-
if (mySqlConnection !=
null) {
-
mySqlConnection.Close();
-
mySqlConnection.Dispose();
-
mySqlConnection =
null;
-
}
-
}
-
-
/// <summary>
-
/// 查询数据
-
/// </summary>
-
/// <param name="tableName">表名</param>
-
/// <param name="items">要查询的列</param>
-
/// <param name="whereColumnName">查询的条件列</param>
-
/// <param name="operation">条件操作符</param>
-
/// <param name="value">条件的值</param>
-
/// <returns></returns>
-
public DataSet Select(string tableName, string[] items, string[] whereColumnName,
-
string[] operation,
string[]
value) {
-
-
if (whereColumnName.Length != operation.Length || operation.Length !=
value.Length) {
-
throw
new Exception(
"输入不正确:" +
"要查询的条件、条件操作符、条件值 的数量不一致!");
-
}
-
string query =
"Select " + items[
0];
-
for (
int i =
1; i <items.Length; i++) {
-
query +=
"," + items[i];
-
}
-
-
query +=
" FROM " + tableName +
" WHERE " + whereColumnName[
0] +
" " + operation[
0] +
" '" +
value[
0] +
"'";
-
for (
int i =
1; i < whereColumnName.Length; i++) {
-
query +=
" and " + whereColumnName[i] +
" " + operation[i] +
" '" +
value[i] +
"'";
-
}
-
return QuerySet(query);
-
-
}
-
-
/// <summary>
-
/// 执行SQL语句
-
/// </summary>
-
/// <param name="sqlString">sql语句</param>
-
/// <returns></returns>
-
private DataSet QuerySet(string sqlString) {
-
if (mySqlConnection.State == ConnectionState.Open) {
-
DataSet ds =
new DataSet();
-
try {
-
MySqlDataAdapter mySqlAdapter =
new MySqlDataAdapter(sqlString, mySqlConnection);
-
mySqlAdapter.Fill(ds);
-
}
catch (Exception e) {
-
throw
new Exception(
"SQL:" + sqlString +
"/n" + e.Message.ToString());
-
}
finally {
-
}
-
return ds;
-
}
-
return
null;
-
}
-
}
这里我们只封装一个查询的方法,想写注册修改等功能的,可以自行封装,不会Sql语句的请自行学习
6、创建Unity脚本,这里我通过实现接口来监听点击事件
-
public
class
UserLogin :
MonoBehaviour,
IPointerClickHandler {
-
-
public InputField userNameInput;
-
-
public InputField passwordInput;
-
//提示用户登录信息
-
private Text loginMessage;
-
-
//IP地址
-
public
string host;
-
//端口号
-
public
string port;
-
//用户名
-
public
string userName;
-
//密码
-
public
string password;
-
//数据库名称
-
public
string databaseName;
-
//封装好的数据库类
-
MySqlAccess mysql;
-
-
-
private void Start() {
-
loginMessage = GameObject.FindGameObjectWithTag(
"LoginMessage").GetComponent<Text>();
-
mysql =
new MySqlAccess(host, port, userName, password, databaseName);
-
}
-
-
public void OnPointerClick(PointerEventData eventData) {
-
if (eventData.pointerPress.name ==
"loginButton") {
//如果当前按下的按钮是注册按钮
-
OnClickedLoginButton();
-
}
-
}
-
-
/// <summary>
-
/// 按下登录按钮
-
/// </summary>
-
private void OnClickedLoginButton() {
-
mysql.OpenSql();
-
string loginMsg =
"";
-
DataSet ds = mysql.Select(
"usertable",
new
string[] {
"level" },
new
string[] {
"`" +
"account" +
"`",
"`" +
"password" +
"`" },
new
string[] {
"=",
"=" },
new
string[] { userNameInput.text, passwordInput.text });
-
if (ds !=
null) {
-
DataTable table = ds.Tables[
0];
-
if (table.Rows.Count >
0) {
-
loginMsg =
"登陆成功!";
-
loginMessage.color = Color.green;
-
Debug.Log(
"用户权限等级:" + table.Rows[
0][
0]);
-
}
else {
-
loginMsg =
"用户名或密码错误!";
-
loginMessage.color = Color.red;
-
}
-
loginMessage.text = loginMsg;
-
}
-
mysql.CloseSql();
-
}
-
-
}
7、将脚本挂到loginButton上,配置好ip地址与端口号等数据

如果你的数据库在本机,ip地址可以写localhost或者127.0.0.1或者你本机的私有ip地址都可以,MySql的默认端口号为3306,这样,一个简单的登录功能就做好了!
注:这里有一个坑,就是为什么我要在这里用InputFiled而不是直接用它里面的Text获取:
这是因为,在inputField中有一个Content选项,可以选择为Password类型,可以将你输入的文本变为***,如果这里你选择了它,而你获取的是它的节点Text.text,那么,你得到的文本,也是***,所以,在获取的时候,你需要从InputFiled.text中才能获取到真正的值!

接下来!发布到各个平台,注意,发布到Android平台时,公司名、项目名的签名要一致,另外,需要选.net 2.0,剩下的大家根据兴趣来吧:

转载:https://blog.csdn.net/qq_42462109/article/details/83385658