using System; using System.IO; using UnityEditor; using UnityEngine; /// /// 硬链接目录工具。。。支持win+mac, 需要win 7以上才有mklink命令 /// public class LinkHelper { /// /// 删除硬链接目录 /// /// public static void DeleteLink(string linkPath) { var os = Environment.OSVersion; if (os.ToString().Contains("Windows")) { MyEditorTools.ExecuteCommand(String.Format("rmdir \"{0}\"", linkPath)); } else if (os.ToString().Contains("Unix")) { MyEditorTools.ExecuteCommand(String.Format("rm -Rf \"{0}\"", linkPath)); } else { Debug.LogError(String.Format("[SymbolLinkFolder]Error on OS: {0}", os.ToString())); } } public static void SymbolLinkFolder(string srcFolderPath, string targetPath) { var os = Environment.OSVersion; if (os.ToString().Contains("Windows")) { MyEditorTools.ExecuteCommand(String.Format("mklink /J \"{0}\" \"{1}\"", targetPath, srcFolderPath)); } else if (os.ToString().Contains("Unix")) { var fullPath = Path.GetFullPath(targetPath); if (fullPath.EndsWith("/")) { fullPath = fullPath.Substring(0, fullPath.Length - 1); fullPath = Path.GetDirectoryName(fullPath); } MyEditorTools.ExecuteCommand(String.Format("ln -s {0} {1}", Path.GetFullPath(srcFolderPath), fullPath)); } else { Debug.LogError(String.Format("[SymbolLinkFolder]Error on OS: {0}", os.ToString())); } } /// /// 删除指定目录所有硬链接 /// /// public static void DeleteAllLinks(string assetBundlesLinkPath) { if (Directory.Exists(assetBundlesLinkPath)) { foreach (var dirPath in Directory.GetDirectories(assetBundlesLinkPath)) { DeleteLink(dirPath); } } } [MenuItem("Game/link")] public static void MkLinkFramework() { SymbolLinkFolder("Editor", Application.dataPath + "/123"); AssetDatabase.Refresh(); } /// /// 创建StreamingAssets链接 /// public static void MkLinkStreamingAssets() { string linkPath = Application.streamingAssetsPath + "/";// + Utility.GetPlatformName(); if (IsLinkStreamingAssets) { MyEditorTools.CreateDir(Application.streamingAssetsPath); var exportPath = "";// AppSetting.ExportResBaseDir + Utility.GetPlatformName(); MyEditorTools.DeleteDir(linkPath); //删除复制过来的文件夹 SymbolLinkFolder(exportPath, linkPath); } else { DeleteLink(linkPath); } AssetDatabase.Refresh(); } public static void DeleteLinkStreamingAssets() { string linkPath = Application.streamingAssetsPath + "/";// + Utility.GetPlatformName(); if (IsLinkStreamingAssets) { DeleteLink(linkPath); IsLinkStreamingAssets = false; } else MyEditorTools.DeleteDir(linkPath); } private static bool _IsLinkStreamingAssets = false; /// /// 是否连接资源StreamingAssets /// public static bool IsLinkStreamingAssets { get { _IsLinkStreamingAssets = EditorPrefs.GetBool("IsLinkStreamingAssets", false); return _IsLinkStreamingAssets; } set { _IsLinkStreamingAssets = value; EditorPrefs.SetBool("IsLinkStreamingAssets", value); } } }