『功能项目』Unity本地数据库读取进入游戏【29】

本章项目成果展示

打开上一篇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)icon-default.png?t=O83Ahttps://www.bilibili.com/video/BV1rZY4e9Ebs/?spm_id_from=333.999.0.0&vd_source=547091a95b03acfa8e8a9e46ef499cd6

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值