1. 程式人生 > >unity編輯器拓展四——刪除場景空Animator元件

unity編輯器拓展四——刪除場景空Animator元件

1.描述

  美術做場景的時候,工作量很大,不會去按照程式的思維,把什麼都做得很規範。

就會造成有很多空的Animator元件留在物件上,那個物件會被複制使用,就會變得更

多。我們專案我遇到的最多的一次,一個場景有600多個空的Animator元件,好恐怖,

怎麼可能對效率沒有影響 今天就寫個方法一鍵刪除場景中空的Animator元件。

2.程式碼如下:

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

public class SceneTool : EditorWindow
{
    //直接點選選單按鈕,執行程式碼
    //跟點選選單彈出面板的方式基本一致,只是在繪製面板的程式碼換成執行的方法即可
    [MenuItem("Owen/DelectAnimator")]
    static void tranPoint()
    {
        int AnimatorCount = 0;
        //建立一個List陣列
        List<GameObject> SceneRoot = new List<GameObject>();
        //得到場景所有的根節點,並返回給上面的字典
        UnityEngine.SceneManagement.SceneManager.GetActiveScene().GetRootGameObjects(SceneRoot);

        //遍歷字典
        for (int i = 0; i < SceneRoot.Count; i++)
        {
            //將SceneRoot[i]當作每個父物體 進行遍歷 得到每個根節點的所有子物體transform元件
            Transform[] m_Transform = SceneRoot[i].transform.GetComponentsInChildren<Transform>();
            //GetComponentsInChildren:得到自身 與 子物體(包含子物體中的子物體)

            //List<Transform> m_Transform = new List<Transform>();
            //foreach (Transform t in SceneRoot[i].transform)
            //{
            //    m_Transform.Add(t);
            //}
            //這種方法得到的陣列,就是隻有子物體(不包含父物體,也不包含子物體中的子物體)


            Debug.Log(m_Transform.Length);
            //遍歷每個子物體中的Animator狀況
            for (int j = 0; j < m_Transform.Length; j++)
            {

                Animator s = m_Transform[j].GetComponent<Animator>();
                if (m_Transform[j].GetComponent<Animator>())
                {
                    if (s.runtimeAnimatorController == null)
                    {
                        //編輯器只能用DestroyImmediate,不然無效或報錯
                        DestroyImmediate(s);
                        AnimatorCount++;
                    }
                }
            }
        }
        //將場景設定為dirty,為了刪除後儲存場景,這個在做編輯器的時候經常要用到
        UnityEditor.SceneManagement.EditorSceneManager.MarkSceneDirty(UnityEditor.SceneManagement.EditorSceneManager.GetActiveScene());
        Debug.Log("已經刪除了" + "" + AnimatorCount + "" +"個空Anirmator元件");
    }  
}


相關推薦

unity編輯拓展——刪除場景Animator元件

1.描述   美術做場景的時候,工作量很大,不會去按照程式的思維,把什麼都做得很規範。 就會造成有很多空的Animator元件留在物件上,那個物件會被複制使用,就會變得更 多。我們專案我遇到的最多的一次,一個場景有600多個空的Animator元件,好恐怖, 怎麼

unity編輯拓展】使用指令碼新增Prefab到場景

 有時候想自動將預製新增到場景中,但是又不想破壞預製的連結關係,這時候可以使用PrefabUtility類進行操作。 1、使用AssetDatabase.GetAssetPath獲取預製路徑 fore

Unity編輯拓展之二:ReorderableList可重新排序的列表框(複雜使用)

先看效果gif圖:  如果沒有看過Unity編輯器拓展之一:ReorderableList可重新排序的列表框(簡單使用)的,可以先看這一篇:  http://blog.csdn.net/qq_26999509/article/details/77782177 在此基

Unity編輯拓展

一.什麼是編輯器拓展 Unity是一個編輯器,編輯器就是可以進行編輯的工具,比如我們的文字Text就是一個文字編輯器,那我們的Unity其實就是用來編輯遊戲的,編輯的擴充套件就是對編輯器本身的功能進行新增。但是由於Unity是不開源的引擎,所以我們只能使用特定的功能去編輯。

unity編輯拓展之自動生成指令碼模板

    專案開發過程中,UI面板有許多,關於UI面板上面按鈕,文字是應該宣告public直接拖拽賦值還是應該定義成private一層層去find,其中利弊各有說法,以前有個老大說是find會影響執行速度,但是現在的老大又不讓直接拖拽賦值,說實話這些東西都無所謂,用哪種方式主要

Unity編輯拓展之二十一:拓展Unity模組,打造私人工具庫(二)

拓展Unity模組,打造私人工具庫(二) 前言: 上一篇,實現了基本Unity模組拓展的功能,本篇將介紹如何通過反射來實現匯入UnityPackage Gif示意圖 程式匯入UnityPackage 通過查閱UnityEditor原始碼發現

unity編輯拓展二——一鍵調整scene中物件座標朝向

1.描述   在專案中,我們遇到很多這種情況,美術製作的時候從來不管座標朝向,真正使用起來就會有各種問題。 需要美術來調整座標朝向的時候,物體數量很多,就會很麻煩,很枯燥的工作,還得耐主性子一個一個調整。   如圖,我們今天要做的是不動任何物體的情況下,一鍵控

unity編輯拓展七——指令碼建立模型

描述:     其實這個教程到處都是,我真正想做的是把模型分成N個等分,實現動態載入。但是在網上搜索了很久,也沒有搜尋 到合適的方法,要麼就是不寫清楚,捨不得把程式碼全部放出來。要麼就是自帶地形的切割,最想要的是,t4m 刷完後直 接將模型分成N分,所以只能苦逼的從

Unity編輯拓展之六:利用反射開啟Unity Preferences Window

如何利用反射開啟Unity Preferences Window Unity Preferences Window如下圖所示: 作為Unity 的引數設定視窗,這個視窗支援新增項,當然本文不介紹這個內容,本次介紹如何利用反射、以及Unity Editor

Unity編輯拓展之三:拓展Unity的Hierarchy面板

效果圖: 上圖中在Hierarchy右側繪製了Toggle,Label,以及自定義的texture和Unity原聲的Texture,知道了原理,其實這些都很簡單。。 這裡主要是使用了EditorApplication類下的HierarchyWindowI

unity編輯擴充套件#2 GUILayout、EditorGUILayout 控制元件整理

  GUILayout 裝飾類控制元件: GUILayout.FlexibleSpace(); GUILayout.Space(100);//空格,沒什麼好說的 GUILayout.Label("label"); GUILayout.Box(new GUICo

Unity 編輯擴展 場景視圖內控制對象

eight tex ons 圖標 ble enca 研究 microsoft 敵人 如果有一個敵人生成器類。當中有個屬性range用來表示敵人生成的範圍區域大小。那麽能夠用OnDrawGizmos函數來繪制它在場景視圖所代表的區域大小。便於開發調試。這個敵人生成器類,類

(轉 )Unity對Lua的編輯拓展

wid isnull view 菜單 操作 out rec 平臺 src 轉 http://blog.csdn.net/ZhangDi2017/article/details/61203505 當前版本的Unity(截至Unity5.5.x)中TextAsset類不支持後

編輯拓展九——用代碼實現unity菜單命令

中一 post body 同時 selected 使用 最大的 自動調用 ima 描述   今天給美術寫了個工具,通過一些檢查把一些有問題的物件選出來,並讓其中一個處於選中狀態, 方便美術有方向的修改。中間遇到了一個問題,有問題的物件太多,點一次工具,需要按一下F來把

unity實用技能】unity編輯工具之加載預制(Prefab)和場景(Scene)

無在unity裏做打包或者幫策劃美術做工具的時候經常會需要把Prefab拉出來或者場景打開做檢驗工作 其實這個在上一篇在ui打包的文章裏有提到,不過重點不同,上篇重點是打包,這篇的重點是把裏面的一個小知識點拉出來講一講 接下來就講講兩者分別怎麽做 一、把預制Prefab拉出來 就是像我們平時把預制拉到這個地方

Unity編輯:消控制檯(Console)

1 static MethodInfo clearMethod = null; 2 /// <summary> 3 /// 清空log資訊 4 /// </summary> 5 private static void ClearConso

Unity 編輯擴充套件 場景檢視內控制物件

using UnityEngine;using UnityEditor; [CustomEditor(typeof(EnemySpawn))]public class EnemySpawnEditor : Editor {     void OnSceneGUI()     {         EnemySp

Unity編輯開發,使用CustomPropertyDrawer實現枚舉中文顯示

常常 image list 動畫 但是 var tty tip enum         在Unity開發中,枚舉常常被用到。但是Unity自身對於枚舉值,並不能做好中文的支持。無論是Head或者Tool

Unity編輯生成可配置編輯文件

prefab tga 可編輯 edit 字段 work highlight save csharp using UnityEditor; public class PoolManagerEditor { [MenuItem("Manager/Creat Game

編輯拓展七——不實例化的情況下修改Assets下面的文件

如果 ica 文件 () pan 通過 個數 material spec 描述 1.今天接了個任務,因為公司的項目展示界面的人物與武器都用了standard與standard(specular steup),這個兩個自帶的材質球是帶霧效的,然後收到場景的影響 在ui界面