Unity連線MySql,做一個簡單的登入系統
有過開發經驗的同學都應該知道,資料庫在與程式連線時,一般都需要相應的驅動包,這裡我們以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安裝
下面是我整理的所需要的檔案:
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; //string sqlCon = "server=localhost;user id=root;password=WANGshuai123...;data=userTable"; /// <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,剩下的大家根據興趣來吧: