unity工具类调用csv文件并实例化生成c#代码

这个是显示出来的工具类
该栏写生成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#代码,根据不同的类型数据生成不同数据类型。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

逐·風

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值