简单使用MenuItem特性

using UnityEngine;
using UnityEditor;

public class Tools
{
[MenuItem(“Tools/test”)]
static void Test()
{
Debug.Log(“test”);
}
}
复制代码

2.路径设置

在方法上添加MenuItem特性,在MenuItem的括号中传入路径字符串参数,路径中使用/进行目录分级。第3个参数priority为选项在目录中的显示顺序,这个值默认是1000。
复制代码
using UnityEngine;
using UnityEditor;

public class Tools
{
//MenuItem的第3个参数priority为当前选项在菜单栏中的显示顺序,数字越大,显示在越下面
//当相邻两个选项的priority值相差大于等于11时,系统将在这两个选项之间添加一条横线进行分组
[MenuItem(“Tools/test1”,false,2)]
static void Test1()
{
Debug.Log(“test1”);
}

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

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

}
复制代码

3.Hierarchy和Project窗口的右键菜单

Hierarchy窗口中右键的菜单实际上是一些复制粘贴等按钮和GameObject目录下第一类的按钮的组合,因此将按钮添加到GameObject菜单下第一类按钮中即可在Hierachy窗口中右键出这个按钮。

Project窗口的右键菜单实际上就是Assets目录,因此将按钮添加到Assets目录下即可在Project窗口中右键出这个按钮。

4.在组件的右键菜单中添加按钮

复制代码
using UnityEditor;
using UnityEngine;

public class PlayerEditor
{
//在组件上的右键菜单中添加按钮路径参数为“CONTEXT/需要添加按钮的组件名称/按钮目录和名称”
[MenuItem(“CONTEXT/PlayerHealth/InitHealthAndSpeed”)]
static void InitHealthAndSpeed(MenuCommand command)
{
//在按下按钮后,系统自动传递参数MenuCommand,对象的context属性的内容就是当前组件
CompleteProject.PlayerHealth health = command.context as CompleteProject.PlayerHealth;
//获取当前组件后,可以进行修改组件的变量等操作
health.startingHealth = 10000;
health.flashSpeed = 15;
}
}
复制代码

5.Selection获取选择的游戏物体

复制代码
using UnityEditor;
using UnityEngine;

public class PlayerEditor
{
[MenuItem(“Test/showInfo”)]
static void InitHealthAndSpeed()
{
Debug.Log(Selection.objects.Length);
}
}
复制代码

6.按钮快捷键

复制代码
using UnityEditor;
using UnityEngine;

public class PlayerEditor
{
//在路径名称后空格再指定快捷键,这里指定快捷键是T
//一些快捷键例子:_t ==> T
// %t ==> Ctrl+T
// #t ==> Shift+T
// &t ==> Alt+T
[MenuItem(“Test/showInfo _t”)]
static void InitHealthAndSpeed()
{
Debug.Log(Selection.objects.Length);
}
}
复制代码
7.按钮的验证方法

复制代码
using UnityEditor;
using UnityEngine;

public class PlayerEditor
{
//按钮的验证方法和按钮方法的菜单路径一致,返回值为bool值,将MenuItem的第二个参数置为true代表这是一个按钮的验证方法
//这个方法判断选中的游戏物体数,如果选中了任意游戏物体才能点击按钮;未选中游戏物体按钮将变为不可点击状态
[MenuItem(“Test/showInfo _t”,true,11)]
static bool InitHealthAndSpeedValidate()
{
if (Selection.objects.Length > 0)
return true;
else
return false;
}

//日志输出选中的游戏物体数目
[MenuItem("Test/showInfo _t",false,11)]
static void InitHealthAndSpeed()
{
    Debug.Log(Selection.objects.Length);
}

}
复制代码
8.为组件添加按钮的另一种方式

使用ContextMenu特性为组件添加按钮,注意这个特性添加在一个具体的方法上方,代表按钮触发这个方法,而这个方法必须是要添加按钮的脚本内的方法,可以理解为直接在脚本中定义按钮。

复制代码
//为脚本添加SetColor按钮,按钮触发这个方法改变脚本中flashColour的属性值
[ContextMenu(“SetColor”)]
void SetColor()
{
flashColour = Color.blue;
}
复制代码
使用ContextMenuItem特性为脚本的某个属性添加按钮,这个特性自然也就定义在需要添加按钮的属性上方,按钮触发的方法也定义在脚本中。

    //这个特性代表为startingHealth属性添加一个AddHP100按钮,在属性上右键即可看到这个按钮,这个按钮会触发AddHP这个方法
    [ContextMenuItem("AddHP100","AddHP")]
    public int startingHealth = 100;
    void AddHP()
    {
        startingHealth += 100;
    }

二.添加和使用对话框

1.简单添加对话框

首先创建一个按钮用于弹出对话框。

复制代码
using UnityEditor;
using UnityEngine;

public class PlayerEditor
{
[MenuItem(“Tools/CreateWizard”)]
static void CreateWizard()
{
//按下按钮后弹出对话框,对话框的标题为“这是对话框”,对话框的内容由ShowDialog这个脚本进行定义
ScriptableWizard.DisplayWizard(“这是对话框”);
}
}
复制代码
然后定义对话框,对话框需要继承自ScriptableWizard类。

复制代码
using UnityEditor;

public class ShowDialog : ScriptableWizard
{
public int changeHealthValue = 100;
}
复制代码
最后保存后在unity中点击按钮就可以看到对话框了。

注意:推荐将按钮的代码写在对话框的类中,结构会更加清晰,方便管理。

2.DisplayWizard方法的参数

复制代码
using UnityEditor;

public class ShowDialog : ScriptableWizard
{
[MenuItem(“Tools/CreateWizard”)]
static void CreateWizard()
{
//两个参数都是字符串,第一个参数定义对话框的标题,第二个参数定义右下角确认提交按钮的名称,默认是Create
ScriptableWizard.DisplayWizard(“这是对话框”,“Change”);
}

public int changeHealthValue = 100;

复制代码

3.在对话框确认提交后触发OnWizardCreate方法

复制代码
using UnityEditor;
using UnityEngine;

public class ShowDialog : ScriptableWizard
{
[MenuItem(“Tools/CreateWizard”)]
static void CreateWizard()
{
//两个参数都是字符串,第一个参数定义对话框的标题,第二个参数定义右下角确认提交按钮的名称,默认是Create
ScriptableWizard.DisplayWizard(“这是对话框”,“Change”);
}

public int changeHealthValue = 100;

//监测对话框确认提交按钮,对话框确认提交后触发
private void OnWizardCreate()
{
    GameObject[] gos = Selection.gameObjects;
    foreach(GameObject go in gos)
    {
        go.GetComponent<EnemyHealth>().startingHealth += changeHealthValue;
    }
}

}
复制代码
4.ScriptableWizard类中的其他Message

OnWizardUpdate方法:当打开对话框或对话框中的值发生改变时触发。

OnWizardOtherButton方法:当用户点击others按钮时触发,这个按钮可以通过DisplayWizard方法的第3个参数指定名称,others按钮不会关闭对话框。

三.使用EditorWindow类创建窗口

复制代码
using UnityEngine;
using UnityEditor;

public class ShowWindow : EditorWindow
{
[MenuItem(“Window/show mywindow”)]
static void ShowMyWindow()
{
ShowWindow window = EditorWindow.GetWindow(“MyWindow”);
window.Show();
}

private void OnGUI()
{
    GUILayout.Label("我的窗口");
    GUILayout.TextField("");
    GUILayout.Button("创建");
}

}
USB Microphone https://www.soft-voice.com/
Wooden Speakers https://www.zeshuiplatform.com/
亚马逊测评 www.yisuping.cn
深圳网站建设www.sz886.com

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值