1.编辑器扩展有什么内容?
可以自定义一些类、按钮、窗口等方便完成一些重复性工作,方便快速的制作游戏。编辑器扩展内容只会在游戏编辑模式下运行,当游戏运行时这些内容不会运行。新建Editor文件夹,将这扩展内容代码放在改文件夹下。
2.如何在菜单栏中添加菜单项按钮
添加脚本,在一个静态方法前添加[MenuItem("按钮名称1/按钮名称2")]
例如添加一个打印hello的按钮如下
using UnityEngine;
using UnityEditor; public class Tools
{
[MenuItem("tools/test1")]
static void Test()
{
Debug.Log("hello");
}
}
3.如何给按钮分类
通过设置优先级来分类
例如设置一个按钮的优先级为2,[Menultem("windows/my tool",false,2)].
当两个按钮的优先级相差不超过10时,将会被分到一组。
4.Aset Store下载文件路径
C:\Users\Administrator\AppData\Roaming\Unity\Asset Store-5.x\Unity Technologies\Unity EssentialsAsset Packs
5.如何给组件的右键菜单添加按钮
使用[MenuItem("CONTEXT/组件名/按钮名")]
6.如何操作组件修改属性
使用MenuCommand 传递将要操作的组件
例如
[MenuItem("CONTEXT/组件名/按钮名")]
static void Test(MenuCommand cmd) //cmd即为要操作的组件
{
Rigidbody rgb = cmd.context as Rigidbody; //.context 是一个object类型,此处为转换类型
rgb.mass = 0;
Debug.Log("hello");
}
7.如何获取选中的游戏物体
使用Selection.activeGameObject获取当前选中的第一个游戏物体
Selection.objects获取所有选中的的游戏物体,返回值是一个object数组
8.如何把删除操作放到操作记录里(当代码执行Object.Destory()操作时不可撤销)
使用Undo.Destory()操作可撤销
9.如何给菜单项添加快捷键
[MenuItem("按钮名称1/按钮名称2 空格字母")]
[MenuItem("按钮名称1/按钮名称2 _s")]
[MenuItem("按钮名称1/按钮名称2 %s")]//%代表ctrl,#代表shift,&代表alt
10.如何设置菜单项按钮是否启用
为该方法设置一个验证方法,该验证方法是一个bool类型,且设置MenuItem()方法的第二个参数为true
[MenuItem("GameObject/my delete", true, 11)]
static bool MydeleteIs()
{
if (Selection.objects.Length < 1)
return false;
else
return true;
}
[MenuItem("GameObject/my delete", false, 11)]
static void Mydelete()
{
foreach(Object o in Selection.objects)
{
//GameObject.DestroyImmediate(o);
Undo.DestroyObjectImmediate(o);
}
}
11.如何在游戏脚本中直接添加外显示菜单项
对于整个脚本组件的菜单项而言,直接在方法名上添加代码[ContextMenu("按钮名")]
对于脚本中某个属性而言,在属性上方添加[ContextMenuItem("按钮名","方法名")],同时在脚本中添加相应的方法。
且并不要求该方法为静态方法。
这两个特性都是存在于Unity.Engine命名空间下的
12.如何创建对话框
首先创建一个继承自ScriptableWizard的类,然后添加一个菜单项,使用ScriptableWizard.DisplayWizard<类名>("对话框名称")显示该对话框即可。
13.如何使用对话框修改所选中的游戏物体的组件的属性
在继承了ScriptableWizard的类中,重写方法OnWizardCreate()方法,该方法是该类中的默认方法,且默认为空,点击对话框中的Create按钮将会执行该方法, 我们在该方法中通过Selection.gameobjects获取游戏物体,通过getCommpont<组件名>()来得到游戏物体的组件,从而修改组件的属性。同时防止不能撤销操作,添加代码Undo.Recoderobject(对象名,"该条记录名")
14.如何在提示框中显示提示信息
1)提示框中两个默认属性helpString和errorString分别代表帮助信息和错误信息,可以直接赋值。
可以通过OnWizardUpdate()//当提示框被加载或者提示框中属性发生改变时运行该方法
和OnSelectionChange()//当选中物体发生改变时运行该方法
2)使用ShowNotiFication(new GUIContent("提示信息"));
15.对话框的按钮及触发
ScriptableWizard.DisplayWizard<类名>("对话框名称","按钮1","按钮2")
点击按钮将会触发OnWizardCreate()方法,点击按钮2将会触发OnWizardOtherButton()方法
16.编辑模式下如何保存数据
使用EidtorProfs.SetInt("key","Vaule")来保存每次编辑的值,
在Enable()方法中,给属性重新赋值
EidtorProfs.GetInt("key","Vaule")
17.如何创建一个进度条
EditorUtility.DisplayProgressBar("Title","提示信息",(float)进度条进度)
18.如何创建一个窗口
首先创建一个继承自EidtorWindow的类,然后定义一个菜单项,在方法内使用如下代码显示窗口
public class MyWindow : EditorWindow
{
[MenuItem("Window/my window")]
static void Mywindow()
{
MyWindow my = EditorWindow.GetWindow<MyWindow>(); //获取该窗口
my.Show();//将该窗口显示出来
}
string name = "";
private void OnGUI()//在OnGUI中绘制改窗口内容
{
EditorGUILayout.LabelField("这是一个窗口");
name = GUILayout.TextField(name);
if(GUILayout.Button("创建"))
{
GameObject game = new GameObject(name);
Undo.RegisterCreatedObjectUndo(game,"hello");//防止不能撤销操作
}
}}