工作需要,项目需要刷新读取sql数据,且unity需要发布webgl版本,但是unity在webgl的平台下无法支持直连MySql,
所以想来很多的解决办法。
socket连接,适用于多客户端,网上的资料大部分都是聊天室的,因此不予考虑。
在Java同事的帮助下,找到了正式的解决办法。
整个数据流如下:
unity——>javascript——>mysql
javaspcrit刷新读取sql数据,并以json的格式保存在页面上,unity用UnityWebRequest(WWW在2018版已弃用)读取json网页,获取下来的值,进行json解析,并赋值给dataset
json代码
[ {"id":"37", "rfid":null, "material_id":"M000000001", "type":"2", "create_time":"2019-04-10 17:21:00", "start_time":null, "finish_time":null, "is_start":"0", "is_finish":"0", "is_delete":"0", }, {"id":"38", "rfid":null, "material_id":"M000000002", "type":"1", "create_time":"2019-04-10 17:21:00", "start_time":null, "finish_time":null, "is_start":"1", "is_finish":"0", "is_delete":"0", } ]
unity UnityWebRequest访问代码
string path = "http://192.168.1.100/Data.aspx"; IEnumerator GetWebInfo() { UnityWebRequest webInfo = UnityWebRequest.Get(path); yield return webInfo.SendWebRequest(); if (webInfo.isHttpError || webInfo.isNetworkError) { Debug.Log(webInfo.error); StopAllCoroutines(); yield return null; } else { info = webInfo.downloadHandler.text; Debug.Log(webInfo.downloadHandler.text); } }
由于json数据是多层嵌套,所以用的是Newtonsoft来解析。引用using Newtonsoft.Json.Linq;
public void InfoParsing() { //解析info JArray jar = JArray.Parse(info); Debug.Log(jar[jar.Count - 1]); //新建数据表的列名,与json值对应 DataTable table = new DataTable("Info"); DataColumnCollection columns = table.Columns; columns.Add("rfid", typeof(string)); columns.Add("material_id", typeof(string)); columns.Add("type", typeof(string)); columns.Add("create_time", typeof(string)); columns.Add("start_time", typeof(string)); columns.Add("finish_time", typeof(string)); columns.Add("is_start", typeof(string)); columns.Add("is_finish", typeof(string)); columns.Add("is_delete", typeof(string)); //for循环依次解析{ …… }单元内容 for (int i = 0; i < jar.Count; i++) { //解析每一个单元的值 JObject obj = JObject.Parse(jar[i].ToString()); Debug.Log(obj["material_id"]); //新建dataset行,并赋值 DataRow infoRow = table.NewRow(); infoRow["rfid"] = obj["rfid"]; infoRow["material_id"] = obj["material_id"]; infoRow["type"] = obj["type"]; infoRow["create_time"] = obj["create_time"]; infoRow["start_time"] = obj["start_time"]; infoRow["finish_time"] = obj["finish_time"]; infoRow["is_start"] = obj["is_start"]; infoRow["is_finish"] = obj["is_finish"]; infoRow["is_delete"] = obj["is_delete"]; table.Rows.Add(infoRow); } //将存储完成的表Add到table中 infoData.Tables.Add(table); Debug.Log(infoData.Tables["Info"].Rows.Count); Debug.Log(infoData.Tables["Info"].Rows[0][3]); WebText.text = infoData.Tables["Info"].Rows[0][3].ToString(); }
至此,所有的值都在 infoData.Tables["Info"] 中,可以正常使用。