//**********************************************
//文件名: DeletCompent.cs
//
//作者: ****
创建时间:2021.08.20
//
//功能描述:用于一键删除场景中的组件 改变材质等
//
//备注:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
public class DeletCompent : EditorWindow
{
[MenuItem("Tools/DeletCompent")]
static void Win()
{
EditorWindow.GetWindow<DeletCompent>(false, "小工具", true).Show();
}
// Use this for initialization
void OnGUI()
{
//GUILayout.Label("删除了" + UnityEngine.Object.FindObjectsOfType(typeof(MonoBehaviour)).Length + "个脚本");
//mScroll = GUILayout.BeginScrollView(mScroll);
if (GUILayout.Button("删除脚本"))
{
DeletScript();
}
if (GUILayout.Button("删除丢失脚本"))
{
DeletMissingScript();
}
if (GUILayout.Button("删除碰撞 刚体"))
{
DeletCollider();
}
if (GUILayout.Button("删除特效 音效"))
{
DeletCollider1();
}
if (GUILayout.Button("改变材质"))
{
ChangeMat();
}
//if (GUILayout.Button("删除相机"))
//{
// DeletCamera();
//}
//if (GUILayout.Button("删除全部组件"))
//{
// RemoveTest();
//}
}
/// <summary>
/// 删除脚本
/// </summary>
void DeletScript()
{
foreach (MonoBehaviour script in UnityEngine.Object.FindObjectsOfType(typeof(MonoBehaviour)))
{
DestroyImmediate(script);
}
}
/// <summary>
/// 删除丢失脚本
/// </summary>
void DeletMissingScript()
{
GameObject[] pAllObjects = (GameObject[])Resources.FindObjectsOfTypeAll(typeof(GameObject));
int r;
int j;
for (int i = 0; i < pAllObjects.Length; i++)
{
if (pAllObjects[i].hideFlags == HideFlags.None)//HideFlags.None 获取Hierarchy面板所有Object
{
var components = pAllObjects[i].GetComponents<Component>();
var serializedObject = new SerializedObject(pAllObjects[i]); // 将object序列化
var prop = serializedObject.FindProperty("m_Component"); //得到object的Component序列化数组
r = 0;
for (j = 0; j < components.Length; j++)
{
if (components[j] == null)
{
prop.DeleteArrayElementAtIndex(j - r);
r++;
}
}
serializedObject.ApplyModifiedProperties();
}
}
}
/// <summary>
/// 删除碰撞 刚体
/// </summary>
void DeletCollider()
{
foreach (Collider collider in UnityEngine.Object.FindObjectsOfType(typeof(Collider)))
{
DestroyImmediate(collider);
}
foreach (Rigidbody collider in UnityEngine.Object.FindObjectsOfType(typeof(Rigidbody)))
{
DestroyImmediate(collider);
}
}
/// <summary>
/// 删除特效 音效
/// </summary>
void DeletCollider1()
{
foreach (AudioBehaviour collider in UnityEngine.Object.FindObjectsOfType(typeof(AudioBehaviour)))
{
DestroyImmediate(collider);
}
foreach (ParticleSystem collider in UnityEngine.Object.FindObjectsOfType(typeof(ParticleSystem)))
{
DestroyImmediate(collider);
}
}
void ChangeMat()
{
foreach (MeshRenderer collider in UnityEngine.Object.FindObjectsOfType(typeof(MeshRenderer)))
{
collider.material = Resources.Load("Shader/Shader Forge_Visualization") as Material;
collider.sharedMaterial.SetColor("_Color", Color.blue);
}
}
/// <summary>
/// 删除相机
/// </summary>
void DeletCamera()
{
foreach (FlareLayer camera in UnityEngine.Object.FindObjectsOfType(typeof(FlareLayer)))
{
DestroyImmediate(camera);
}
foreach (Camera camera in UnityEngine.Object.FindObjectsOfType(typeof(Camera)))
{
DestroyImmediate(camera);
}
}
void RemoveTest()
{
//List<Component> comList = new List<Component>();
//GameObject[] all = Resources.FindObjectsOfTypeAll(typeof(GameObject)) as GameObject[];
//for (int i = 0; i < all.Length; i++)
//{
// var item = all[i];
// foreach (var component in item.GetComponents<Component>())
// {
// comList.Add(component);
// //Debug.Log(component.GetType());
// }
// //if (item.scene.isLoaded)
// //{
// // Debug.Log("name:" + item.name);
// //}
//}
foreach (var component in gameObject.GetComponents<Component>())
{
comList.Add(component);
Debug.Log(component.GetType());
}
//foreach (Component item in comList)
//{
// DestroyImmediate(item);
//}
foreach (Component component in UnityEngine.Object.FindObjectsOfType(typeof(Component)))
{
DestroyImmediate(component);
}
}
}
Unity编辑器扩展(一键删除脚本 丢失的脚本 collider 改变材质 删除多余组件等)
于 2021-08-25 18:22:53 首次发布