unity数据库MySQL插件_转载unity编辑器xml数据库插件

本文介绍了一个Unity编辑器插件,用于在Inspector面板中管理XML数据库。插件实现了XML数据的增删改查操作,允许测试人员方便地编辑数据。文章还提供了关于代码设计和数据库操作的详细说明,包括如何处理数组和对象的存储,并给出了部分关键代码示例。
摘要由CSDN通过智能技术生成

unity编辑器xml数据库插件

注:9月9日更新,其中MyXML.cs中有一句代码写错,查找功能失误,文中已经修改!

注:9月1日更新说明:xml存储结构,因为在用xml之前不知道正规的xml数据结构,所以是自创的结构。虽然也能完成功能,但是据说策划配置时不方便,所以为了统一,不使用节点的方式存储数据,

而是通过添加属性,设置属性的方式来存取数据。

直接上图看的清楚些:

我之前设计的格式:

3e831ee1578279e5100031291043e7ad.png

现在的格式:

ad42cc3c06da929a170380d39d3b9a68.png

关于这部分的代码我会贴在最后。

程序和数据分离的意义我就不多说了,大家自己脑补或者百度。在使用unity开发时,数据的调试是非常频繁和重要的。我们可以制作一个简单的编辑器插件,将数据显示在Inspector面板上,并进行编辑操作。这样测试人员就可以非常方便的管理测试数据了。

需求很简单,具体的效果是,能读取资源内的类,将其属性显示在面板上,可以对此进行增删改查的操作。如下图所示(对象组,相当于数据库所有的表。对象,相当于表的所有记录)。

d69eea74a2b41452d9c833d81d6fb915.png

70761027d47ddabfcaee1e0cdcbeddc0.png

当需要创建一条新记录的时候,先填上主键,然后点击创建按钮。编辑完成后点击插入即可。

1db339d21c80f063d9c7562c15484dbf.png

7eb3744fc471233d574b93e303e984b6.png

xml数据库文件如下图

5e65809732e973a2cbe7a93d1815b4ef.png

要实现这个功能,需要的知识是,C#的反射类,unity的编辑器类,数据库。通过反射,自动解析对象,获取对象的成员变量名和值。Unity编辑器类没什么好说的,就是一些组件方法的使用。考虑到跨平台等问题,我选择xml作为存储数据库。编辑器内运行,存储量不大,所以性能方面的问题也就不说了。

好,接下来说一说设计的事。首先是对象的反射。基本类型的存储没有问题,难点是数组的存取有点变态。我找了很多资料也不能自动创建某一类型的数组。既然不能自动,然后就使用半自动判断了,无非是if else之类的,看看这个属性是不是某一类型的数组。

下面是代码。

反射搞定后就是设计xml数据库了,具体的功能看个人需求。关于操作xml还是很简单的。

48304ba5e6f9fe08f3fa1abda7d326ab.png

using System.Xml;

using System.Collections.Generic;

using System.IO;

using System;

using UnityEngine;

public abstract class DB

{

/*public abstract bool CheckTable(string tableName);

public abstract bool CheckDB(string dBName);

public abstract void CreateTable(string tableName);

public abstract void CreateDB(string dBName);*/

public abstract bool Insert(string tableName, string[] cols, string[] values, string key);

public abstract bool Update(string tableName, string[] cols, string[] values, string key);

public abstract bool UpdateAll(string tableName);

public abstract bool Delete(string tableName, string key);

public abstract bool DeleteAll(string tableName);

public abstract string[] Select(string tableName, string key);

public abstract List SelectAll(string tableName);

public abstract void Connect(string path);

public abstract void Close();

public abstract string[] SelectAllObjectsName(string tableName);

}

public class XmlSql : DB

{

//public static string values[0] = "values[0]";

private XmlDocument xmlDoc;

private string path;

private string rootName;

public XmlSql()

{

xmlDoc = new XmlDocument();

}

public XmlSql(string path)

{

xmlDoc = new XmlDocument();

Connect(path);

}

public override void Connect(string path)

{

if (xmlDoc == null) xmlDoc = new XmlDocument();

if (!CheckDB(path))

{

this.path = path;

rootName = path.Substring(path.LastIndexOf("/")+1,path.LastIndexOf(".")- path.LastIndexOf("/")-1);

CreateDB(rootName);

}

else {

this.path = path;

xmlDoc.Load(this.path);

rootName = xmlDoc.LastChild.LocalName;

}

}

public override void Close()

{

if (xmlDoc != null)

xmlDoc.Save(path);

GC.Collect();

}

public XmlNode CheckTable(string tableName)

{

XmlNode root = xmlDoc.SelectSingleNode(rootName);

if (root.SelectSingleNode(tableName) != null) {

return root.SelectSingleNode(tableName);

}

return CreateTable(root,tableName);

}

public bool CheckDB(string dBName)

{

return File.Exists(dBName);

}

public XmlNode CreateTable(XmlNode root,string tableName)

{

XmlNode table = xmlDoc.CreateElement(tableName);

root.AppendChild(table);

xmlDoc.Save(path);

return table;

}

public XmlNode

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值