做一个自定义窗口的小记录,虽然已经做了好几次拓展unity窗口的操作了,但是每次都要要上网查查,这次自己记录一下,加深印象。
实验要求:做一个再菜单里可以呼出的自己的窗口,窗口里面可以选择文件路径,然后找出文件中包含某个关键词的文件路径并显示。
第一步:菜单呼出
这个很简单:
[MenuItem("Tools/SearchShader #Q")]
public static void Doit()
{
EditorWindow.GetWindow(typeof(HLXWnd));
Debug.LogError("search....");
}
方法前边加个[MenuItem(XX/XXXX)]就行了
后边空格 之后是快捷键按钮
#表示shift 还有什么表示ctrl(这个每次还是查一下 记不住。。。
注意方法一定要静态的static, 要不然无效,菜单栏里不会有。
第二步:创建窗体
这里关键在于继承EditorWnd这个类就好了,最简单的空白窗体就这样
public class HLXWnd : EditorWindow
{
public void OnGUI()
{
}
}
OnGUI里面填写绘制窗口的代码就行了,注意这个函数是每帧执行的。
呼出HLXWnd的方法再第一步里
EditorWindow.GetWindow(typeof(HLXWnd));
第三步:绘制窗口
接下来再窗口里实现我想要的功能了,先把最终成果贴出来,方便说明
大概就是这样👆
几个关键点:
布局嵌套:
GUILayout.BeginHorizontal();
//中间写横板布局的内容
GUILayout.EndHorizontal();
GUILayout.BeginVertical();
//中间写竖板布局的内容
GUILayout.EndVertical();
GUILayout.Space(40);
//这表示空出来40大小的位置,你当前是横板布局就向右空出来,当前是竖版布局就是向下空出来;
static Vector2 scrollPos = Vector2.zero;
scrollPos= GUILayout.BeginScrollView(scrollPos);
//这个是开启一个scrollview的空间
//scrollPos是记录当时显示再scrollview的哪个位置,
这里一定要 scrollPos= GUILayout.BeginScrollView(scrollPos);这样写,把BeginScrollView的返回值再赋给scrollPos,这样才能实时更新他的位置,不然的话就永远在一开始设定的哪个位置,造成这个scrollview你滑不动这样的现象。
GUILayout.EndScrollView();
显示文字:
static string t;
t = EditorGUILayout.TextField("keyWord", t);
//"keyword"是描述文字,t是编辑框文字,同样赋予他返回值
显示按钮
if (GUILayout.Button("open"))
{
root = EditorUtility.OpenFolderPanel("select Folder", Application.dataPath, "");
}
特别简单,我一开始还在Button()的参数里找是不是有点击的回调函数呢,后来发现他的返回值就是一个bool , 点击按钮就返回true,所以直接用if ,然后再里面写响应函数就好啦。
打开目录
就是之前写的
EditorUtility.OpenFolderPanel(“select Folder”, Application.dataPath, “”);这个函数就好啦,很方便的,这样就会把选择的文件路径返回出来,用root这个string存储进来了
大概就记录这些啦,查找关键字的代码和这个功能没啥关系,本菜鸡就不分享啦XDD