unity连接mysql

记录一下unity连接mysql数据库所遇到的大坑子

准备事项:
1、安装mysql、unity、visual studio,不再赘述。
2、MySql.Data.dll文件

MySql.Data.dll需要自己下载
链接 https://pan.baidu.com/s/1wR5YsMu08HA_wr4DbfFOHA 提取码6i18
网上很多人说还要其他文件,我测试时只需要这一个就行了

测试链接:
1、unity新建C#脚本,随便拖到一个物体上,用VS打开编辑
点击菜单栏 项目-管理NuGet,如下图
在这里插入图片描述
输入MySql.Data搜索安装源包
在这里插入图片描述
2、编代码

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using MySql.Data.MySqlClient;
using System;

public class ConnTest: MonoBehaviour
{
    // mysql连接字符串
    static String ConnetStr = "Server=localhost;Database=simulation;User ID=root;Password=lalala123;Port=3306;";
    MySqlConnection conn = null;
    
    // Start is called before the first frame update
    void Start()
    {
        // 创建连接
        conn = new MySqlConnection(ConnetStr);
        try
        {
            conn.Open();    // 打开通道,建立连接
            Debug.Log("连接成功...");
			// 增、删、改、查的操作
        }
        catch(MySqlException ex)
        {
            // 打印异常信息
            Debug.Log(ex.Message);
        }
        finally
        {
            // 关闭连接
            if (conn != null)
            	conn.Close();
        }
    }

    // Update is called once per frame
    void Update()
    {
    	
    }
}

3、运行测试
在这里插入图片描述

额。。。

查找原因发现,连接字符串中用localhost不行,改成127.0.0.1,连接成功
在这里插入图片描述

参考博客 关于unity连接MySQL数据库做一个简单的登陆注册系统

【注意】
通过上面这种方式,发布到webGL后是不行的,这个问题我仍未解决,知道的大佬求告知。如果非要用webGL与数据库交互,只能另辟蹊径。我采用的这种方法:
unity向服务器发送请求,在服务器执行操作数据库的代码,然后将参数返回给unity,代码如下:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Networking;
using System;
using Newtonsoft.Json.Linq;
using Newtonsoft.Json;

public class satellite_controller : MonoBehaviour
{
	// 轨道6元素定义
    private double a;
    private double b;
    private double e;
    private double omega1;
    private double omega2;
    private double i;

	private double flag;
    // Start is called before the first frame update
    void Start()
    {
        // 请求web服务器,获取返回参数。我这里是服务器查询数据库表的某条记录,返回json字符串给unity
        StartCoroutine(GetSixElement());	// 要求实时性,用Update()里面的
    }

    // 解析http返回参数
    IEnumerator GetSixElement()
    {
        UnityWebRequest www = UnityWebRequest.Get("http://127.0.0.1:8080/GetOrbitServlet");
        yield return www.SendWebRequest();
        if (www.isNetworkError || www.isHttpError)
        {
            Debug.Log(www.error);	// 打印错误信息
        }
        else
        {
            // 获取返回参数
            //Debug.Log(www.downloadHandler.text);
            string result = www.downloadHandler.text;
            // 解析json字符串
            JObject jo = (JObject)JsonConvert.DeserializeObject(result);
            a = Double.Parse((string)jo["a"]);
            e = Double.Parse((string)jo["e"]);
            b = a * Math.Sqrt(1 - e * e);
            omega1 = Double.Parse((string)jo["RA"]);
            omega2 = Double.Parse((string)jo["w"]);
            i = Double.Parse((string)jo["i"]);
        }
    }

    // Update is called once per frame
    void Update()
    {
    	//flag += Time.deltaTime * 18;
    	//if (flag >= 360)
        //{
        //    flag = 0;
        //    StartCoroutine(GetSixElement());
        //}
    }
}

服务器处理请求,操作数据库的代码这里就就不贴出来了,网上一搜一大堆。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值