178 lines
6.3 KiB
C#
178 lines
6.3 KiB
C#
using GameEditor.Core.DataConfig;
|
||
using System;
|
||
using System.Collections.Generic;
|
||
using System.IO;
|
||
using UnityEditor;
|
||
using UnityEngine;
|
||
using System.Data;
|
||
using Excel;
|
||
|
||
public class ContrastExcelAndPrefab
|
||
{
|
||
static string filePath = DataConfigSetting.execlDir + @"\GuideConfig.xlsx";
|
||
|
||
static int type = 2;//行为类型为查找预制
|
||
static int curIndex = 7;//行为类型初始行
|
||
|
||
//所在列数
|
||
static int BehaviorType = 12;//行为类型
|
||
static int BehaviorArgs = 13;//行为参数
|
||
|
||
[MenuItem("Tools/GuideConfig对比Prefab")]
|
||
public static void StartContrast()
|
||
{
|
||
List<string[]> excelData = FindExcel();
|
||
List<GameObject> allPrefab = FindPrefab();
|
||
List<string> writeList = Contrast(excelData, allPrefab);
|
||
WriteTxt(writeList);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 查找表
|
||
/// </summary>
|
||
/// <returns></returns>
|
||
public static List<string[]> FindExcel()
|
||
{
|
||
DataRowCollection dataRowCollection = ReadExcel(filePath);
|
||
List<string[]> excelData = new List<string[]>();
|
||
for (int i = curIndex; i < dataRowCollection.Count; i++)
|
||
{
|
||
if (dataRowCollection[i][BehaviorType] != "")
|
||
{
|
||
if (dataRowCollection[i][BehaviorType].ToString() == type.ToString())
|
||
{
|
||
//Debug.Log(dataRowCollection[i][BehaviorArgs]);
|
||
string[] strArray = dataRowCollection[i][BehaviorArgs].ToString().Split(new char[1] { '/' });
|
||
//Debug.Log(strArray[0]);
|
||
string address = "";
|
||
for (int value = 1; value < strArray.Length; value++)
|
||
{
|
||
address = address + strArray[value];
|
||
if (value != strArray.Length - 1)
|
||
address = address + "/";
|
||
}
|
||
//Debug.Log(address);
|
||
//Debug.Log("-----------------------");
|
||
string[] list = new string[3];
|
||
list[0] = dataRowCollection[i][1].ToString();
|
||
list[1] = strArray[0];
|
||
list[2] = address;
|
||
excelData.Add(list);
|
||
}
|
||
}
|
||
}
|
||
//for(int i = 0; i < excelData.Count; i++)
|
||
//{
|
||
// Debug.Log(excelData[i][0] + " : " + excelData[i][1]);
|
||
//}
|
||
return excelData;
|
||
}
|
||
|
||
/// <summary>
|
||
/// 查找预制
|
||
/// </summary>
|
||
/// <returns></returns>
|
||
public static List<GameObject> FindPrefab()
|
||
{
|
||
List<GameObject> allPrefab = new List<GameObject>();
|
||
|
||
//查找所有预制
|
||
var resourcesPath = Application.dataPath;
|
||
var absolutePaths = System.IO.Directory.GetFiles(resourcesPath, "*.prefab", System.IO.SearchOption.AllDirectories);
|
||
for (int i = 0; i < absolutePaths.Length; i++)
|
||
{
|
||
EditorUtility.DisplayProgressBar("获取预制体", "获取预制体中:" + (float)i + "/" + absolutePaths.Length, (float)i / absolutePaths.Length);
|
||
|
||
string path = "Assets" + absolutePaths[i].Remove(0, resourcesPath.Length);
|
||
path = path.Replace("\\", "/");
|
||
GameObject prefab = AssetDatabase.LoadAssetAtPath(path, typeof(GameObject)) as GameObject;
|
||
if (prefab != null)
|
||
{
|
||
allPrefab.Add(prefab);
|
||
}
|
||
}
|
||
EditorUtility.ClearProgressBar();
|
||
|
||
return allPrefab;
|
||
}
|
||
|
||
/// <summary>
|
||
/// 表与预制对比
|
||
/// </summary>
|
||
/// <param name="excelData"></param>
|
||
/// <param name="allPrefab"></param>
|
||
/// <returns></returns>
|
||
public static List<string> Contrast(List<string[]> excelData, List<GameObject> allPrefab)
|
||
{
|
||
List<string> writeList = new List<string>();
|
||
writeList.Add("ID 预制名 位置");
|
||
for (int excelIndex = 0; excelIndex < excelData.Count; excelIndex++)
|
||
{
|
||
for(int prefabIndex = 0; prefabIndex < allPrefab.Count; prefabIndex++)
|
||
{
|
||
if (allPrefab[prefabIndex].transform.name == excelData[excelIndex][1])
|
||
{
|
||
//Debug.Log(excelData[excelIndex][2]);
|
||
Transform item = allPrefab[prefabIndex].transform.Find(excelData[excelIndex][2]);
|
||
if (item)
|
||
{
|
||
//Debug.Log(item.name);
|
||
}
|
||
else
|
||
{
|
||
writeList.Add(excelData[excelIndex][0] + " " + excelData[excelIndex][1] + " " + excelData[excelIndex][2]);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
return writeList;
|
||
}
|
||
|
||
/// <summary>
|
||
/// 写入Txt
|
||
/// </summary>
|
||
/// <param name="writeList"></param>
|
||
public static void WriteTxt(List<string> writeList)
|
||
{
|
||
string txTPath = Application.dataPath + "\\引导表对比预制体.txt";
|
||
string[] str = writeList.ToArray();
|
||
// 判断文件是否存在,不存在则创建,否则清空重新写入
|
||
if (!File.Exists(txTPath))
|
||
{
|
||
FileStream fs = new FileStream(txTPath, FileMode.Append);
|
||
StreamWriter sw = new StreamWriter(fs);
|
||
for (int v = 0; v < writeList.Count; v++)
|
||
{
|
||
sw.WriteLine(writeList[v]);
|
||
}
|
||
sw.Close();
|
||
}
|
||
else
|
||
{
|
||
File.WriteAllText(txTPath, string.Empty);
|
||
File.WriteAllLines(txTPath, str);
|
||
}
|
||
Debug.Log("路径:" + txTPath);
|
||
}
|
||
|
||
//通过表的索引,返回一个DataRowCollection表数据对象
|
||
private static DataRowCollection ReadExcel(string _path, int _sheetIndex = 0)
|
||
{
|
||
FileStream stream = File.Open(_path, FileMode.Open, FileAccess.Read, FileShare.Read);
|
||
IExcelDataReader excelReader = ExcelReaderFactory.CreateOpenXmlReader(stream);
|
||
DataSet result = excelReader.AsDataSet();
|
||
return result.Tables[_sheetIndex].Rows;
|
||
}
|
||
|
||
//通过表的名字,返回一个DataRowCollection表数据对象
|
||
private static DataRowCollection ReadExcel(string _path, string _sheetName)
|
||
{
|
||
FileStream stream = File.Open(_path, FileMode.Open, FileAccess.Read, FileShare.Read);
|
||
IExcelDataReader excelReader = ExcelReaderFactory.CreateOpenXmlReader(stream);
|
||
DataSet result = excelReader.AsDataSet();
|
||
return result.Tables[_sheetName].Rows;
|
||
}
|
||
}
|
||
|
||
|