基于Unity3D的MySql数据库应用设计

Unity3d和连接MySQL数据库实现登陆注册等功能 最近做的项目正好需要实现登陆注册功能,大致登录页面如下所示: 其中增加了注册和忘记密码功能,注册界面如下所示: 我的mysql表格 那么开始用代码实现我们的功能吧! 我使用了简单的UI框架,可以快速拿到所需要的控件,不用一个一个拖动,还可以显示和关闭面板。 ////注册登录按钮,如果登陆成功切换到主场景 GetComponentFromChild<Button>("Lo... 阅读详情

写在前面

谁说Unity只能做游戏╭(╯^╰)╮

前段时间数据库老师布置了课程设计,做一个数据库应用。大家基本都用的SqlServer+Eclipse或者VS或者直接用Access做,但是!!!特立独行的我怎么可能跟大家一样呢【其实是当时刚用Unity开发完游戏,比较熟2333】,所以,我就跳入了Unity+MySql+VS的坑……

思路

这次做的是一个类似图书馆新书推荐的系统,分为管理员和普通用户两种角色。管理员可以对图书进行增删改查操作,还可以管理用户,修改用户密码等。普通用户可以查看当前推荐书目,使用关键字、出版信息、ISBN等进行模糊/精确查询。整个系统提供登录注册功能。

实现

这里只讲一下开发过程中遇到的几个难点,其余有不清楚的可以参考我的源码【已上传Github https://github.com/Lemon-XQ/BookRecommendSystem ,觉得还可以的欢迎star=w=】

1.Unity与Mysql的连接
string constr = String.Format("data Source={0};database={1};user id={2};pwd={3}",host,database,id,pwd);
connection = new MySqlConnection(constr);
connection.Open();
2.数据库的增删改查操作

【注:以下cmdText均为拼接后的SQL语句,如何拼接参见源码Database.cs】

  • 增:
MySqlCommand cmd=new MySqlCommand(cmdText,connection);
int resLine = cmd.ExecuteNonQuery();// 返回受影响的行数
// 返回自增长的id值
cmd.CommandText = "select last_insert_id() from "+table+" limit 1";
MySqlDataReader reader = cmd.ExecuteReader();
reader.Read();
insertId=reader.GetInt16(0);
reader.Close();
return resLine;
  • 删:
MySqlCommand cmd = new MySqlCommand(cmdText, connection);
int resLine = cmd.ExecuteNonQuery();// 返回受影响的行数
return resLine;
  • 改:
MySqlCommand cmd = new MySqlCommand(cmdText, connection);
int resLine = cmd.ExecuteNonQuery();// 返回受影响的行数
return resLine;
  • 查:
dataAdapter = new MySqlDataAdapter(cmd, connection);
//实例化数据集,并写入查询到的数据   
DataSet ds = new DataSet();
dataAdapter.Fill(ds);
return ds;
3.Unity中表格制作与动态生成

Unity原生好像没有表格插件,网上找的表格制作教程做出来的不是我想要的那种效果@_@自己摸索了一会,效果图如下:
在这里插入图片描述

  • 表体制作
    • 新建一个Scroll View,命名为Body,表示整个表的可见范围
    • 在Body->Viewport->Content上绑定组件Vertical Layout Group,使得Content的所有子物体成组垂直排列,就像表格的每一行
  • 表头制作
    • 再新建一个Scroll View,命名为Title,表示表头(之所以用ScrollView是因为我这里表头过长,所以需要能够横向滚动)
    • 为Title绑定Horizontal Bar,注意需与Body的Horizontal Bar一致,以实现表头表体一起横向卷动
    • 在Title->Viewport->Content上绑定组件Horizontal Layout Group,使得Content的所有子物体水平排列,就像表格的每一列
4.数据库图片存储与Unity中读取图片问题【待改进】

考虑到数据库直接存图片不太现实(占空间大),这里存的是图片id(也是图片名)。读取一开始是用Resources.Load()方法,但是在工程进行打包后,Resources文件夹中的资源将进行加密与压缩,打包后的程序内将不存在Resources文件夹,故无法通过路径访问以及更新资源。
  而相比之下,StreamingAssets文件夹(流媒体文件夹)内的资源将不会经过压缩与加密,原封不动的打包进游戏包内。在安装时,StreamingAssets文件夹内的资源将根据平台,移动到对应的文件夹内。所以!!!适合用来更新一些资源。

  • 在Assets文件夹下新建一个文件夹,命名为StreamingAssets(如果该文件夹已存在则不用新建)
  • 将图片命名为id.png后放进StreamingAssets文件夹中【注:id指的是数据库中存储的imageId= =,这样方便程序读取】
  • StreamingAssets文件夹下的文件在程序中只能通过IO Stream或者WWW的方式读取,这里使用IO Stream,从streamingAssets文件夹中读取图片流,转化为Texture2D,再转化为Sprite,代码如下:
// 图片路径,bookImage为封面图id
String path = Application.streamingAssetsPath + "/" + record.bookImage + ".png";
FileStream fs = File.OpenRead(path); //OpenRead
int filelength = 0;
filelength = (int)fs.Length; // 获得文件长度 
Byte[] image = new Byte[filelength]; // 建立一个字节数组 
fs.Read(image, 0, filelength); //按字节流读取      
System.Drawing.Image result = System.Drawing.Image.FromStream(fs);
fs.Close();

// 将图片流转化为png格式写入ms流
MemoryStream ms = new MemoryStream();
result.Save(ms,System.Drawing.Imaging.ImageFormat.Png);

// 生成Texture
Texture2D _tex = new Texture2D(64, 64);
_tex.LoadImage(ms.ToArray());
// Texture转化为Sprite
bookImage = Sprite.Create(_tex,new Rect(0,0,250,340),Vector2.zero );
ms.Close();

【注:需要引入System.Drawing.dll,在C:\Program Files\Unity\Editor\Data\Mono\lib\mono\2.0中可以找到,复制至Plugins文件夹下即可】

5.实现选中(单选/多选)记录效果

效果图如下:
【单选,单击鼠标左键】
在这里插入图片描述

【多选,长按Ctrl键+单击鼠标左键】
在这里插入图片描述

  • 在记录prefab最左侧添加choose button,同时整个prefab添加Image组件,颜色为蓝色,表示选中时的效果
  • 为每条记录prefab的choose button绑定OnChooseBtnClick事件
  • 代码如下:
// 存储当前选中记录索引值的列表
List<int> currentIndexList = new List<int>();
// 存储所有记录prefab的蓝色遮罩列表
List<Image> maskList = new List<Image>();
// 判定当前为单选/多选的标志位,默认单选
private bool isMulti = false;

// 监听选择按钮点击事件,index表示第几条记录
void OnChooseBtnClick(int index)
{
    // 非多选时先清空选中的index集合
    if(!isMulti) 
	    currentIndexList.Clear();
    currentIndexList.Add(index);// 更新选中的index集合
    // 开启多选协程,监测多选事件
    StartCoroutine("MultiChoose", index);
}

// 多选协程
IEnumerator MultiChoose(int index)
{
    while (true)
    {
	    // 没有长按Ctrl键,为单选
        if (!Input.GetKey(KeyCode.RightControl) && !Input.GetKey(KeyCode.LeftControl))
        {
            for (int i = 0; i < maskList.Count; i++)
            {
                isMulti = false;
                // 选中的记录显示蓝色遮罩效果,其余记录不显示
                if (i != index)
                    maskList[i].enabled = false;
                maskList[index].enabled = true;
            }
            yield break;
        }
        else // 长按Ctrl键可多选
        {
	        // 多选选中的记录都显示蓝色遮罩效果
            isMulti = true;
            maskList[index].enabled = true;
            yield break;
        }
    }
}
6.实现可编辑dropdown(下拉框)

效果图如下:
在这里插入图片描述

  • dropdown上添加一个Input Field组件,调整长度使其不覆盖下拉箭头
  • 代码中监听dropdown和Input Field的ValueChanged事件,这里用0和1区分是dropdown还是Input Field引起的函数调用,代码如下:
...
// 设置下拉框和输入框的值变化监听
cityDropdown.onValueChanged.AddListener(delegate { OnCityValueChanged(0); });
cityInput.onValueChanged.AddListener(delegate {OnCityValueChanged(1);});
...
// 事件处理函数
void OnCityValueChanged(int type)
{
    switch (type)
    {
        case 0:// 下拉框
            // 获取选中项的值
            pressCity = cityDropdown.options[cityDropdown.value].text;
            // 只处理不等于0的情况,即下拉框选中的不是默认值
            if (cityDropdown.value != 0)
            {
	            // 清空输入框的值
                cityInput.text = "";
                // 下拉框不透明
                cityDropdown.GetComponent<Image>().color = new Color(1, 1, 1, 1);
                // 输入框透明,防止遮挡
                cityInput.GetComponent<Image>().color = new Color(1, 1, 1, 0);
            }
            break;

        case 1:// 输入框
	        // 获取输入框的值
            pressCity = cityInput.text;
            // 只处理输入框文本不为空的情况
            if (cityInput.text != "")
            {
	            // 下拉框选中默认值(空白)
                cityDropdown.value = 0;
		        // 下拉框透明    
                cityDropdown.GetComponent<Image>().color = new Color(1, 1, 1, 0);
                // 输入框不透明,使输入框文本内容置顶
                cityInput.GetComponent<Image>().color = new Color(1, 1, 1, 1);
            }
            break;
    }
}

发布(build)时的一些设置

辛辛苦苦本地调试完了,一发布成exe,就连接不了数据库TAT……后来才发现是Project中缺少几个dll的原因……

  • Build&Setting->PlayerSetting里的.Net选择2.0
  • 引入I18N.dll、I18N.CJK.dll、I18N.West.dll至Plugins文件夹中【这几个dll在C:\Program Files\Unity\Editor\Data\Mono\lib\mono\unity中可以找到】
  • 重新build
Unity使用Mysql(添/删/改/查)(保姆级) Unity使用Mysql环境搭配(保姆级)UnityDemo版本Mysql下载地址教程如果Mysql下载出现问题本次Demo下载地址新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 UnityDemo版本 Unity 阅读详情

相关推荐

Unity连接数据库mysql全过程+可能遇到的问题与解决方案

第二步:在Assets文件夹下创建一个新的文件夹(Plugins),然后将准备的dll文件放置进去(这里我作为测试只放 Mysql.Data.dll)安装完成后需要查看mysql的版本,打开终端(管理者身份运行),输入以下语句登录mysql,查看MySQL版本;第三步:在Assets文件夹下创建一个新的文件夹(Scripts),然后创建一个C#文件:ConnectMySql。为了搭建unity连接mysql的环境,需要其中的Mysql.Data.dll文件。Mysql.Data.dll:在官网下载,

qq_53316719的博客 1万+

Unity2020连接MySQL数据库

重新梳理一下这篇帖子(算是第三次较大变动的修正补充)。本文章涉及Unity 3D版本:2020.3.20f1、MySQL5.7、MySQL8.0。(经过亲测,2019-2022均适用)

weixin_43822095的博客 1万+

Unity连接Mysql数据库(详细教程)

Unity本地连接Mysql,各种用法详细教程(mysql的模糊查找)

qq_45598937的博客 2327

Unity 连接 MySql 显示表格(Simple TableUI)

C# 中 DataTable 类位于命名空间 System.Data ,在 Winform、WPF 等开发中,用的非常多,在 Unity 5.6.X 或者更低的版本中,是无法直接使用的,也不要在 Visual Studio 中去引用 System.Data.dll,不然在 Unity 里会报错,错误比如:下面来介绍一下,在 Unity 里低版本中如何使用 DataTable。

熊思雨的博客 6043

Unity3d通过PhotonServer访问MySQL数据库

接着上一篇文章内容继续开发上一片篇文章介绍到NHibernate与数据库交互

Kiboo的博客 3160

【Unity3D进阶4-14】Unity3D 连接MySQL数据库

一、目录 【Unity3D从入门到进阶】文章目录及设置这个专栏的初衷

优快云博客专家,Unity3D高级软件工程师,《Unity 3D从入门到实战》作者。 4056

Unity3D 背包系统的数据库设计详解

Unity3D 背包系统是游戏中常见的一种功能模块,它可以用来管理游戏中的道具、装备等物品,并且可以实现物品的存储、购买、出售等操作。在设计一个完善的背包系统时,数据库的设计是至关重要的一环。本文将详细介绍Unity3D背包系统的数据库设计,包括数据库表的结构设计、技术详解以及代码实现。对惹,这里有一个游戏开发交流小组,希望大家可以点击进来一起交流一下开发经验呀!一、数据库表结构设计在设计Unity3D背包系统的数据库表结构时,我们需要考虑到游戏中可能存在的多种物品类型,比如道具、装备、消耗品等。

Thomas_YXQ的博客 1905

Unity3D与MySQL数据库交互实践指南

Unity3D引擎是一个多平台的游戏开发工具,自从2005年首次发布以来,它已经成为游戏开发者不可或缺的一部分。从2D到3D,从桌面到移动,甚至到虚拟现实,Unity3D提供了一套统一的开发环境和一套强大的功能集,能够满足各种类型游戏和应用的开发需求。在技术上,Unity3D的核心优势在于其高效的渲染引擎、物理模拟、音频处理和跨平台发布的能力。Unity3D不仅仅局限于游戏开发,其跨学科的应用让它在影视动画、建筑可视化、教育、医疗模拟等多个领域都取得了显著成就。

weixin_42514750的博客 1140

Unity3D 连接MySQL数据库笔记4-Unity3d代码

新建Unity3D项目 新建一个 Plugins文件夹 把所需要的DLL放到 Plugins中 新建C#脚本 命名为ToMysql.cs   不多说了 ,直接上代码,很简单  有注释 ,大家一看就明白了   using UnityEngine; using System; using System.Collections; using System.Data; usi

SuperLinmeng的博客 1628

Unity3D与MySQL数据库交互的DLL实现指南

Unity3D是一个强大的跨平台游戏开发引擎,它允许开发者使用C#等编程语言创建2D、3D、虚拟现实(VR)以及增强现实(AR)游戏。Unity提供了丰富的工具集,包括物理引擎、渲染引擎、粒子系统和脚本框架,使得开发人员能够构建高质量的游戏内容。在游戏开发中,常见的数据库类型主要包括关系型数据库和非关系型数据库(NoSQL)。关系型数据库:如MySQL、PostgreSQL等,它们通过表格形式存储数据,并通过关系映射来组织数据。

weixin_32661831的博客 1200

Unity3D中SQLite数据库应用源代码包

Unity3D是全球领先的游戏开发平台之一,广泛应用于独立游戏开发者和大型游戏工作室。它支持跨平台开发,意味着一个游戏项目可以部署到iOS、Android、Windows、Mac、Linux以及游戏主机等多个平台,极大地扩展了游戏的触及范围。在了解了SQLite数据库的基础特性和优势之后,接下来我们深入探讨如何在Unity3D环境中利用SQLite数据库以及相关的插件。SQLite4Unity3D插件和SQLite-net库是将SQLite集成到Unity3D项目中的常用工具。

weixin_30632267的博客 1058

Unity3D笔记——MySQL数据库 简单使用

** Unity3D笔记——MySQL数据库 简单使用 前言:Unity3D笔记是我平时做一些好玩的测试和研究,记录的笔记。会比较详细也可能随口一提就过了。 所以大家见谅了,内容一般都会是原创的(非原创我会注明转载)。由于很多内容其他的朋友也肯定研究发表过,大家请指出错误。 公司需要做一个仿真监测软件,同时需要显示特别大的数据统计。表格,统计图 把我搞得头昏脑涨的。然后发现单纯的json或者xm...

YYL_Debug的博客 1014

Unity3D连接MySQL数据库完整实现与实战教程

htmltable {th, td {th {pre {简介:在Unity3D游戏开发中,与MySQL数据库交互是实现用户数据存储和游戏进度管理的重要手段。MySQL因其开源、高效和稳定特性,常被用作后端数据解决方案。本文详细介绍了在Unity3D 4.0环境下如何通过MySql.Data.dll驱动实现与MySQL数据库的连接,涵盖环境配置、C#脚本编写、SQL查询执行及异常处理等关键步骤。

weixin_35899324的博客 1089

Unity3D 连接MySql数据库

Unity3D 连接MySql数据库 一.在Mac OS X中架设MySql数据库下载mysql for Mac http://dev.mysql.com/downloads/mysql/5.0.html可以在Mac OS X 10.2.x(“Jaguar”)和以上版本上Mac OS X使用二进制安装软件包的PKG格式代替二进制分发版来安装MySQL。请注意该软件包不支持旧版本的Mac

NETTE DE BLOG 1万+

Unity3D实现MySQL数据库连接的DLL集成指南

htmltable {th, td {th {pre {简介:在Unity 3D开发中,要实现与MySQL数据库的交互,需要借助.NET框架的MySql.Data.dll等第三方DLL文件。本文将介绍如何将这些DLL文件添加到Unity项目中,并通过C#脚本使用MySqlClient类库建立连接和执行SQL命令。同时,还会说明如何准备不同平台所需的DLL版本,以及需要注意的数据库服务运行和防火墙设置。

weixin_42518334的博客 1007

电机控制必看!SVPWM谐波优化:5段式与7段式全参数对比测试

本文通过实测数据,对比分析了电机控制中5段式与7段式SVPWM控制算法的谐波性能。实验表明,7段式SVPWM在电流波形质量(THD)和低速性能上更优,而5段式SVPWM则在开关损耗和效率方面表现突出。文章为工程师在不同应用场景(如对噪音、效率或动态响应的侧重)下的算法选型提供了清晰的依据和实用的工程指南。

weixin_28331555的博客 177

unity3d 连接mysql_我学院:Unity3D连接MySql数据库的方法

Unity3D 连接MySql数据库的方法一.在Mac OS X中架设MySql数据库下载mysql for Mac http://www.doczj.com/doc/d67595dd376baf1ffd4fad9b.html/downloads/mysql/5.0.html可以在Mac OS X 10.2.x(“Jaguar”)和以上版本上Mac OS X使用二进制安装软件包的PKG格式代替二进...

weixin_34042899的博客 396

对LSTM中每个batch都初始化隐含层的理解

不知道有没有人和我有一样疑惑 在LSTM相关的代码中,为什么每个batch都会将隐藏层重新初始化, 这样不会把以前训练出来的参数丢掉吗?? 比如 代码来自GitHub 看了一些解释是h与c是状态,不是参数,每个batch中都需要初始化为0,LSTM 中的参数是W,b。 网络中训练的是参数,不是状态。 说真的。。。当时我没怎么看懂。。。 咨询了实验室的师兄后,我有了自己的理解 产生误解的主要原因是我对RNN和LSTM的结构理解不深入,我们通常看到RNN结构图基本都是这样的 ...

Chauncey_Wang的博客 5910

unity3d排行榜mysql_Unity3D 连接MySql数据库(附案例)

Unity3D 连接MySql数据库一.在Mac OS X中架设MySql数据库下载mysql for Mac http://dev.mysql.com/downloads/mysql/5.0.html可以在Mac OS X 10.2.x(“Jaguar”)和以上版本上Mac OS X使用二进制安装软件包的PKG格式代替二进制分发版来安装MySQL。请注意该软件包不支持旧版本的Mac OS X(例...

weixin_31156651的博客 473

YOLOv8-Pose 姿态识别 RK3588 实战:从模型训练到 RKNN 部署,精度与推理速度双提升

本教程从YOLOv8-pose模型的姿态识别训练,到RK3588的边缘量化部署,为你打造了一套“高精度+高实时性+低成本”的人体姿态分析解决方案。无论是健身动作纠正、智能安防行为检测,还是工业人员姿态监控,这套技术都能直接复用——你只需替换数据集与业务逻辑,即可快速落地专属的边缘AI姿态识别系统。如果你在实践中遇到任何卡点,欢迎随时交流。记住,人体姿态识别的价值在于“关键点准、推理快、部署易”,而这三者的平衡,正是你通过本教程能掌握的核心能力。

FJN110的博客 363

置顶必读(1) | 《YOLOv26实战:从入门到深度优化》专栏导读与完整目录导航(持续更新中)

🏆 本文收录于 《YOLOv26实战:从入门到深度优化》 专栏。 本专栏系统梳理并持续复现 YOLOv26 官方特性、核心改进、多任务支持、部署优化与行业落地,内容坚持 持续更新 + 深度拆解 + 工程落地导向,不仅讲“怎么用”,更讲“为什么这样设计、如何真正落地到项目中”。

**My Coding Family** 9万+

unity3d连接mysql

数据库相关视频讲解:用python编程Excel有没有用处?连接Unity3D和MySQL数据库 在开发游戏或应用程序时,通常需要将数据存储在数据库中。而MySQL作为一个强大的关系型数据库管理系统,被广泛应用于各种开发场景中。在Unity3D中,我们也可以通过一些库和插件来实现与MySQL数据库的连接,从而实现数据的读...

weixin_40213623的博客 198

Atlas 300I Duo - vllm部署Qwen3-VL-8B-Instruct

本文介绍了在Ascend NPU环境下部署Qwen3-VL-8B大语言模型的步骤。主要包括:1)安装驱动、docker和vllm镜像;2)创建特权容器并挂载设备与目录;3)进入容器安装指定版本的transformers;4)设置环境变量和NPU卡配置;5)启动vllm服务;6)测试API接口。部署过程涉及多块NPU卡的使用,需注意内存碎片化问题,最终通过vllm框架提供模型推理服务。

m0_50105717的博客 1561
上一篇: Matlab R2012a/b反复激活无效+license checkout failed解决方案
下一篇: Unity中表格制作与动态生成
LemonXQ
博客等级 码龄9年 186粉丝 25原创
评论 9
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值