VirtualFramework/Assets/Scripts/Editor/VirtualFPostProcess.cs

176 lines
5.9 KiB
C#
Raw Normal View History

using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using UnityEditor;
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>Сд
2025-03-28 08:48:11 +08:00
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);
}
DeletAssetBundle(buildOutputPath);
2025-04-23 10:01:05 +08:00
// <20><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
GneratorTimerLock();
}
/// <summary>
/// <20><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
/// </summary>
public void GneratorTimerLock()
{
if (File.Exists(Application.dataPath + "/TimerLock.asset"))
{
string path = "Assets/TimerLock.asset";
var asset = AssetDatabase.LoadAssetAtPath<TimerLock>(path);
if (asset != null)
{
if (string.IsNullOrEmpty(asset.time) == false)
{
//<2F><>һ<EFBFBD>λ<EFBFBD>ȡ<EFBFBD><C8A1>ȡϵͳʱ<CDB3><CAB1>
DateTime currentDateTime = DateTime.Now;
string RecordData = currentDateTime.ToString("yyyy-MM-dd HH:mm:ss");
string strMerge = asset.time + "|" + RecordData;
EncryptFileCreator.EncryptAndSaveData(strMerge, "Timer.txt");
}
}
}
}
/// <summary>
/// ɾ<><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD>ǰƽ̨<C6BD><CCA8><EFBFBD><EFBFBD>Դ
/// </summary>
public void DeletAssetBundle(string buildOutPutPath)
{
if (EditorUserBuildSettings.activeBuildTarget == BuildTarget.WebGL)
{
string path = Path.Combine(buildOutPutPath, "StreamingAssets", "AssetBundles");
if (Directory.Exists(path))
{
string[] allDirectories = Directory.GetDirectories(path);
foreach (string dir in allDirectories)
{
string dirName = Path.GetFileName(dir);
if (!dirName.Equals("WebGL", StringComparison.OrdinalIgnoreCase)) // <20><><EFBFBD>Դ<EFBFBD>Сд
{
try
{
Directory.Delete(dir, true);
Debug.Log($"Deleted directory: {dir}");
}
catch (Exception e)
{
Debug.LogError($"Failed to delete {dir}: {e.Message}");
}
}
}
}
else
{
Debug.LogError($"Directory not found: {path}");
}
}
2025-04-23 10:01:05 +08:00
else if (EditorUserBuildSettings.activeBuildTarget == BuildTarget.StandaloneWindows || EditorUserBuildSettings.activeBuildTarget == BuildTarget.StandaloneWindows64)
{
string path = Path.Combine(buildOutPutPath, "VirtualFramwork_Data", "StreamingAssets", "AssetBundles");
if (Directory.Exists(path))
{
string[] allDirectories = Directory.GetDirectories(path);
foreach (string dir in allDirectories)
{
string dirName = Path.GetFileName(dir);
if (!dirName.Equals("Windows", StringComparison.OrdinalIgnoreCase)) // <20><><EFBFBD>Դ<EFBFBD>Сд
{
try
{
Directory.Delete(dir, true);
Debug.Log($"Deleted directory: {dir}");
}
catch (Exception e)
{
Debug.LogError($"Failed to delete {dir}: {e.Message}");
}
}
}
}
else
{
Debug.LogError($"Directory not found: {path}");
}
}
2025-04-23 10:01:05 +08:00
}
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>Ŀ¼
2025-03-28 08:48:11 +08:00
//var lowerTargetDir = ConvertToLowerPath(targetDir);
Directory.CreateDirectory(targetDir);
// <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);
2025-03-28 08:48:11 +08:00
// <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>Сдת<D0B4><D7AA>
//string lowerName = ConvertToLowerPath(fileName);
File.Copy(file, Path.Combine(targetDir, fileName), 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);
2025-03-28 08:48:11 +08:00
// <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>Сдת<D0B4><D7AA>
//string lowerDirName = ConvertToLowerPath(dirName);
CopyDirectoryWithLowerCaseNames(dir, Path.Combine(targetDir, dirName));
}
}
// <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);
}
}