Unity 檢查文件命名是否規(guī)范
問題由來
- 非程序人員經(jīng)常上傳一些命名不規(guī)范的文件到Unity中
解決方式
- 命名不規(guī)范文件不能上傳到庫中(以后做)
- Unity加載到命名不規(guī)范文件的時候彈框提示(以后做)
- 定期掃描項目中所有文件
如果掃描項目中所有文件
- 技術(shù)點
- 如何獲取Unity Asset 中所有文件命名
- Application.dataPath API可獲取本地Asset目錄
- DirectoryInfo 目錄信息類 可獲取該目錄下所有目錄DirectoryInfo、文件FileSystemInfo
- 使用迭代方式獲取Asset目錄所有文件
- 如何判斷命名是否規(guī)范
- 規(guī)范定義
- 遍歷文件命名字符串每個char是否符合規(guī)范
使用方式
- 把源碼放入工程
- 在Unity頂部的菜單欄點擊 Tool->文件命名是否規(guī)范
- 查看Console面版日志
源碼
using System.Collections.Generic;
using System.IO;
using UnityEditor;
using UnityEngine;
/// <summary>
/// 文件夾
/// </summary>
public class Folders
{
[MenuItem("Tools/文件命名是否規(guī)范")]
static void CheckFolderName()
{
Folders folder = new Folders(Application.dataPath);
List<string> paths = new List<string>();
CheckFolderName(folder, paths);
foreach (var item in paths)
{
Debug.LogError(item);
}
Debug.Log("檢查完成");
}
static void CheckFolderName(Folders folder, List<string> paths)
{
foreach (var item in folder.dicFileSystemInfo)
{
string name = item.Key;
FileSystemInfo fileSystemInfo = item.Value;
if (fileSystemInfo.Extension == ".meta" || fileSystemInfo.Extension == ".DS_Store")
{
continue;
}
bool isIllegal = IsIllegal(name, true, false);
if (isIllegal == false)
{
paths.Add(fileSystemInfo.FullName);
}
}
foreach (var item in folder.listFolder)
{
CheckFolderName(item, paths);
}
}
static bool IsIllegal(string str, bool isDigit = true, bool isSpace = true)
{
for (int i = 0; i < str.Length; i++)
{
char c = str[i];
if (char.IsLower(c) || char.IsUpper(c))
{
return true;
}
if (char.IsDigit(c) && isDigit == true)
{
return true;
}
if (char.IsWhiteSpace(c) && isSpace == true)
{
return true;
}
}
return false;
}
/// <summary>
/// 當前目錄信息
/// </summary>
public DirectoryInfo currentDirectoryInfo;
/// <summary>
/// 當前文件夾中的文件夾
/// </summary>
public List<Folders> listFolder;
/// <summary>
/// 當前文件夾的文件
/// </summary>
public List<FileInfo> listFileInfo;
/// <summary>
/// 當前文件夾中所有文件
/// </summary>
public Dictionary<string, FileSystemInfo> dicFileSystemInfo;
public Folders(string path)
{
currentDirectoryInfo = new DirectoryInfo(path);
Init();
}
Folders(DirectoryInfo directoryInfo)
{
currentDirectoryInfo = directoryInfo;
Init();
}
void Init()
{
listFileInfo = new List<FileInfo>();
foreach (var item in currentDirectoryInfo.GetFiles())
{
listFileInfo.Add(item);
}
listFolder = new List<Folders>();
foreach (var item in currentDirectoryInfo.GetDirectories())
{
listFolder.Add(new Folders(item));
}
dicFileSystemInfo = new Dictionary<string, FileSystemInfo>();
foreach (var item in listFileInfo)
{
dicFileSystemInfo.Add(item.Name, item);
}
foreach (var item in listFolder)
{
dicFileSystemInfo.Add(item.currentDirectoryInfo.Name, item.currentDirectoryInfo);
}
}
}