Unity编辑器扩展

Unity引擎除了提供大部分通用的功能以外,还为开发者提供了编辑器的扩展开发接口,开发者可以编写编辑器脚本,打造适合自己的游戏辅助工具和定制的编辑器。

以前脚本开发中使用的一些API和组件类,都属于运行时类,Unity还提供了编辑器类用于编辑器的扩展开发,包括编辑器环境下使用的GUI类,编辑器工具类,编辑器操作类(例如拖放、撤销操作)等。

注意:编辑器扩展的代码必须放在“Editor”文件夹下,该文件夹下的代码在游戏运行过程中不会执行,只能在编辑器模式下操作使用。该文件夹的代码,以及其它任何资源,在打包的时候都不会包括进去。

 

使用MenuItem添加菜单栏按钮

默认:MenuItem("路径+按钮名")     使用默认参数,添加的按钮默认放在最下面

using UnityEditor;
using UnityEngine;

public class Tools {
    [MenuItem("Tools/test")]
    static void Test()
    {
        Debug.Log("test");
    }
}

分栏:MenuItem("路径+按钮名",false,层级)

注意:第二个参数写false,第三个参数为层级,越小的越在上面。如果需要分栏效果,那么两个按钮之间至少间隔为11

using UnityEditor;
using UnityEngine;

public class Tools {
    [MenuItem("Tools/test1",false,1)]
    static void Test1()
    {
        Debug.Log("test1");
    }

    [MenuItem("Tools/test2",false,2)]
    static void Test2()
    {
        Debug.Log("test2");
    }

    [MenuItem("Tools/test3",false,13)]
    static void Test3()
    {
        Debug.Log("test3");
    }
}

 

 

给组件的右键菜单栏添加按钮

注意:格式固定  MenuItem("CONTEXT/组件名/按钮名")

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

public class PlayerEditor {

    [MenuItem("CONTEXT/PlayerHealth/InitHealthAndSpeed")]// CONTEXT 组件名 按钮名
    static void InitHealthAndSpeed()
    {
        Debug.Log("Init");
    }
}

 

MenuCommand的使用:使用MenuCommand可以获取到当前操作的组件

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

public class PlayerEditor {

    [MenuItem("CONTEXT/PlayerHealth/InitHealthAndSpeed")]// CONTEXT 组件名 按钮名
    static void InitHealthAndSpeed(MenuCommand cmd) //MenuCommand是当前正在操作的组件
    {
        //Debug.Log(cmd.context.GetType().FullName);
        CompleteProject.PlayerHealth health = cmd.context as CompleteProject.PlayerHealth;
        health.startingHealth = 200;
        health.flashSpeed = 10;
    }
}

 

posted @ 2019-02-27 01:35  穆玄琅  阅读(363)  评论(0编辑  收藏  举报