using UnityEditor; using UnityEditor.SceneManagement; using UnityEngine; using UnityEngine.SceneManagement; public static class MoveMusicPicToPrefab { const string ScenePath = "Assets/Scenes/UI_UI.unity"; const string PrefabPath = "Assets/Scripts/UI/Panel/dontdestroyonload/btm and top.prefab"; const string MusicPicName = "MusicPic"; [MenuItem("Tools/MusicPic/Move To btm and top Prefab")] public static void Execute() { var scene = EditorSceneManager.OpenScene(ScenePath, OpenSceneMode.Single); if (!scene.IsValid()) { Debug.LogError("[MoveMusicPicToPrefab] Failed to open UI_UI scene."); return; } var musicPic = FindInScene(scene, MusicPicName); if (musicPic == null) { Debug.LogError("[MoveMusicPicToPrefab] MusicPic not found in UI_UI scene."); return; } var prefabRoot = PrefabUtility.LoadPrefabContents(PrefabPath); if (prefabRoot == null) { Debug.LogError("[MoveMusicPicToPrefab] Failed to load prefab."); return; } var existing = prefabRoot.transform.Find(MusicPicName); if (existing != null) { Object.DestroyImmediate(existing.gameObject); } var copy = Object.Instantiate(musicPic); copy.name = MusicPicName; copy.transform.SetParent(prefabRoot.transform, false); copy.transform.localPosition = Vector3.zero; copy.transform.localRotation = Quaternion.identity; copy.transform.localScale = Vector3.one; PrefabUtility.SaveAsPrefabAsset(prefabRoot, PrefabPath); PrefabUtility.UnloadPrefabContents(prefabRoot); Object.DestroyImmediate(musicPic); EditorSceneManager.MarkSceneDirty(scene); EditorSceneManager.SaveScene(scene); Debug.Log("[MoveMusicPicToPrefab] Moved MusicPic into btm and top prefab and removed from UI_UI scene."); } static GameObject FindInScene(Scene scene, string name) { var roots = scene.GetRootGameObjects(); foreach (var root in roots) { if (root == null) continue; var t = root.transform.Find(name); if (t != null) return t.gameObject; } var all = Object.FindObjectsByType(FindObjectsInactive.Include, FindObjectsSortMode.None); foreach (var t in all) { if (t == null) continue; if (t.gameObject.scene != scene) continue; if (t.name == name) return t.gameObject; } return null; } }