Unity编辑器脚本

  1. 1.给选中物体添加碰撞盒

这个是给子物体添加碰撞盒 (根据需求可以自己修改)  脚本放在Editor文件夹下   需要手动选择你需要添加碰撞盒的物体

using System.Collections;
using System.Collections.Generic;
using UnityEditor;
using UnityEngine;

public class AddBox 
{
    [MenuItem("Tools/添加碰撞盒")]
    private static void SelectionAnchor()
    {
        GameObject[] objs = Selection.gameObjects;
        for (int i = 0; i < objs.Length; i++)
        {
            if (!objs[i].transform.GetChild(0).gameObject.GetComponent<BoxCollider>())
            {
                objs[i].transform.GetChild(0).gameObject.AddComponent<BoxCollider>();
            }
           
        }
    }
}

 

 1.1   只需要选择模型的父物体就好了(tag升级版) 需要设置子物体的tag值  目的是给子物体的某一个子物体添加碰撞盒(孙物体)

using System.Collections;
using System.Collections.Generic;
using UnityEditor;
using UnityEditor.SceneManagement;
using UnityEngine;

public class AddBox 
{
    [MenuItem("Tools/一键添加碰撞盒")]
    private static void SelectionAnchor()
    {
        if (Selection.activeObject )
        {
            AddCollider((GameObject)Selection.activeObject);
        }
      
    }
    public static void AddCollider(GameObject obj)
    {
        if (obj.transform.childCount >0)
        {
            for (int i = 0; i < obj.transform.childCount; i++)
            {
                Transform child = obj.transform.GetChild(i);
                if (child.CompareTag ("JG"))
                {
                    child.GetChild (0).gameObject.AddComponent<MeshCollider>();
                }

                AddCollider(child.gameObject);
            }
        }
    }

}
升级版添加

 

 1.2  只需要选择模型的父物体就好了(究极版)  无论多少层级都能加上去

 

using System.Collections;
using System.Collections.Generic;
using UnityEditor;
using UnityEditor.SceneManagement;
using UnityEngine;

public class AddBox
{
    [MenuItem("Tools/一键添加所有碰撞盒")]
    private static void SelectionAnchor()
    {
        if (Selection.activeObject)
        {
            AddCollider((GameObject)Selection.activeObject);
        }

    }
    public static void AddCollider(GameObject obj)
    {
        if (obj.transform.childCount > 0)
        {
            for (int i = 0; i < obj.transform.childCount; i++)
            {
                Transform child = obj.transform.GetChild(i);
                if (child.GetComponent <MeshRenderer>())
                {
                    child.gameObject.AddComponent<MeshCollider>();
                }
                    
                

                AddCollider(child.gameObject);
            }
        }
    }

}

 

 

 

 

 

 2.删除所有碰撞盒(选中父物体就好了)直接一键删除所有碰撞盒  脚本放在Editor文件夹下  记得把注释解开,忘记解了

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEditor;
using UnityEngine;

public class Destory_Box :EditorWindow
{
    [MenuItem("Tools/工具:一键清理所有Collider碰撞盒")]
    public static void ClearColiderByChild()
    {
        if (Selection.activeObject)
        {
            ClearMeshColiderByChild((GameObject)Selection.activeObject);
        }
    }
    public static void ClearMeshColiderByChild(GameObject obj)
    {
        //1.子物体有Mesh
        if (obj.transform.childCount > 0)
        {
            for (int i = 0; i < obj.transform.childCount; i++)
            {
                GameObject child = obj.transform.GetChild(i).gameObject;
                //MeshCollider meshCollider = child.GetComponent<MeshCollider>();
                //if (meshCollider != null)
                //{
                //    DestroyImmediate(meshCollider);
                //}
                BoxCollider boxCollider = child.GetComponent<BoxCollider>();
                if (boxCollider != null)
                {
                    //DestroyImmediate(boxCollider);
                    Debug.Log(boxCollider.name);
                }
                ClearMeshColiderByChild(child);
            }
        }
    }
}

 

二 .unity一键删除MissingScript无效脚本 

using UnityEditor;
using UnityEngine;

public class DestoryMissingScript
{
    [MenuItem("Tools/删除选中物体无效脚本Missing")]
    private static void DestoryAnchor()
    {
        if (Selection.activeObject)
        {
            DestoryMissing((GameObject)Selection.activeObject);
        }
    }
    public static void DestoryMissing(GameObject obj_)
    {
        if (obj_ .transform.childCount >0)
        {
            for (int i = 0; i < obj_.transform.childCount; i++)
            {
                Transform child = obj_.transform.GetChild(i);
                GameObjectUtility.RemoveMonoBehavioursWithMissingScript(child.gameObject);
                DestoryMissing(child.gameObject);
            }
        }
           
        
    }
}

 三.删除物体不需要的字节

using System.Collections;
using System.Collections.Generic;
using UnityEditor;
using UnityEngine;

public class TiHuanName
{
    public static string nam = "摄像头点位_2号楼";
    [MenuItem("Tools/将物体前几位名称删除")]
    private static void RemoveCharacters()
    {

        GameObject selectedObjects = Selection.activeGameObject;


        for (int i = 0; i < selectedObjects.transform.childCount; i++)
        {
            Transform obj = selectedObjects.transform.GetChild (i);
            string originalName = obj.transform.name;

            if (originalName.StartsWith (nam))
            {
                //第一种
                obj .transform.name= originalName.Remove(0, 9);
                //第二种
                //obj.transform.name = originalName.Replace(nam, "");
            }
        }
    }
}

 

 

有需要会继续补充

 

posted @ 2022-05-06 16:31  剑起苍穹  阅读(491)  评论(0编辑  收藏  举报
/*鼠标点击特效*/