本章项目成果展示
打开上一篇28Unity连接读取本地数据库的项目,
本章要做的事情是通过读取本地数据库登录进入游戏场景
首先创建一个脚本文件夹:
新建脚本:MySqlAccess.cs
编写脚本:MySqlAccess.cs
using UnityEngine;
using MySql.Data.MySqlClient;
public class MySqlAccess : MonoBehaviour{
//数据库地址、端口、用户名、数据库名、密码
string connStr = "server = 127.0.0.1;port = 3306;user= root;database = database;password =123456;charset=utf8";
//unity与数据库的连接方法 - 需要连接数据库时调用
MySqlConnection ConectToDataBase(){
//实例化数据库连接对象 并传入连接信息
MySqlConnection conn = new MySqlConnection(connStr);
conn.Open();
return conn;
}
//定义一个公共的查询方法
public string QueryData(string tableName, string condition){
#region -相当于把语句粘贴到navicat中
//数据库查询语句在unity的使用
string query = $"select * from {tableName} where {condition}";
//使用连接方法ConectToDataBase()连接数据库
MySqlConnection conn = ConectToDataBase();
//构造查询条件 依据query中的SQL语句查询
MySqlCommand cmd = new MySqlCommand(query, conn);
#endregion
#region 相当于点开始查询的按钮
//执行查询语句的条件
MySqlDataReader reader = cmd.ExecuteReader();
//获取数据库读取到的数据
string myString = "未获得数据库数据";
//循环读取数据库中的数据
while (reader.Read()){
int id = reader.GetInt32("id");
string name = reader.GetString("name");
string password = reader.GetString("password");
myString = string.Format("{0}{1}{2}", id, name, password);
Debug.Log("数据库中循环读取的数据{0}{1}{2}");
}
#endregion
//关闭数据库
conn.Close();
return myString;
}
public void InsertData(string tableName, string columns, string valuers){
//插入的SQL语句
string query = $"Insert into {tableName} ({columns}) values ({valuers})";
//使用连接方法ConectToDataBase()连接数据库
MySqlConnection conn = ConectToDataBase();
//构造插入条件 依据query中的SQL语句插入
MySqlCommand cmd = new MySqlCommand(query, conn);
//执行SQL语句插入
cmd.ExecuteNonQuery();
//关闭数据库
conn.Close();
}
//更新语句
public void UpdateData(string tableName, string setStatement, string condition){
//更新的Sql语句
string query = $"Update {tableName} set {setStatement} where {condition}";
//使用连接方法ConectToDataBase()连接数据库
MySqlConnection conn = ConectToDataBase();
//构造更新条件 依据query中的SQL语句更新
MySqlCommand cmd = new MySqlCommand(query, conn);
//执行SQL语句更新
cmd.ExecuteNonQuery();
//关闭数据库
conn.Close();
}
//删除数据的方法
public void DeleteData(string tableName, string condition){
//删除的Sql语句
string query = $"Delete from {tableName} where {condition}";
//使用连接方法ConectToDataBase()连接数据库
MySqlConnection conn = ConectToDataBase();
//构造删除条件 依据query中的Sql语句删除
MySqlCommand cmd = new MySqlCommand(query, conn);
//执行SQL语句删除
cmd.ExecuteNonQuery();
//关闭数据库
conn.Close();
}
//登陆方法 游戏内消耗物品的二级密码
public bool CheckLogin(string tableName, string username, int password){
//建立查询条件
string condition = $"name = '{username}' and password = {password}";
//使用条件字符串查询
string query = $"select * from {tableName} where {condition}";
//使用连接方法ConectToDataBase()连接数据库
MySqlConnection conn = ConectToDataBase();
//构造擦汗寻条件 依据query中的SQL语句查询
MySqlCommand cmd = new MySqlCommand(query, conn);
//执行查询语句的条件
MySqlDataReader reader = cmd.ExecuteReader();
//判断账户密码是否存在
bool loginSuccess = reader.HasRows;
//关闭数据库
conn.Close();
//返回账户结果
return loginSuccess;
}
//登陆方法 检测登陆界面用户名和密码
public bool CheckLogin(string username, int password){
//建立查询条件
string condition = $"name = '{username}' and password = {password}";
//使用条件字符串查询
string query = $"select * from userinfo where {condition}";
//使用连接方法ConectToDataBase()连接数据库
MySqlConnection conn = ConectToDataBase();
//构造擦汗寻条件 依据query中的SQL语句查询
MySqlCommand cmd = new MySqlCommand(query, conn);
//执行查询语句的条件
MySqlDataReader reader = cmd.ExecuteReader();
//判断账户密码是否存在
bool loginSuccess = reader.HasRows;
//关闭数据库
conn.Close();
//返回账户结果
return loginSuccess;
}
//注册方法
public void RegisterUser(string username, int password){
//准备插入条件
string columns = "name,password";
string values = $"'{username}',{password}";
//插入到表格中
InsertData("userinfo", columns, values);
}
}
新建一个脚本用来读取数据库检测账号密码成功后转入游戏场景:
编写脚本:LoginUI.cs
using TMPro;
using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.UI;
public class LoginUI : MonoBehaviour{
//获取MySqlAccess类 在UIToGame类中使用MySql类中的成员和方法
MySqlAccess mySqlAccess;
//获取登陆失败提示文本
public GameObject errorUI;
//获取账户输入框——新版UI
public TMP_InputField inputUsername;
//获取密码输入框——旧版UI
public InputField inputPassword;
Button newBtn;
Button oldBtn;
void Start(){
mySqlAccess = GameObject.Find("GameObject").GetComponent<MySqlAccess>();
newBtn = GameObject.Find("Canvas/Button").GetComponent<Button>();
newBtn.onClick.AddListener(OnLoginButtonClick);
oldBtn = GameObject.Find("Canvas/Button (Legacy)").GetComponent<Button>();
oldBtn.onClick.AddListener(OnRegisterButtonClick);
}
//登陆检测 点击按钮时运行
public void OnLoginButtonClick() {
//获取输入账号中的内容
string username = inputUsername.text;
//获取输入密码框的密码 并强制转换为int
int password = int.Parse(inputPassword.text);
//调用MySqlAccess类中登陆检测方法 判断账号是否合法
//合法允许登录 否则显示错误
if (mySqlAccess.CheckLogin(username, password)){
//登陆成功 切换场景
SceneManager.LoadScene(1);
}
else {
//登陆失败提示
errorUI.SetActive(true);
}
}
//注册功能 点击按键时执行
public void OnRegisterButtonClick() {
//获取注册框上的注册信息
string username = inputUsername.text;
//获取密码框上的密码
int password = int.Parse(inputPassword.text);
//调用我们的注册方法
mySqlAccess.RegisterUser(username, password);
}
}
将两个脚本挂载至空物体上,并拖拽
打开Navicat右键设计表增加一个字符串类型的password变量后保存
场景设置
设置好点击关闭即可
运行项目:首次输入自定义以及自定义密码点击开始游戏
关闭显示 - 点击注册
再次点击开始游戏 - 转到游戏场景
本篇做了数据库读取账号密码信息及注册登录游戏功能,接下来还需做以下内容:
1.状态模式转换场景
2.可拖动UI窗口
3.怪物集目标点巡航功能
4.隐藏怪物的生成
5.怪物I攻击范围内的主动攻击
6.掉落坐骑蛋的获取
7.异步传送转换场景
以及开放回合制、坐骑系统、宠物系统、背包系统、神炼系统、商城系统、Boss的目标跟随任务导航系统以及UI播放3D动画效果等等。
具体项目运行效果请关注water1024的b站视频项目演示《破碎纪元》
【Unity回合2.5D】破碎纪元_单机游戏热门视频 (bilibili.com)https://www.bilibili.com/video/BV1rZY4e9Ebs/?spm_id_from=333.999.0.0&vd_source=547091a95b03acfa8e8a9e46ef499cd6