VirtualFramework/Assets/Scripts/Editor/VirtualFPostProcess.cs

78 lines
2.4 KiB
C#
Raw Normal View History

using System.Collections;
using System.Collections.Generic;
using System.IO;
using UnityEditor.Build;
using UnityEditor.Build.Reporting;
using UnityEngine;
public class VirtualFPostProcess : IPostprocessBuildWithReport
{
public int callbackOrder => 0;
public void OnPostprocessBuild(BuildReport report)
{
string projectPath = Application.dataPath;
string dataFolderPath = Path.Combine(projectPath, "../Data");
string buildOutputPath = GetValidBuildPath(report);
if (Directory.Exists(dataFolderPath))
{
// Ŀ<><C4BF>Ŀ¼ǿ<C2BC><C7BF>Сд
string targetDataPath = Path.Combine(buildOutputPath, "data");
CopyDirectoryWithLowerCaseNames(dataFolderPath, targetDataPath);
Debug.Log($"<22><><EFBFBD><EFBFBD>Ŀ¼<C4BF>Ѹ<EFBFBD><D1B8>Ƶ<EFBFBD>: {targetDataPath}");
}
else
{
Debug.LogWarning(<>ҵ<EFBFBD><D2B5><EFBFBD><EFBFBD><EFBFBD>Ŀ¼: " + dataFolderPath);
}
}
private string GetValidBuildPath(BuildReport report)
{
string path = report.summary.outputPath;
if (path.Contains(".exe"))
{
return Path.GetDirectoryName(path);
}
return path;
}
private void CopyDirectoryWithLowerCaseNames(string sourceDir, string targetDir)
{
// <20><><EFBFBD><EFBFBD>СдĿ<D0B4><C4BF>Ŀ¼
var lowerTargetDir = ConvertToLowerPath(targetDir);
Directory.CreateDirectory(lowerTargetDir);
// <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>Сдת<D0B4><D7AA><EFBFBD><EFBFBD>
foreach (var file in Directory.GetFiles(sourceDir))
{
string fileName = Path.GetFileName(file);
string lowerName = ConvertToLowerPath(fileName);
File.Copy(file, Path.Combine(lowerTargetDir, lowerName), true);
}
// <20>ݹ鴦<DDB9><E9B4A6><EFBFBD><EFBFBD>Ŀ¼<C4BF><C2BC><EFBFBD><EFBFBD>Сдת<D0B4><D7AA><EFBFBD><EFBFBD>
foreach (var dir in Directory.GetDirectories(sourceDir))
{
string dirName = Path.GetFileName(dir);
string lowerDirName = ConvertToLowerPath(dirName);
CopyDirectoryWithLowerCaseNames(dir, Path.Combine(lowerTargetDir, lowerDirName));
}
}
// <20><>Ӣ<EFBFBD>Ļ<EFBFBD><C4BB><EFBFBD>·<EFBFBD><C2B7>תСд
private string ConvertToLowerPath(string input)
{
char[] chars = input.ToCharArray();
for (int i = 0; i < chars.Length; i++)
{
// ֻ<><D6BB><EFBFBD><EFBFBD>ASCII<49><49>ĸ<EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD>Unicode<64>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>ֲ<EFBFBD><D6B2>
if (chars[i] >= 'A' && chars[i] <= 'Z')
{
chars[i] = (char)(chars[i] | 0x20); // <20><><EFBFBD><EFBFBD>תСд
}
}
return new string(chars);
}
}