1. 程式人生 > >Unity 編輯器擴充套件

Unity 編輯器擴充套件

 Unity編輯器擴充套件

1 在工程目錄下新建 Editor 資料夾

Editor資料夾內的資源都不會被打包出去(包括PC 移動端等 只會在unity的編輯器模式執行)

  //正常的新增選單欄

    [MenuItem("Tools/test")]

    static void Test()

    {

        Debug.Log("test");

}

如果要新增 選單欄的分割線

   [MenuItem("Tools/test1", false, 1)]

    static void Test1()

    {

        Debug.Log("test1");

    }

    [MenuItem("Tools/test2", false, 12)]

    static void Test2()

    {

        Debug.Log("test2");

    }

    [MenuItem("Tools/test3",false ,0),]

    static void Test3()

    {

        Debug.Log("test3");

}

第三個引數 priority  是1-1000  相當於層級 越小越靠上

相差大於11 就會出現 一條橫槓

要想在Gameobject 選單欄 新增子選單

 [MenuItem("GameObject/ My test",false,10)]

    static void Test()

    {

        Debug.Log("test2");

    }

2 指令碼的編輯器擴充套件

在Editor新建PlayerEditor指令碼

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

public class PlayerEditor   {

    //CONTEXT 固定寫法
    //PlayerHealth 指令碼名(元件名)
    //InitHealthAndSpeed 按鈕名稱
    [MenuItem("CONTEXT/PlayerHealth/InitHealthAndSpeed")]

  
    static void InitHealthAndSpeed()
    {
        Debug.Log("Init");
    }
	 
}

MenuCommand 用法

   //CONTEXT 固定寫法
    //PlayerHealth 指令碼名(元件)
    //InitHealthAndSpeed 按鈕名稱
    [MenuItem("CONTEXT/PlayerHealth/InitHealthAndSpeed")]

  
    static void InitHealthAndSpeed(MenuCommand menu) //MenuCommand 是當前正在操作的元件
    {
        Debug.Log(menu.context.name);
        Debug.Log("Init");
    }
	 

修改PlayerHealth中的引數

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

public class PlayerEditor   {

    //CONTEXT 固定寫法
    //PlayerHealth 指令碼名(元件)
    //InitHealthAndSpeed 按鈕名稱
    [MenuItem("CONTEXT/PlayerHealth/InitHealthAndSpeed")]

  
    static void InitHealthAndSpeed(MenuCommand menu) //MenuCommand 是當前正在操作的元件
    {
        Debug.Log(menu.context.name); 
        Debug.Log("Init");
        PlayerHealth ph = (PlayerHealth)menu.context;
        ph.name = "haha";
    }
	 
}

cube的名字就變成了haha

3 清空rigidbody元件

編寫程式碼

 [MenuItem("CONTEXT/Rigidbody/Clear")]
    static void ClearMassAdnGravity(MenuCommand cmd)
    {
        Rigidbody rigidbody = (Rigidbody)cmd.context;
        rigidbody.mass = 0;
        rigidbody.useGravity = false;
    }

4 刪除 所選擇的 gameobject【】

  [MenuItem("Tools/test2", false, 12)]
    static void Test2()
    {
        Debug.Log(Selection.activeObject.name);//是我們選擇的第一個遊戲物體
    }

Selection 是一個靜態的選擇類

    [MenuItem("Tools/test2", false, 12)]
    static void Test2()
    {
       // Debug.Log(Selection.activeObject.name);
        foreach (GameObject item in Selection.gameObjects)
        {
            Debug.Log(  item.name);
            Undo.DestroyObjectImmediate(item); //(能用 Ctrl+z 來撤銷})))
            // GameObject.DestroyImmediate(item);  
        }

    }

5 新增快捷鍵

    //%=ctrl # =shift &=alt
    [MenuItem("Tools/test2  %q", false, 12)]
    static void Test2()
    {
       // Debug.Log(Selection.activeObject.name);
        foreach (GameObject item in Selection.gameObjects)
        {
            Debug.Log(  item.name);
            Undo.DestroyObjectImmediate(item);
            // GameObject.DestroyImmediate(item);  
        }

    }
    //%=ctrl # =shift &=alt
    [MenuItem("Tools/test3 _t" ,false ,0),]  //快捷鍵為T
    static void Test3()
    {
        Debug.Log("test3");
    }

只有選擇的有物體的時候才能被點選


    [MenuItem("GameObject/ My delete", true, 11)]
    static bool MyDeleteValidate()
    {
        if (Selection.gameObjects.Length>0)
        {
            return true;
        }
        else
        {
            return false;
        }
    }

    [MenuItem("GameObject/ My delete", false, 11)]
    static void Test3()
    {
        Debug.Log("test3");
    }

另一種方法

屬性也有一種

6 如何建立對話方塊

在Editor下建立EnemyChange 指令碼 整合至ScriptabkeWizard

using UnityEditor;

public class EnemyChange : ScriptableWizard {

    public int hp = 10;

	 
}

在Tools下新建方法

   [MenuItem("Tools/CreateWuzard")]
    static void CreateWuzard()
    {
        ScriptableWizard.DisplayWizard<EnemyChange>("統一修改敵人");
    }

可以吧兩個方法整合到一個方法裡

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

public class EnemyChange : ScriptableWizard {

    public int hp = 10;

    [MenuItem("Tools/CreateWuzard")]
    static void CreateWuzard()
    {
        ScriptableWizard.DisplayWizard<EnemyChange>("統一修改敵人","ChangeValue" );
    }
    //檢測 Create按鈕的點選
    public void OnWizardCreate()
    {

     GameObject[] games =     Selection.gameObjects;
        foreach (GameObject item in games)
        {
            item.GetComponent<PlayerHealth>().hp += hp;
        }


        Debug.Log("click");
    }

}

選擇多個一起修改變數

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

public class EnemyChange : ScriptableWizard {

    public int hp = 10;

    [MenuItem("Tools/CreateWuzard")]
    static void CreateWuzard()
    {
        ScriptableWizard.DisplayWizard<EnemyChange>("統一修改敵人","ChangeValue" ,"Other Button");
    }
    //檢測 Create按鈕的點選
    public void OnWizardCreate()
    {

     GameObject[] games =     Selection.gameObjects;
        foreach (GameObject item in games)
        {
            PlayerHealth playerHealth = item.GetComponent<PlayerHealth>();
            Undo.RecordObject(playerHealth, "change"); //更改之前摁下快門 可以撤銷 ctrl+z
            playerHealth. hp += hp; 
        } 
 ShowNotification(new GUIContent(games.Length+ "個遊戲物體的值被修改了"));
        Debug.Log("click");
    }
void OnWizardOtherButton()
{
//這個按鈕方法不會關閉 小視窗
}
void OnWizardUpdate()//當對話方塊彈出 和修改了欄位的值的時候呼叫
{
    errorString ="";
    helpString="";
    if(Selection.gameObjects.lenth>0){
    helpString+"您當前選擇了"+Selection.gameObjects.Lenght+"個敵人";
}
    else{
        errorString ="請至少選擇一個敵人"; //errorString  資訊報錯

         Debug.Log("update");
    }

void OnSelectionChange(){
OnWizardUpdate();
}


}

相關推薦

Unity 編輯擴充套件總結 一:編輯開發入門

編輯器擴充套件總結 工欲善其事必先利其器 引言: 在專案開發中,編輯器擴充套件為開發者提供了開發自定義工具的功能,讓開發者更加便利地使用編輯器開發專案。近期小生一直在學習編輯器擴充套件的知識,發現網路上關於編輯器知識點的部落格較為零散且混亂。當然,有一些大佬已經總結的很

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

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

unity編輯擴充套件#1 自定義視窗、面板、和屬性

擼一遍unity官方文件的給的三個案例:https://docs.unity3d.com/2017.4/Documentation/Manual/editor-EditorWindows.html 自定義視窗 首先,要注意和編輯器相關的指令碼都應該把放到Editor資料夾裡,可以有多個E

Unity編輯擴充套件:如何把asset 格式的資源轉成png

Assets Store 上提供了大量的優秀素材給開發者使用,包括模型貼圖UI音樂等等。但是一些上傳者可能出於特殊原因,上傳的素材格式是unity內建的.asset 格式,這樣的格式對於直接拿來在unity中使用的開發者當然沒有影響,但是遇到素材本身不是完全符合需求,需要做一些修

Unity編輯擴充套件:如何把圖集(Atlas)拆分成單個圖片

遊戲開發中可能會用到商店下載的圖集,但是如果只是用到一部分,卻把整個圖集打包到專案則明顯是不划算的。可以讓美術同事單獨把需要的圖片切出來,但是圖源比較多的話也是一個不小的工作。既然能夠拿到切好的圖集資料,是不是可以通過程式碼自動生成切好的小圖呢,答案當然是肯定的。這裡提供一個小工具,操作

Unity編輯擴充套件

(我們自己寫的指令碼放在 Editor檔案裡(Editor 自己建立 跟建立Scenes檔案一樣))1 增加簡單選單欄(第一排選單欄)(我們使用靜態方法便於呼叫     不用靜態方法   我們Unity不能顯示出來)public Class  Tools  {   [Menu

unity編輯 擴充套件之 快捷鍵寫法與意義

 using UnityEngine; using System.Collections; // using UnityEditor;<span style="white-space:pre"&

Unity編輯擴充套件-選單項

Unity編輯器允許你去新增像內建選單一樣外觀和行為的自定義選單。自定義選單對於那些經常使用的功能提供一種能從編輯器直接訪問的便捷方式。在這一課程中我將對每個描述的主題提供真實的使用示例,用於說明在unity中的選單項是如何建立和使用的。 新增選單項 為了要在頂層工具

Unity編輯擴充套件學習筆記(一)——新增選單選項

以前一直沒用到編輯器擴充套件這一塊,上一次用還是當初在培訓機構老師教編寫打包工具的時候,那時候剛接觸unity聽不大懂也不知道幹啥用。轉眼就過去了好久。 最近遇到一些情況,有時候需要修改多個GameObject身上的屬性,有時候需要按照規律建立多個GameObject,這些

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

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

Unity 編輯擴充套件

 Unity編輯器擴充套件 1 在工程目錄下新建 Editor 資料夾 Editor資料夾內的資源都不會被打包出去(包括PC 移動端等 只會在unity的編輯器模式執行)   //正常的新增選單欄     [MenuItem("Tools/test")]  

Unity 編輯擴充套件,讓開發更加快捷

      在unity開發中經常會對資源或者指令碼進行批量處理,開發自己的工具可以加快處理的速度。當然有的地方必須要用到編輯器類,例如資源打包的時候需要觸發,這時候就用到了。 1.MeuItam函式的使用,如下;當編輯器沒有你自定義的根選項時編輯器會新建一個選項,例如Too

Unity 編輯擴充套件教程

來自:candycat1992 http://blog.csdn.net/candycat1992/article/details/52067975 寫在前面 Unity最強大的地方之一是它擴充套件性非常強的編輯器。Unite Europe 20

Unity編輯擴充套件簡介】儲存資料

unity編輯器中有三種方式可以儲存資料。 EditorPrefs EditorPrefs可以在PC中儲存共享資料,即不受制於專案地儲存資訊 影響範圍 儲存的值會影響每一個大版本的Unity編輯器 以前儲存在Unity4.x的值只能在Unity 4

Unity編輯擴充套件(音效控制面板,路徑增刪)

using UnityEngine;using UnityEditor;using System.Collections.Generic;using System.Text;using System.IO;public class MusicWindowEditor : Ed

unity-編輯擴充套件

unity編輯器擴充套件很方便,可以省掉很多製作其他工具的時間(比如技能編輯器,特效編輯器等,都是資料結構的匯入匯出) 可以直接在 Scene 、Inspector 或者新建一個 Window 中編輯 1、Inspector

Unity - 編輯擴充套件

# 前言 對於Unity編輯器的擴充套件方法眾多,本文從最常用的一些方法入手,例如Inspector指令碼欄的擴充套件、頂選單欄的擴充套件等,圖文並茂闡述其完整用法。 本文大部分內容整理自 [獨立遊戲開發 - indienova](https://indienova.com/u/dev) 所著的 **Uni

unity編輯擴充套件學習

擴充套件編輯器實際上就是在unity選單欄中新增一些按鈕,可以一鍵執行一些重複性的工作。 一.新增按鈕 1.簡單使用MenuItem特性 using UnityEngine; using UnityEditor; public class Tools { [MenuItem("Tools/test

unity 編輯 ---獲取unity編輯中的所有視窗,並開啟顯示,以備後面編輯擴充套件

獲取原理:unity 所有視窗介面都繼承自編輯器UnityEditor程式集下的EditorWindow。而所有的編輯器視窗都在UnityEditor程式集裡定義,所以,我們通過反射獲取UnityEditor程式集獲取所有視窗就可以了。 直接上程式碼: using System; using

Unity編輯——Inspector 面板擴充套件

目錄 將EditorGUI 擴充套件在 Inspector 面板上 EditorWindows 視窗 EditorWindows 下拉選單 預覽視窗 獲取預覽資訊 將EditorGUI 擴充套件在 Inspector 面板上 ●  Ed