Files
plugin-library/Assets/00.ARMazTools/Editor/MarkAdressable.cs
2025-11-13 15:30:53 +08:00

146 lines
4.6 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using UnityEditor;
using UnityEditor.U2D;
using UnityEngine;
using UnityEngine.U2D;
namespace Stary.Evo.Editor
{
public class MarkAdressable
{
public static string DomainRoot
{
get { return Application.dataPath + "/Modules"; }
}
[MenuItem("Evo/Hotfix/一键标记所有模块")]
/// <summary>
/// 一键标记所有模块
/// </summary>
public static void AddMarkAll()
{
// //清空主包旧数据
AssetDatabase.RemoveUnusedAssetBundleNames(); // 清理无用标签
DirectoryInfo[] dirs = new DirectoryInfo(DomainRoot).GetDirectories();
foreach (var dir in dirs)
{
AddDomainMark(dir.Name);
}
}
public static void AddDomainMark(string domainName)
{
string resPath =
$"Assets/Modules/{domainName}/Main/Res";
MarkDomain(domainName);
CreateRes(domainName,
$"{DomainRoot}/{domainName}/Main/Res",
$"{DomainRoot}/{domainName}/Main/Scripts");
}
// [MenuItem("Evo/Hotfix/一键Res")]
public static void CreateRes(string domain, string resPath, string outputPath)
{
ResFileGet.CreateClass("Res", domain, outputPath,
(a) => { ResFileGet.CreateContent(a, resPath, "\t"); });
}
#region
public static Dictionary<string, string> addressDic = new Dictionary<string, string>();
public static void MarkDomain(string domainName)
{
addressDic.Clear();
///创建分组
string remotedRoot = $"{DomainRoot}/{domainName}/Main/Res";
//DirectoryInfo[] dirs = new DirectoryInfo(remotedRoot).GetDirectories();
//TopDirectoryOnly 只扫当前目录AllDirectories 递归
string[] fileAll = Directory.GetFiles(remotedRoot, "*", SearchOption.AllDirectories);
//检测Packages是否存在Group
foreach (var info in fileAll)
{
AutoMarkRootAddress(domainName, info);
// if (info.Name != "SpriteAtlas" && info.Name != "Atlas")
// AutoMark(info.Name);
}
Debug.Log("MarkAsset Successful");
}
public static void AutoMarkRootAddress(string packageName, string file)
{
if (!string.IsNullOrEmpty(file) && Path.GetExtension(file) != ".meta" &&
Path.GetExtension(file) != ".spriteatlas")
{
string assetPath = FilesUtils.AbsoluteToRelativePath("Assets", file); //Asset到文件的路径
AssetImporter.GetAtPath(assetPath).assetBundleName = $"module_assetbundle_{packageName}";
file = file.Replace(" ", "").Replace("/", "\\"); // 保留点号替换为下划线
Debug.Log("file:" + file + "----GetAssetAddress:" + GetAssetAddress(file));
AddAddressInfo( file, GetAssetAddress(file));
}
}
private static void AddAddressInfo(string assetPath, string address)
{
if (addressDic.ContainsKey(assetPath))
{
Debug.LogError("命名重复,已经存在:" + assetPath);
}
else
{
addressDic.Add(assetPath, address);
}
}
private static string GetAssetAddress(string assetPath)
{
string fileName = Path.GetFileNameWithoutExtension(assetPath);
//FileInfo fileInfo = new FileInfo(assetPath);
//return $"{fileInfo.Directory.Name}_{fileName}";
return $"{fileName}";
}
#endregion
/// <summary>
/// 获取全部作用域名
/// </summary>
private static List<string> GetCreatDomainAllName()
{
string domainPath = $"{Application.dataPath}/Modules";
string[] domains;
// 新增目录获取代码
if (Directory.Exists(domainPath))
{
var dirInfo = new DirectoryInfo(domainPath);
// 获取直接子目录(不递归)
domains = dirInfo.GetDirectories("*", SearchOption.TopDirectoryOnly)
.Select(d => d.Name)
.ToArray();
}
else
{
domains = new[] { "Default" };
}
return domains.ToList();
}
}
}