一.unity登录注册场景的创建
1.创建panel
2.创建用户输入框
同样在panel目录下点击UI->inputfield 改名称为input name
3.复制input name生成inputpassword
生成如图:
4.同样的方式创建按钮,UI->button改名称为login,复制一个改成register,得到如图:
5.单击inputname和inputpassword下的placeholder按钮,更改预设的字,button同样的道理。得到如图:
注册页面一样,不赘述
如此一来,登录注册两个场景均已创建完成
二.数据库的建库建表
我的是Mac,之前做过Windows的,一模一样的操作。数据库的命令也不赘述。总之建立一个含有用户名和密码的表。表名和库名随意起。我的名字是unity,如图:
数据库到此完成
三.unity与mysql连接
1.首先需要得到配置文件
MySql.Data.dll
System.Data.dll
System.Drawing.dll
第一个C:\MySQL安装目录\MySQL Connector Net 8.0.12\Assemblies找到,也可以在网上下载,但都要注意版本,版本不一样会报错。后两个在unity目录\Editor\Data\Mono\lib\mono\2.0里找。
2.思路:首先写一个user类,成员变量包含name,password之类,写两个响应脚本,分别是登录和注册,登录响应脚本的工作是读取用户输入信息,即inputfield里的内容,调用service函数,这个service函数起到连接数据库的作用并根据输入的用户信息在数据库里寻找是否有记录,如果用户名密码匹配则返回一个user对象给响应脚本进而登录成功,反之返回null显示登录失败。注册方面也是类似,响应脚本负责传递和判断,service用于对数据库增删查改。当然这里只有增。
3.在assets资源目录下建立如图文件:包含两个场景,三个配置文件和一个脚本文件夹scripts,scripts内的文件也如图。
4.代码:
在action里有两个响应脚本,loginaction和registeraction
loginaction.cs:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;
public class LoginAction : MonoBehaviour
{
public InputField usernameInput;
public InputField passwordInput;
public Button loginBtn;
public Button register;
public Text info;
LoginService service = new LoginService();
// Use this for initialization
void Start()
{
register.onClick.AddListener(Register);
}
public void Login()
{
//通知service层 去处理
UserInfo user = service.Service(usernameInput.text, passwordInput.text);
if (user != null)
{
info.text = "登录成功!";
}
else
{
info.text = "登录失败";
}
}
public void Register()
{
SceneManager.LoadScene("Register");
}
}
registeraction.cs:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.Data;
using MySql.Data.MySqlClient;
using UnityEngine.UI;
using UnityEngine.SceneManagement;
public class RegisterAction : MonoBehaviour
{
public InputField nameInput;
public InputField passwordInput;
public InputField addressInput;
public InputField emailInput;
public Button register;
public Button login;
public Text info;
RegisterService service = new RegisterService();
// Use this for initialization
void Start()
{
login.onClick.AddListener(Login);
register.onClick.AddListener(Register);
}
public void Login()
{
SceneManager.LoadScene("Login");
}
public void Register()
{
info.text = service.Service(nameInput.text, passwordInput.text, addressInput.text, emailInput.text);
}
}
在model里有user对象
userinfo.cs:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class UserInfo
{
public string Name { get; set; }
public string Psw { get; set; }
public string Address { get; set; }
public string Email { get; set; }
public UserInfo()
{
}
public UserInfo(string name, string psw, string address, string email)
{
this.Name = name;
this.Psw = psw;
this.Address = address;
this.Email = email;
}
}
在service里有两个服务脚本,loginservice和registeraction
loginservice.cs:
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using MySql.Data.MySqlClient;
using MySql.Data;
public class LoginService
{
public UserInfo Service(string name, string password)
{
UserInfo user = null;
MySqlConnection conn =new MySqlConnection("server=127.0.0.1;port=3306;user=root;password=(写自己数据库的秘密);database=(数据库的名字)");//连接MySQL服务器数据库。
try
{
conn.Open();
string sql = "select * from userinfo where name='{0}' and password='{1}';";//userInfo
sql = string.Format(sql, name, password);//还是要赋值
MySqlCommand comd = new MySqlCommand(sql, conn);//执行一条sql语句
comd.Parameters.AddWithValue("para1", name);
comd.Parameters.AddWithValue("para2", passward);
MySqlDataReader reader = comd.ExecuteReader();
if (reader.Read())//如果用户名和密码正确则能查询到一条语句,即读取下一行返回true
{
user = new UserInfo();
user.Name = reader.GetString(0);
user.Psw = reader.GetString(1);
user.Address = reader.GetString(2);
user.Email = reader.GetString(3);
}
reader.Close();
}
catch (MySqlException ex)
{
Debug.Log(ex.Message);
}
finally
{
conn.Close();
}
return user;
}
}
registerservice.cs:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.Data;
using MySql.Data.MySqlClient;
public class RegisterService
{
public string Service(string name, string password, string address, string email)
{
string sql = "insert into userinfo(name,password,address,email) values('{0}','{1}','{2}','{3}');";//userInfo
sql = string.Format(sql, name, passward, address, email);
try
{
MySqlConnection conn = GetConnection();
MySqlCommand comd = new MySqlCommand(sql, conn);
comd.ExecuteNonQuery();
return "注册成功";
}
catch (System.Exception e)
{
Debug.Log(e.Message);
return "注册失败";
}
}
public MySqlConnection GetConnection()
{
MySqlConnection conn = new MySqlConnection("Server=localhost;UserId=root;Password=wasd420527+JXM;Database=unity");
conn.Open();
return conn;
}
}
5.action的脚本都挂在相机上,inputfield等交互按钮都相应挂好,如图:
四.打包apk
1.要把所有场景都包含进来且根据自己的版本配置好player setting,如图:
2.打包
到此,unity连接数据库结束