unity游戏开发-MYSQL
Table of Contents
MySQL配置
- 先安装一个数据库,我使用的是
8.0.35版本的,版本没什么大的要求。也可以安装一个可视的UI界面,例如workbench,方便做一些操作 - 在数据库中添加表格,然后将某一个
user的localhost设置为%,就可以实现其他设备的登录了
unity端配置
- 在
Assets文件目录下新建一个文件夹Plugins用来存放数据库需要的一些文件 (必须是这个名称,不能更改,不然 unity 不能识别出来) - 可以不用下载
MySQL Connnector/NET,直接在vs中安装mysql包 项目→管理NuGet程序包,直接在浏览中搜索MySQL,安装第一个,之后它会自己把依赖装好 - 然后,最最重要的一步,在vs的解决方案资源管理器的项目的引用之下,找到
mysql.Data这个项目,查看它所在的路径,在文件资源管理器中找到它,把它拖到第一步所建好的文件夹中,然后进入unity它会报错,查看错误信息,是需要一些文件,然后再在项目引用之下找到Google.Protobuf,K4os.Compression.LZ4,K4os.Compression.LZ4.Streams,K4os.Hash.xxHash,BouncyCastle.Cryptography,System.IO.Pipelines,System.IO,System.Runtime.CompilerServices.Unsafe,但是我的里面是没有ZstdSharp的,需要像第二步一样自己安装一下,然后拖到unity的Plugins,需要注意版本问题,一般直接使用vs中对应程序集的路径就可以

也是极其重要的一步,在unity的安装目录之下的
Editor/Data/MonoBleedingEdge/lib/mono/unityjit-win32中,找到以下四个文件I18N.dllI18N.CJK.dllI18N.MidEast.dllI18N.West.dll

把
unity的File→Build Settings→Player Settings→Api Compatibility Level更改为.NET Framewok
然后就可以实现在局域网之中连接到这个数据库了
附上代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94public InputField username; public InputField password; public GameObject LOG; public Canvas canvas; // 登录 string sqlSer = "server=49a17g0230.zicp.fun;port = 21514;database = dragondata;user = root;password = Beloved@25177"; public void signin() { MySqlConnection conn = new MySqlConnection(sqlSer); try { conn.Open(); UnityEngine.Debug.Log("------链接成功------"); string sqlQuary = "select * from userlib where account = @paral1 and password = @paral2"; MySqlCommand comd = new MySqlCommand(sqlQuary, conn); comd.Parameters.AddWithValue("paral1", username.text); comd.Parameters.AddWithValue("paral2", password.text); MySqlDataReader reader = comd.ExecuteReader(); if (reader.Read()) { UnityEngine.Debug.Log("------用户存在,登录成功!------"); SceneManager.LoadScene(1); } else { LOG.GetComponent<showlogcontent>().logmsg = "登录失败,用户不存在"; GameObject log = GameObject.Instantiate(LOG, transform.position, Quaternion.Euler(0, 0, 0)); log.transform.SetParent(canvas.transform, false); } } catch (System.Exception e) { UnityEngine.Debug.Log(e.Message); } finally { conn.Close(); } } // 注册 public void signup() { MySqlConnection conn = new MySqlConnection(sqlSer); try { conn.Open(); // UnityEngine.Debug.Log("-----连接成功!------"); string sqlQuary = "select * from userlib where account = @paral1 and password = @paral2"; MySqlCommand comd = new MySqlCommand(sqlQuary, conn); comd.Parameters.AddWithValue("paral1", username.text); comd.Parameters.AddWithValue("paral2", password.text); MySqlDataReader reader = comd.ExecuteReader(); if (reader.Read()) UnityEngine.Debug.Log("-----用户名已存在,请重新输!------"); else { Insert_User(username.text, password.text); UnityEngine.Debug.Log("------注册成功,请进行登入------"); } } catch (System.Exception e) { UnityEngine.Debug.Log(e.Message); } finally { conn.Close(); } } private void Insert_User(string username, string password) { MySqlConnection conn = new MySqlConnection(sqlSer); try { conn.Open(); string signupdata = System.DateTime.Now.ToString("G"); string sqlInsert = "insert into userlib(account,password,signupdata) values('" + username + "','" + password + "','" + signupdata + "')"; MySqlCommand comd2 = new MySqlCommand(sqlInsert, conn); int resule = comd2.ExecuteNonQuery(); } catch (System.Exception e) { UnityEngine.Debug.Log(e.Message); } finally { conn.Close(); } }
外网连接配置
可以使用局域网以外的网络连接上服务器,需要下载花生壳
下载好之后,在花生壳中新增映射

- 映射类型选择
TCP TCP选择普通TCP就行- 不使用模板
- 外网域名好像随便一个就行,我直接使用的软甲给的提示
- 端口选择动态的,因为固定的要钱
- 内网主机就是本机的IP地址,直接在中断输入
ipconfig,其中的IPv4地址就是 - 内网端口就是
mysql所使用的3306端口
- 映射类型选择
映射完成之后可以看到

其中最重要的就是访问地址了,可以在
mysql中试着连接一下,其中的hostname就是外网域名,port就是映射之后的端口
好像需要开启本电脑的3306端口的远程连接
- 进入应用 高级安全
windowsDefender防火墙 - 点击入站规则->新建规则
- 配置端口,
mysql使用的是tcp协议,使用的是3306端口
- 进入应用 高级安全
在
unity中创建连接string sqlSer = "server=49a17g0230.zicp.fun;port = 21514;database = database;user = root;password = password";其中的server就是访问地址的域名,也就是外网域名,冒号后面的就是端口,也就是最终映射出的端口最后就可以实现数据库的远程连接了,并且不需要在同一个局域网