小言_互联网的博客

Unity连接MySql,做一个简单的登录系统

659人阅读  评论(0)

有过开发经验的同学都应该知道,数据库在与程序连接时,一般都需要相应的驱动包,这里我们以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


  
  1. public class MySqlAccess {
  2. //连接类对象
  3. private static MySqlConnection mySqlConnection;
  4. //IP地址
  5. private static string host;
  6. //端口号
  7. private static string port;
  8. //用户名
  9. private static string userName;
  10. //密码
  11. private static string password;
  12. //数据库名称
  13. private static string databaseName;
  14. /// <summary>
  15. /// 构造方法
  16. /// </summary>
  17. /// <param name="_host">ip地址</param>
  18. /// <param name="_userName">用户名</param>
  19. /// <param name="_password">密码</param>
  20. /// <param name="_databaseName">数据库名称</param>
  21. public MySqlAccess(string _host,string _port, string _userName, string _password, string _databaseName) {
  22. host = _host;
  23. port = _port;
  24. userName = _userName;
  25. password = _password;
  26. databaseName = _databaseName;
  27. OpenSql();
  28. }
  29. /// <summary>
  30. /// 打开数据库
  31. /// </summary>
  32. public void OpenSql() {
  33. try {
  34. string mySqlString = string.Format( "Database={0};Data Source={1};User Id={2};Password={3};port={4}"
  35. , databaseName, host, userName, password, port);
  36. mySqlConnection = new MySqlConnection(mySqlString);
  37. //if(mySqlConnection.State == ConnectionState.Closed)
  38. mySqlConnection.Open();
  39. } catch (Exception e) {
  40. throw new Exception( "服务器连接失败,请重新检查MySql服务是否打开。" + e.Message.ToString());
  41. }
  42. }
  43. /// <summary>
  44. /// 关闭数据库
  45. /// </summary>
  46. public void CloseSql() {
  47. if (mySqlConnection != null) {
  48. mySqlConnection.Close();
  49. mySqlConnection.Dispose();
  50. mySqlConnection = null;
  51. }
  52. }
  53. /// <summary>
  54. /// 查询数据
  55. /// </summary>
  56. /// <param name="tableName">表名</param>
  57. /// <param name="items">要查询的列</param>
  58. /// <param name="whereColumnName">查询的条件列</param>
  59. /// <param name="operation">条件操作符</param>
  60. /// <param name="value">条件的值</param>
  61. /// <returns></returns>
  62. public DataSet Select(string tableName, string[] items, string[] whereColumnName,
  63. string[] operation, string[] value) {
  64. if (whereColumnName.Length != operation.Length || operation.Length != value.Length) {
  65. throw new Exception( "输入不正确:" + "要查询的条件、条件操作符、条件值 的数量不一致!");
  66. }
  67. string query = "Select " + items[ 0];
  68. for ( int i = 1; i <items.Length; i++) {
  69. query += "," + items[i];
  70. }
  71. query += " FROM " + tableName + " WHERE " + whereColumnName[ 0] + " " + operation[ 0] + " '" + value[ 0] + "'";
  72. for ( int i = 1; i < whereColumnName.Length; i++) {
  73. query += " and " + whereColumnName[i] + " " + operation[i] + " '" + value[i] + "'";
  74. }
  75. return QuerySet(query);
  76. }
  77. /// <summary>
  78. /// 执行SQL语句
  79. /// </summary>
  80. /// <param name="sqlString">sql语句</param>
  81. /// <returns></returns>
  82. private DataSet QuerySet(string sqlString) {
  83. if (mySqlConnection.State == ConnectionState.Open) {
  84. DataSet ds = new DataSet();
  85. try {
  86. MySqlDataAdapter mySqlAdapter = new MySqlDataAdapter(sqlString, mySqlConnection);
  87. mySqlAdapter.Fill(ds);
  88. } catch (Exception e) {
  89. throw new Exception( "SQL:" + sqlString + "/n" + e.Message.ToString());
  90. } finally {
  91. }
  92. return ds;
  93. }
  94. return null;
  95. }
  96. }

这里我们只封装一个查询的方法,想写注册修改等功能的,可以自行封装,不会Sql语句的请自行学习

6、创建Unity脚本,这里我通过实现接口来监听点击事件


  
  1. public class UserLogin : MonoBehaviour, IPointerClickHandler {
  2. public InputField userNameInput;
  3. public InputField passwordInput;
  4. //提示用户登录信息
  5. private Text loginMessage;
  6. //IP地址
  7. public string host;
  8. //端口号
  9. public string port;
  10. //用户名
  11. public string userName;
  12. //密码
  13. public string password;
  14. //数据库名称
  15. public string databaseName;
  16. //封装好的数据库类
  17. MySqlAccess mysql;
  18. private void Start() {
  19. loginMessage = GameObject.FindGameObjectWithTag( "LoginMessage").GetComponent<Text>();
  20. mysql = new MySqlAccess(host, port, userName, password, databaseName);
  21. }
  22. public void OnPointerClick(PointerEventData eventData) {
  23. if (eventData.pointerPress.name == "loginButton") { //如果当前按下的按钮是注册按钮
  24. OnClickedLoginButton();
  25. }
  26. }
  27. /// <summary>
  28. /// 按下登录按钮
  29. /// </summary>
  30. private void OnClickedLoginButton() {
  31. mysql.OpenSql();
  32. string loginMsg = "";
  33. DataSet ds = mysql.Select( "usertable", new string[] { "level" }, new string[] { "`" + "account" + "`", "`" + "password" + "`" }, new string[] { "=", "=" }, new string[] { userNameInput.text, passwordInput.text });
  34. if (ds != null) {
  35. DataTable table = ds.Tables[ 0];
  36. if (table.Rows.Count > 0) {
  37. loginMsg = "登陆成功!";
  38. loginMessage.color = Color.green;
  39. Debug.Log( "用户权限等级:" + table.Rows[ 0][ 0]);
  40. } else {
  41. loginMsg = "用户名或密码错误!";
  42. loginMessage.color = Color.red;
  43. }
  44. loginMessage.text = loginMsg;
  45. }
  46. mysql.CloseSql();
  47. }
  48. }

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
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场