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

news2024/11/15 5:34:58

本章项目成果展示

打开上一篇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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2110234.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

自定义v-model的两种形式

1 使用update &#xff08;1&#xff09;在组件中使用v-model"value" &#xff08;2&#xff09;props中接收modelValue &#xff08;3&#xff09;然后在value值发生变化的时候&#xff1a;this.$emit("update:modelValue", this.value); &#xff08;4&…

【压力测试】如何确定系统最大并发用户数?

一、明确测试目的与了解需求 明确测试目的&#xff1a;首先需要明确测试的目的&#xff0c;即为什么要确定系统的最大并发用户数。这通常与业务需求、系统预期的最大用户负载以及系统的稳定性要求相关。 了解业务需求&#xff1a;深入了解系统的业务特性&#xff0c;包括用户行…

大语言模型(LLM)如何更好地继续预训练(Continue PreTraining)

预训练&#xff08;Pretraining&#xff09;是一个非常消耗资源的工作&#xff0c;尤其在 LLM 时代。随着LLama2的开源&#xff0c;越来越多人都开始尝试在这个强大的英文基座模型上进行中文增强。但&#xff0c;我们如何才能保证模型在既学到「中文知识」的情况下&#xff0c;…

这本PyTorch官方出品的《Deep Learning With PyTorch》终于有了中文版!

导读&#xff1a; 一些线上或线下的关于PyTorch的课程和大学里的计划课程&#xff0c;以及大量的线上博客和教程&#xff0c;使得PyTorch学习起来更容易。然而&#xff0c;关于PyTorch的图书很少。随着本书的出版&#xff0c;我们最终有了一本关于PyTorch的官方权威著作。 它非…

下载适用于 Linux 的 MongoDB Shell教程

下载适用于 Linux 的 MongoDB Shell教程 下载地址 MongoDB Shell Download | MongoDB 2、往下拉&#xff0c;选择Linux对应的版本下载

怎么快速入门大模型技术——AI大模型学习方法

“ 师父领进门&#xff0c;修行在个人 ” 有两个成语&#xff0c;一个是事半功倍&#xff0c;一个是事倍功半&#xff1b;为什么会有这种情况&#xff1f;‍‍‍‍‍‍‍ 原因就是方式方法的问题&#xff0c;有些人掌握了正确的方法就会觉得做什么事都顺风顺水&#xff0c;事…

电脑黑屏开不了机怎么办?教你4招轻松解决

在使用电脑的过程中&#xff0c;有时候会遇到电脑黑屏开不了机的情况。这种问题确实让人感到困惑和焦虑&#xff0c;因为它意味着硬件故障或者系统问题。本文将针对电脑黑屏开不了机的原因进行分析&#xff0c;并提供相应的解决方法&#xff0c;帮助大家快速解决这一问题。 操作…

孙宇晨:区块链领域的时代先锋,每一步引领未来趋势

​孙宇晨&#xff0c;这位在区块链领域崭露头角的青年企业家&#xff0c;凭借着敏锐的洞察力和坚定的决心&#xff0c;成为了数字经济时代的领航者。他的每一步&#xff0c;都走在技术创新的最前沿&#xff0c;推动着区块链技术的发展与应用&#xff0c;给全球经济带来了深远的…

智慧水务:“六变形战士”,这很全面!

在当今快速发展的智慧城市建设中&#xff0c;‌水务管理作为城市运行的重要一环&#xff0c;‌其智能化、‌高效化的需求日益凸显。‌为了满足这一需求&#xff0c;‌一款全新的智慧水务平台——“六边形战士”应运而生&#xff0c;‌它以“生产管网营销运营调度APP”六大核心功…

测试CUDA __threadfence的行为

CUDA __threadfence测试 一.测试小结二.复现过程三.截图 测试CUDA __threadfence的行为 一.测试小结 测例0:没有任何同步,执行到leftt0时,left的数据未加载完成,出现long soreboard的stall 405次测例1:__threadfence会等待memory数据加载完成,leftt0没有出现long scoreboard的…

基于golang实现简单的文件监控

基于golang实现简单的文件监控 package mainimport ("log""syscall""unsafe" )type FileNotifyInformation struct {Action uint32Name string }func Fswatch(path string) (chan FileNotifyInformation, error) {handle, err : syscall.Crea…

vscode中暂存块功能不能用了

vscode中暂存文件修改可以按每一处暂存&#xff0c;而不用一次暂存整个文件的修改&#xff0c;今天发现这个功能不能用了&#xff0c;不知道啥原因&#xff0c;记录一下。

华晨宇火星演唱会三登鸟巢 升级国风四面台引期待

2024华晨宇火星演唱会北京站即将于9月7日、9月8日在鸟巢举办&#xff0c;今年华晨宇将再度带着四面台回归鸟巢&#xff0c;升级后的舞台将融入国风元素&#xff0c;为歌迷带来一场前所未有的视听盛宴。这将是他第三次踏足鸟巢的舞台&#xff0c;更是他音乐旅程的里程碑。 2018年…

性能测试经典案例解析——政务查询系统

各位好&#xff0c;我是 道普云 一站式云测试SaaS平台。一个在软件测试道路上不断折腾十余年的萌新。 欢迎关注我的主页 道普云 文章内容具有一定门槛&#xff0c;建议先赞再收藏慢慢学习&#xff0c;有不懂的问题欢迎私聊我。 希望这篇文章对想提高软件测试水平的你有所帮…

【最新综述】基于机器学习的超声焊接缺陷无损检测

Machine learning for ultrasonic nondestructive examination of welding defects: A systematic review ABSTRACT 近年来&#xff0c;机器学习&#xff08;ML&#xff09;在无损检测&#xff08;NDE&#xff09;数据自动分析中的应用大幅增加。其中一个值得关注的应用是使用…

JS_阿里云oss视频上传后,如何获取视频封面

当您需要获取视频封面、提取视频关键帧图像进行视频编辑&#xff0c;或者提取视频中特定场景帧图像用于视频监控等时&#xff0c;可以将视频上传至OSS存储空间&#xff0c;然后通过本文所示方法进行视频截帧。 使用示例 本文示例使用的Bucket为杭州地域名为oss-console-img-de…

基于WhatsApp打造高效的CRM系统

背景 在 2023 年的统计数据中&#xff0c;WhatsApp 成为了印尼最常用的社交媒体&#xff0c;拥有高达 2.2 亿的用户量&#xff0c;占据印尼互联网人群的 90%之多。 WhatsApp 开发的 WhatsApp Business API 为企业开辟了一条与客户进行大规模、高效且合规沟通的崭新途径。它使…

美联储降息在即:加密市场风云再起,机遇与挑战并存

随着全球金融市场日益与加密货币市场的波动紧密相连&#xff0c;美联储的货币政策调整正成为加密市场的重要风向标。今年以来&#xff0c;比特币等主流加密货币反复跟随全球市场震荡&#xff0c;宏观经济指标对加密市场的影响愈加显著。尤其是美国联邦基金利率的变动&#xff0…

【QA】软件产品在确定使用期限时应关注哪些问题?

版权说明&#xff1a;本文来源【国家药品监督管理局】&#xff0c;如果您认为我们的文中描述与事实不符或有侵权行为&#xff0c;请及时联系我们。感谢您的关注。

2025届必备:如何打造Java SpringBoot大型超市数据处理系统,提升管理效率,最新攻略!

✍✍计算机编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java实战 |…