当前位置:   article > 正文

UnityEditor研究学习之EditorWindow

unity editorwindow 相关aip接口 博客

在unity使用过程中,其实我们都是在各个不同功能的Window下工作。

比如在Scene窗口中操作物体,在Inspector中操作物体属性,在Game视窗中观察游戏状态。

 

所以窗口是Unity的灵魂,这是唯一接口我们能够通过它来制作游戏。

 

那么,我们想自定义一个自己的窗口,那该如何呢?今天我们就来学习下EditorWindow,由于这个类在UnityEdior下,所以要using UnityEditor;

 

  1. using UnityEngine;
  2. using System.Collections;
  3. using UnityEditor;//注意要引用
  4. public class MyWindow: EditorWindow
  5. {
  6. [MenuItem("Window/MyWindow")]//在unity菜单Window下有MyWindow选项
  7. static void Init()
  8. {
  9. MyWindow myWindow = (MyWindow)EditorWindow.GetWindow(typeof(MyWindow), false, "MyWindow", true);//创建窗口
  10. myWindow.Show();//展示
  11. }
  12. }

 

这是个简单的创建窗口的代码,首先通过EditorWindow.GetWindow来取得窗口实例,然后展现,我们来看看官方的API说明。

 

GetWindow是个静态方法,有三个参数:

第一个参数是窗口类型,注意是一定要继承自EditorWindow。

第二个参数是窗口是否浮动,如果是就不能内嵌到unity其他窗口中去,如果不是就能嵌入其他窗口。(可以省略,默认为内嵌入式)

第三个参数是窗口的标题,如果为空的话就采用类的名称来当标题。(可以省略,默认类的名称)

 

可以看到第一个参数是必须的,其他参数可以省略。c#可选参数的特性。

 

回到Unity,在Window菜单下拉列表选择MyWindow,可以看到弹出自己的窗口。好开心!

 

 

当然这个窗口里面什么东西都没有,我们需要往里面添加各个功能组件,当然这个以后再慢慢详谈,貌似好像如饥似渴了!!=_=

 

接着,下面我们来学习下EditorWindow的各个属性和方法:

fousedWindow(静态变量):

注意到类型是EditorWindow,所以顾名思义这个是表示当我们聚焦到哪个窗口,那么这个静态变量就是那个窗口。其实也就是记录我们聚焦的窗口。

 

于是我做了个小实验,功能也就是聚焦哪个窗口会打印这个窗口的信息。

  1. void OnGUI()
  2. {
  3. EditorGUILayout.LabelField(EditorWindow.focusedWindow.ToString());
  4. }

 

 

 

mouseOverWindow(静态变量):

 

与fouseWindow相似,这个是鼠标悬停在哪个Window,这个静态变量就是那个窗口。

 

  1. using UnityEngine;
  2. using System.Collections;
  3. using UnityEditor;
  4. public class MyWindow: EditorWindow
  5. {
  6. string move;
  7. [MenuItem("Window/MyWindow")]//在unity菜单Window下有MyWindow选项
  8. static void Init()
  9. {
  10. MyWindow myWindow = (MyWindow)EditorWindow.GetWindow(typeof(MyWindow), false, "MyWindow", false);
  11. myWindow.Show(true);
  12. }
  13. void OnGUI()
  14. {
  15. move = EditorWindow.mouseOverWindow ? EditorWindow.mouseOverWindow.ToString() : "Nothing";
  16. EditorGUILayout.LabelField(move);
  17. }
  18. void OnInspectorUpdate()
  19. {
  20. if (EditorWindow.mouseOverWindow)
  21. EditorWindow.mouseOverWindow.Focus();//就是当鼠标移到那个窗口,这个窗口就自动聚焦
  22. this.Repaint();//重画MyWindow窗口,更新Label
  23. }
  24. }

于是我又做了个小测试,功能很简单,鼠标移动的哪个窗口,在MyWindow打印那个窗口的信息,并且自动聚焦到那个窗口。

反正我是成功了,你们可以自行测试。

 

EditorWindow.autoRepaintOnSceneChange

当这个变量为true时,如果unity编辑视窗(注意不只是scene视窗,其他窗口)只要有变动,就会重画窗口,为false就不会。

当然我们做个小测试:


 
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/100068
推荐阅读
相关标签
  

闽ICP备14008679号