Files
5.24BuYu/Assets/MyGame/Editor/TurretPrefabAALabeler.cs
T
2026-10-20 18:30:03 +08:00

107 lines
3.9 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 UnityEditor;
using UnityEditor.AddressableAssets;
using UnityEditor.AddressableAssets.Settings;
using UnityEngine;
using System.IO;
using System.Collections.Generic;
/// <summary>
/// 将炮台 Prefab(Turrets/paotai*.prefab)添加到 Addressables,
/// 标签:PT + Default(与 Sprite 一致)。
/// 菜单:Tools → 炮台 → 配置Prefab AA标签
/// </summary>
public class TurretPrefabAALabeler : EditorWindow
{
private const string PREFABS_DIR = "Assets/MyGame/aa/Game/Turrets";
private const string GROUP_NAME = "Default Local Group";
private const string LABEL_PT = "PT";
private const string LABEL_DEFAULT = "Default";
// ============================ 日志开关 ============================
// 启用: Player Settings → Scripting Define Symbols 添加 ENABLE_EDITOR_LOG
// 关闭: 删除该符号。未定义时所有 Log/LogError 调用被编译器自动移除,零开销
[System.Diagnostics.Conditional("ENABLE_EDITOR_LOG")]
private static void Log(string msg) { Debug.Log(msg); }
[System.Diagnostics.Conditional("ENABLE_EDITOR_LOG")]
private static void LogError(string msg) { Debug.LogError(msg); }
[MenuItem("Tools/炮台/配置Prefab AA标签(PT+Default)", false, 102)]
public static void SetupAddressableLabels()
{
var settings = AddressableAssetSettingsDefaultObject.Settings;
if (settings == null)
{
EditorUtility.DisplayDialog("错误", "Addressables 未初始化。", "确定");
return;
}
AddressableAssetGroup defaultGroup = settings.FindGroup(GROUP_NAME)
?? settings.DefaultGroup;
if (defaultGroup == null)
{
EditorUtility.DisplayDialog("错误", $"找不到 Group: {GROUP_NAME}", "确定");
return;
}
EnsureLabel(settings, LABEL_PT);
EnsureLabel(settings, LABEL_DEFAULT);
string absoluteDir = Path.Combine(Application.dataPath, "MyGame/aa/Game/Turrets");
string[] prefabFiles = Directory.GetFiles(absoluteDir, "paotai*.prefab");
Log($"[TurretPrefabAA] 扫描到 {prefabFiles.Length} 个炮台 Prefab");
AssetDatabase.Refresh();
int count = 0;
var errors = new List<string>();
foreach (string absolutePath in prefabFiles)
{
string fileName = Path.GetFileNameWithoutExtension(absolutePath);
string assetPath = absolutePath.Replace(Application.dataPath, "Assets").Replace("\\", "/");
string guid = AssetDatabase.AssetPathToGUID(assetPath);
if (string.IsNullOrEmpty(guid))
{
errors.Add($"{fileName}: GUID 为空");
continue;
}
var entry = settings.FindAssetEntry(guid);
if (entry == null)
entry = settings.CreateOrMoveEntry(guid, defaultGroup);
if (entry == null)
{
errors.Add($"{fileName}: 无法创建 AA 条目");
continue;
}
entry.address = fileName; // paotai11001
entry.SetLabel(LABEL_PT, true, true);
entry.SetLabel(LABEL_DEFAULT, true, true);
count++;
Log($"[TurretPrefabAA] ✓ {fileName}");
}
settings.SetDirty(AddressableAssetSettings.ModificationEvent.EntryMoved, null, true);
AssetDatabase.SaveAssets();
AssetDatabase.Refresh();
string msg = $"成功: {count} 个";
if (errors.Count > 0) msg += $"\n\n失败 {errors.Count} 个:\n" + string.Join("\n", errors);
EditorUtility.DisplayDialog("Prefab AA标签完成", msg, "确定");
}
private static void EnsureLabel(AddressableAssetSettings settings, string label)
{
if (!settings.GetLabels().Contains(label))
{
settings.AddLabel(label);
Log($"[TurretPrefabAA] 新增标签: {label}");
}
}
}