这个是显示出来的工具类
该栏写生成c#文件名称
public class ReflectConfigToCS : MonoBehaviour
{
[MenuItem(“Tool/ReflectConfigToCS—(将配置文件数据反射成C#代码)”)]
public static void ConfigToCS()
{
ReflectConfigToCS_Windows rW = EditorWindow.GetWindow<ReflectConfigToCS_Windows>(“配 置文件转换成C#_Data”);
rW.InitConfig();
}
}
通过该代码将工具类的按钮生成上图。
using Excel;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Diagnostics;
using System.IO;
using System.Text;
using UnityEditor;
using UnityEngine;
private string JsonFileName;
private string PathFileName;
string biaoti = @"/************************************************************************
该文件是通过自动生成的,禁止手动修改
作者:
日期:#1
*************************************************************************/";
///
/// 初始化配置数据
///
public void InitConfig()
{
}
private void OnGUI()
{
GUILayout.Label("请输入生成代码的名称(首字母大写)");
JsonFileName = EditorGUILayout.TextField(JsonFileName);
if (GUILayout.Button("请选择一个配置文件"))
{
string selectFileStr = EditorUtility.OpenFilePanel("???", "", "csv");
ReaderConfigFile(selectFileStr);
}
}
/// <summary>
/// 读取配置文件
/// </summary>
/// <param name="path">文件路径</param>
void ReaderConfigFile(string path)
{
string[] fileStr = File.ReadAllLines(path);
PathFileName = path;
UnityEngine.Debug.Log(fileStr);
CreateCS(fileStr);
}
/// <summary>
/// 创建C#文件
/// </summary>
/// <param name="reflectFileName">反射成CS的文件名</param>
void CreateCS(string[] reflectFileName)
{
/************ 写入配置路径位置与创建的文件写入流 ************/
string CSPath = $"{Application.dataPath + "/Resources"}/{JsonFileName}.cs";
StreamWriter sw = new StreamWriter(CSPath);
/************ 设置一些写入的格式符与变量 ************/
//写入的行以\为换行符 \t==tab
string tabKey = "\t";
//参数类型
string[] argumentType = reflectFileName[1].Split(',');
//参数名称
string[] argumentName = reflectFileName[0].Split(',');
//string[] argumentList = reflectFileName[1].Split(',');
string time = DateTime.Now.ToString();
sw.WriteLine(biaoti.Replace("#1", time));
sw.WriteLine(GetImport());
/************ 正式在配置流文件里开始写入代码配置 ************/
sw.WriteLine($"public class {JsonFileName}");
sw.WriteLine("{");
//遍历参数列表,生成配置
for (int i = 0; i < argumentType.Length; i++)
{
sw.WriteLine($"{tabKey}public {argumentType[i]} {argumentName[i]};");
}
sw.WriteLine("}");
//生成解析csv文件函数
sw.WriteLine($"public class JsonToCsv{JsonFileName}");
sw.WriteLine("{");
sw.WriteLine($"{tabKey}public List<{JsonFileName}> {JsonFileName}_list = new List<{JsonFileName}>();");
sw.WriteLine($"{tabKey}public void JsonToCsvOpen()");
sw.WriteLine($"{tabKey}" + "{");
sw.WriteLine($"{tabKey}{tabKey}string json = \"{PathFileName}\";");
sw.WriteLine($"{tabKey}{tabKey}string[] fileStr = File.ReadAllLines(json);");
sw.WriteLine($"{tabKey}{tabKey}for (int i = 2; i < fileStr.Length; i++)"+"{");
sw.WriteLine($"{tabKey}{tabKey}{tabKey}string[] list_open = fileStr[i].Split(',');");
sw.WriteLine($"{tabKey}{tabKey}{tabKey}{JsonFileName} jsons = new {JsonFileName}();");
for (int i = 0; i < argumentType.Length; i++)
{
//当前不同类型表头定义不同类型
if (argumentType[i] == "int")
{
sw.WriteLine($"{tabKey}{tabKey}{tabKey}jsons.{argumentName[i]} = int.Parse(list_open[{i}]);");
}
else if (argumentType[i] == "string")
{
sw.WriteLine($"{tabKey}{tabKey}{tabKey}jsons.{argumentName[i]} = list_open[{i}];");
}
else if (argumentType[i] == "float")
{
sw.WriteLine($"{tabKey}{tabKey}{tabKey}jsons.{argumentName[i]} = float.Parse(list_open[{i}]);");
}
}
sw.WriteLine($"{tabKey}{tabKey}{tabKey}{JsonFileName}_list.Add(jsons);" + "}");
sw.WriteLine($"{tabKey}" + "}");
//生成调用数据并返回集合
sw.WriteLine($"{tabKey}public List<{JsonFileName}> data()" + "{");
sw.WriteLine($"{tabKey}{tabKey}JsonToCsvOpen();");
sw.WriteLine($"{tabKey}return {JsonFileName}_list;" + "}");
sw.WriteLine("}");
sw.Flush();
sw.Close();
AssetDatabase.Refresh();
Process.Start(CSPath);
}
/// <summary>
/// 加载调用数据
/// </summary>
/// <returns></returns>
string GetImport()
{
string importStr = null;
importStr += $"using UnityEngine;\r\n";
importStr += $"using UnityEngine.UI;\r\n";
importStr += $"using System;\r\n";
importStr += $"using System.Collections;\r\n";
importStr += $"using UnityEditor;\r\n";
importStr += $"using System.IO;\r\n";
importStr += $"using System.Collections.Generic;\r\n";
return importStr;
}
通过上述代码将读取文件并生成c#文件内函数,实现工具类文件。
这个是我调用的csv文件数据
/************************************************************************
该文件是通过自动生成的,禁止手动修改
作者:
日期:2021/11/11 15:20:29
*************************************************************************/
using UnityEngine;
using UnityEngine.UI;
using System;
using System.Collections;
using UnityEditor;
using System.IO;
using System.Collections.Generic;
public class Json
{
public int id;
public string name;
public int del;
public string see;
}
public class JsonToCsvJson
{
public List Json_list = new List();
public void JsonToCsvOpen()
{
string json = “F:/VR/Study document/VR Designed Six/CeShiDemo/DuiXiangChi__FanShe/DuiXiangChi__FanShe/Assets/Resources/jsonCSV.csv”;
string[] fileStr = File.ReadAllLines(json);
for (int i = 2; i < fileStr.Length; i++){
string[] list_open = fileStr[i].Split(’,’);
Json jsons = new Json();
jsons.id = int.Parse(list_open[0]);
jsons.name = list_open[1];
jsons.del = int.Parse(list_open[2]);
jsons.see = list_open[3];
Json_list.Add(jsons);}
}
public List data(){
JsonToCsvOpen();
return Json_list;}
}
以上代码是我通过工具类生成的c#代码,根据不同的类型数据生成不同数据类型。