在复制场景或者预制体到别的项目时,容易发生丢失脚本的情况,少的话还好,但有时候丢失很多,还容易报错,一个个手动查找删除的话,太麻烦了,就写了小工具。代码如下:
using UnityEngine;
using UnityEditor;
using System.Collections.Generic;
public class RemoveMissingScripts : EditorWindow
{
[MenuItem("Tools/Clear Scene Missing Scripts")]
static void Init()
{
GetWindow<RemoveMissingScripts>("Scene Cleaner");
}
private void OnGUI()
{
if (GUILayout.Button("清理当前场景所有丢失脚本"))
{
CleanSceneScripts();
}
}
private static void CleanSceneScripts()
{
// 获取场景内所有物体(含未激活)
GameObject[] allObjects = FindObjectsOfType<GameObject>(true);
int removedCount = 0;
foreach (GameObject obj in allObjects)
{
// 获取所有组件
Component[] components = obj.GetComponents<Component>();
// 从后往前遍历避免索引错乱
for (int i = components.Length - 1; i >= 0; i--)
{
if (components[i] == null)
{
// 使用Unity API安全移除
GameObjectUtility.RemoveMonoBehavioursWithMissingScript(obj);
removedCount++;
}
}
}
Debug.Log($"清理完成!共移除 {removedCount} 个丢失脚本组件");
AssetDatabase.SaveAssets(); // 确保场景保存
}
}
直接复制到脚本里,然后点击Tools/Clear Scene Missing Scripts,运行就行!