using UnityEngine; using UnityEditor; public class BillboardCleaner : EditorWindow { [MenuItem("Tools/Billboard/Clean Billboards")] static void CleanBillboards() { // 使用 tag 查找所有 billboard GameObject[] billboards = GameObject.FindGameObjectsWithTag("Billboard"); int count = 0; // 创建撤销记录点 Undo.RegisterCompleteObjectUndo(billboards, "Clean Billboards"); foreach (GameObject billboard in billboards) { Undo.DestroyObjectImmediate(billboard); count++; } // // 查找所有被隐藏的原始物体并显示它们 // GameObject[] taggedObjects = GameObject.FindObjectsOfType(true); // int activatedCount = 0; // foreach (GameObject obj in taggedObjects) // { // if (!obj.activeInHierarchy && !obj.CompareTag("Billboard")) // { // Undo.RecordObject(obj, "Activate Original Object"); // obj.SetActive(true); // activatedCount++; // } // } // Debug.Log($"已删除 {count} 个 Billboard 物体,重新激活了 {activatedCount} 个原始物体。"); } // 可选:添加一个确认窗口 [MenuItem("Tools/Billboard/Clean Billboards with Confirmation")] static void CleanBillboardsWithConfirmation() { if (EditorUtility.DisplayDialog("清理 Billboards", "确定要删除场景中所有的 Billboard 并重新激活原始物体吗?", "确定", "取消")) { CleanBillboards(); } } }