前言:数据库在游戏中的应用
在(客户端)Unity 需引入

在游戏开发中,有的时候会因为数据库的设计而头疼,作者最近在做一个 类似 VS 编辑器的项目,因为 数据库和 ADO 困惑了很久,快炸了,天天抓狂(头发还有),做着做着今天晚上豁然开朗了,当然后面有一个 主程大佬带飞,很幸运,接下来将会记录数据库的设计方式、还有就是 C# 中连接数据库、查询数据库中的内容、数据库的结构类的写法:

首先我们项目需要实现的功能就是:



这里是有三个类的(Student,Teacher,Teaching)这里我只分析一种,也就是 Student
首先可以看到右上角的问题描述,对应着不同的类,当类图发生改变的时候,文字描述也会开始进行改变,紧接着甲方(老板)需要做的事情就是我们(甲方)根据类图格式来填空(UI 界面比较简单 请忽略谢谢),右边代码框中留出来的 Button 按钮就是需要进行补充的,具体补充的内容就不说了,带过了,每次在代码框中点击了一次之后 在类图下面的 框框中输入 内容,然后根据用户输入的内容 跟数据库中的内容进行对比(稍后会曝光数据库的设计),如果说用户输入的内容和数据库中的内容相同的时候,就开始对比写下一个,反之跟数据库中的内容不相同的时候,将用户输入的值(也就是代码框中填充的代码)变为红色;输入正确以后也就是需要用户输入第二个值,再去跟数据库中的内容进行对比,以此类推,一直比到最后,全部比完以后右下角的结果框中 出现一个运行的结果,当用户点击了 (默认的时候是没有办法进行点击的)提交并运行的时候,保存 中间代码框中的文本,并且生成 Java 格式的代码(我不知道为神马要用 C# 去生成 Java代码,反正甲方给的需求是这样的)并且保存在 Assets文件夹下,最后打包成 WebGL 的包发布到网页上,紧接着拿着这个东西到 Java 搭建的服务器上面去运行…我也是醉了,
最后笔者简单的算了算 Unity 、WebGL 、 MySql 、 服务器 涉及到 4 个端,笔者这个项目亏死,害,不过既然接了,就当学习一下,毕竟 吃一堑长一智。。。。
接下来上数据库的设计以及代码:


紧接着上 在 C# 中连接以及访问数据库的类了:

//==========================
// - FileName:      MySqlHelp.cs
// - Created:       true.
// - CreateTime:    2020/04/26 15:27:04
// - Email:         1670328571@qq.com
// - Region:        China WUHAN
// - Description:   数据库工具类 、 MysqlHelp 封装在 GameManager 中,由于作者比较喜欢用大单例
//==========================
using MySql.Data.MySqlClient;
using System;
using System.Collections.Generic;
using System.Data;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using UnityEngine;public class MySqlHelp
{private MySqlConnection mySqlConnection;private string _host;private string _id;private string _pwd;private string _dataBase;private string tableName = "user";private string configPath;public MySqlHelp(){//写入配置文件中  localhost|root|123456|codedbconfigPath = Application.dataPath + "/Config/Config.txt";string configStr = File.ReadAllText(configPath);string[] sqlStr = configStr.Split(new char[] { '|' });InitMySql(sqlStr[0], sqlStr[1], sqlStr[2], sqlStr[3]);}private void InitMySql(string host, string id, string pwd, string dataBase){_host = host;_id = id;_pwd = pwd;_dataBase = dataBase;OpenSqlConnection();}/// <summary>/// 打开数据库连接/// </summary>public void OpenSqlConnection(){string str = "";try{str = string.Format("Database={0};DataSource={1};User Id={2};Password={3};character set = utf8", _dataBase, _host, _id, _pwd, "3306");mySqlConnection = new MySqlConnection(str);mySqlConnection.Open();//Debug.Log("Mysql Connection Access");Debug.Log("数据库连接成功");}catch (Exception e){Debug.LogError(e.Message);//Debug.LogError("MySqlAccess", "OpenSql() 服务器连接失败。 connect str={0};Error:{1}", str, e.Message);}}public DataSet Query(string format, params object[] args){string query = string.Format(format, args);//Debuger.Log("MySqlAccess", "Query() query={0}", query);//Debug.Log(e.Message);return ExecuteQuery(query);}/// <summary>/// /// </summary>/// <param name="sql"></param>/// <param name="tableName">虚拟表名称</param>/// <returns></returns>private DataSet ExecuteQuery(string sql){//Debug.Log(sql+"____");if (mySqlConnection.State == ConnectionState.Open){DataSet ds = new DataSet();try{MySqlCommand mySqlCommand = new MySqlCommand(sql, mySqlConnection);MySqlDataAdapter mySqlDataAdapter = new MySqlDataAdapter(mySqlCommand);mySqlDataAdapter.Fill(ds);}catch (Exception e){Debug.LogError(e.Message);//Debuger.LogError("MySqlHelper", "ExecuteQuery() sql={0} Error:{1}", sql, e.Message);}return ds;}return null;}public int ExcuteReader(string sqlTxt){if (mySqlConnection.State == ConnectionState.Open){try{Debug.Log(sqlTxt);MySqlCommand cmd = new MySqlCommand(sqlTxt, mySqlConnection);return cmd.ExecuteNonQuery();}catch (Exception ex){Debug.LogError(ex.Message);return 0;}}return 0;}/// <summary>/// 释放连接/// </summary>public void Close(){if (mySqlConnection != null){mySqlConnection.Close();mySqlConnection.Dispose();mySqlConnection = null;}}}

然后的话就是本项目的重点,也就是核心类(作者摸了好久,一直不懂用法):本来是有点舍不得分享,但是为了学习更多大牛的方法,豁出去了

//==========================
// - FileName:      MainPanel.cs
// - Created:       true.
// - CreateTime:    2020/04/26 15:27:04
// - Email:         1670328571@qq.com
// - Region:        China WUHAN
// - Description:   数据库结构类
//==========================
using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class UserDoItemData
{//数据库正确IDpublic int classID;//数据库正确答案public string okText;//数据库提示信息public string okMessage;//用户输入的答案public string userInputText = "";public UserDoItemData(int id, string oktxt,string msg){classID = id;okText = oktxt;okMessage = msg;}
}

然后的话就是从数据库中取数据的一些方法:

private void InitEvent()
{#region 实验//打开数据库中的表                                           封装好的方法.......DataSet dataSet = gameManager.mysqlHelp.Query("select * from maincontent", "");    //select * from classstructtableDataTable dataTable = dataSet.Tables[0];DataRow _dr;for (int i = 0; i < dataTable.Rows.Count; i++){_dr = dataTable.Rows[i];for (int j = 0; j < _dr.ItemArray.Length; j++){//Debug.Log(dataTable.Rows[i][j].ToString());//将数据添加进列表clunmList.Add(dataTable.Rows[i][j].ToString());}}UserDoItemData vo_1 = null;UserDoItemData vo_2 = null;UserDoItemData vo_3 = null;//第一个学生类string[] okTextList = clunmList[1].Split('|');string[] okMsgList = clunmList[2].Split('|');for (int i = 0; i < okTextList.Length; i++){vo_1 = new UserDoItemData(classId[0], okTextList[i], okMsgList[i]);}string[] okTextList1 = clunmList[5].Split('|');string[] okMsgList1 = clunmList[6].Split('|');for (int i = 0; i < okTextList1.Length; i++){vo_2 = new UserDoItemData(classId[1], okTextList1[i], okMsgList1[i]);}string[] okTextList2 = clunmList[9].Split('|');string[] okMsgList2 = clunmList[10].Split('|');for (int i = 0; i < okTextList2.Length; i++){vo_3 = new UserDoItemData(classId[2], okTextList2[i], okMsgList2[i]);}List<UserDoItemData> userItemList = new List<UserDoItemData>();userItemList.Add(vo_1);userItemList.Add(vo_2);userItemList.Add(vo_3);#endregion}

分享完了以后觉得有点心痛…
最后再分享一个方法吧(好人一生平安):

//取到Config下的配置文件
private string GetConfig(string name)
{classDrawConfig = Application.dataPath + "/Config/"+ name + ".txt";string configStr = File.ReadAllText(classDrawConfig);return configStr;
}

游戏中数据库的设计、类的管理相关推荐

  1. 游戏开发 数据库ID设计 ID生成器

    游戏开发 数据库ID设计 ID生成器 对于滚服游戏开发,数据库的ID设计非常重要,关乎到合服操作的复杂性.数据库ID设计得好,合服就相当简单.合服主要是数据的合并.把两个或多个单独的服务器数据合并到一 ...

  2. 从游戏中学习产品设计2:消费篇

    上一期,我们介绍了游戏中的诱导充值套路,没有看的朋友可点击 从游戏中学习产品设计1:充值篇!了解游戏中是如何引诱玩家充值的,今天我们来聊一聊游戏中的消费套路,上文介绍了游戏中的三类货币:金币,钱币和时 ...

  3. 使用Wwise在3D RPG游戏中的声音设计思路

    使用Wwise在3D RPG游戏中的声音设计思路 https://blog.audiokinetic.com/zh/how-to-use-wwise-in-3d-rpg-game/ 大家好,随着Wwi ...

  4. 游戏中支线任务的设计Pt.1: 如龙0——海量支线搭建起来的不夜城

    目录 前言 支线任务!为什么我们需要它们? 多少支线任务算多? 成为环境叙事一部分 缓和打斗玩法的审美疲劳 系统之间环环紧扣 结语 前言 如果将优秀的游戏比作一桌华丽的宴席,主线任务就是宴席上的菜肴, ...

  5. mysql表设计讲解_MySQL中数据库的设计归纳讲解

    谈到MySQL中数据库的设计,相信大家都知道这是实现实际业务的重要一步,因此对于Java学习者来说,深入了解和学习数据库的设计是十分有必要的.本文为大家准备了一份MySQL中数据库的设计归纳讲解,内容 ...

  6. 编写Java程序,创建Dota游戏中的防御塔类,通过两个坐属性显示防御塔所在的位置

    返回本章节 返回作业目录 需求说明: 创建Dota游戏中的防御塔类 通过两个坐属性显示防御塔所在的位置 实现思路: 创建防御塔(TowerDefense)类 在该类中定义了两个属性,分别是int类型横 ...

  7. 从游戏中学习产品设计1:充值篇

    游戏,是人类文明的最基本组成部分之一,已知的最古老的数字游戏,是早在公元前15世纪到公元前11世纪的计数游戏<宝石棋>,第一部记述游戏的历史书是3000多年前希罗多德编著的<历史&g ...

  8. 谈谈游戏中的帮派设计

    帮派,指帮伙派别,多指一大群人组成的群体.旧时多指因同乡.同行关系而结成的小团体. 游戏中的帮派跟现实中的帮派差不多,只不过成员不在是现实中的人,而是线下玩家在线上的虚拟化身,帮派在网络游戏中对玩家的 ...

  9. 数据库课程设计——学生选课管理信息系统

    特殊时期,不能外出,整理一下本科期间做过的课程设计,学完数据库,设计一个学生成绩管理信息系统,老师给的要求如下: 系统功能基本要求 教师信息,包括教师编号.教师姓名.性别.年龄.学历.职称.毕业院校, ...

  10. c语言游戏人物结构buff,浅谈游戏中BUFF的设计要点

    from http://www.gameres.com/msg_225241.html 其实这类帖子并没有多少的设计理论,对于策划的提升和帮助也并不大,原因其实在于其适用性太窄,当我要设计XX象棋的时 ...

最新文章

  1. 计算机评语公式怎么输,在excel中,如何使用公式写评语
  2. 到底要不要考研?读完研究生就能找到好工作了吗?
  3. python数据可视化是什么_Python数据分析:可视化
  4. 获取某数据库中含有某字段的所有表的脚本
  5. centos php mcrypt_面试经常问你什么是PHP垃圾回收机制?
  6. 完全使用CSS制作下拉菜单
  7. oracle11g分区表维护,Oracle11g维护分区(一)AddingPartitions
  8. leecode - 入门 -- 双指针秒杀数组/链表题目
  9. HDU 5820 Lights(扫描线+zkw线段树)
  10. 怎么用计算机算钱,亚马逊fba费用计算器要怎么使用?
  11. LAMP兄弟连ThinkPHP笔记
  12. R语言:方差分析,单因素方差分析,单个协变量的单因素方差分析,双因素方差分析,多元方差分析
  13. linux系统卸载git,linux卸载gitlab
  14. “茴”字有四种写法,广发有三种分期;你都知道吗?
  15. esp32获取网络天气时钟--桌面旋转太空人天气预报站
  16. oracle导入dmp文件
  17. 处理器不同编址方式、指令/数据处理方式区别
  18. yarn : 无法加载文件 C:\Users\Administrator\AppData\Roaming\npm\yarn.ps1,因为在此系统上禁止运行脚本。
  19. 网络传真服务器位置,怎么设置传真服务器
  20. 优盘格式化工具,U盘修复格式化卡死问题

热门文章

  1. 主成分分析法Principal component analysis (PCA)介绍
  2. 程序在单片机里是如何运行的?
  3. xxljob默认登录_XXL-JOB快速入门
  4. 怎么在win下装python requests
  5. C实现iBeacon蓝牙测距
  6. c语言高级成分,高级语言的基本成分数据成分,运算成分,控制成分,传输成分,怎么看它们的类型区别的?比如其中对处理对象的类型说明属于高级语...
  7. 【赛题解读】2021 CCF BDCI 基于飞桨实现花样滑冰选手骨骼点动作识别
  8. PS如何快速简单的给人像美白
  9. #10094. 「一本通 3.5 练习 2」消息的传递
  10. 利用API爬取QQ音乐评论