随笔分类 - 编辑器拓展
1
关于Unity的五大视图(Project视图,Hierarchy视图,Inspector视图,Scene视图和Game视图)的拓展。
摘要:我们的Unity脚本挂在游戏对象上时,右侧会出现它的详细信息面板,这些信息是根据脚本中声明的public可序列化变量而来的。此外,也可以通过EditorGUI来对它进行绘制,让面板更具可操作性。 Inspector面板: EditorGUI和GUI的用法几乎完全一致,目前来说前者多用于编辑器开发,后
阅读全文
摘要:Unity没有提供全局自定义快捷键的拓展,不过可以利用MenuItem提供的快捷键来实现这个目的。代码如下: 此时我们定义了快捷键Command+Shift+D,使用者将需要执行的逻辑(即快捷键后的逻辑)卸载方法体内即可。效果如下: 除此以外,热键可以相互组合,其中%#d就表示Command+Shi
阅读全文
摘要:MenuItem是依托于Unity编辑器的菜单栏,换句话说就是无法设置它的位置。如果希望菜单的位置出现时更灵活的话,可以调用源生组定义菜单的方法。比如,可以在Scene视图中点击鼠标右键,此时会弹出一组源生自定义菜单。代码如下所示: 在上述代码中,首先监听鼠标右键以及获取鼠标位置,接着使用Edito
阅读全文
摘要:Unity编辑器使用的拓展菜单是MenuItem。当然,开发者也可以自由拓展,直接使用"/"符号区分开它的路径即可。系统上方自带的一排菜单也在大量使用这个功能。 覆盖系统菜单 Unity编辑器中自带了很多菜单,大多数情况下可以按照它的原有菜单路径拼合集合,例如,如果需要重写创建Text按钮的功能,可
阅读全文
摘要:Game视图输出的是最终的游戏画面,理论上是不需要拓展的,不过Unity也可以对其进行拓展。它的拓展主要分为两种:运行模式下以及非运行模式下。 游戏挂在游戏对象后,需要运行游戏才可以执行脚本的生命周期,不过非运行模式下其实也可以执行脚本,比如,Game视图在非运行模式下也可以绘制GUI。其原理就是在
阅读全文
摘要:在Scene视图和Hierarchy视图中,都可以选择游戏对象。Scene视图中因为东西很多,而且很可能大量重叠,很容易选错对象。在开发编辑器的时候,当操作某个对象时,如果不希望Scene视图中误操作别的对象,我们可以禁用选中对象的功能,代码如下: 在上述代码中,FocusType.Passive表
阅读全文
摘要:在Scene视图中,我们可以添加EditorGUI,这样可以方便地在视图中处理一些操作事件。这些UI可以无需选择游戏对象,常驻显示在Scene视图中。代码如下: 上述代码中全局监听了SceneView.onSceneGUIDelegate委托,这样可以使用GUI全局绘制元素。注意我们需要在Handl
阅读全文
摘要:拓展Scene视图: Scene视图承担着游戏“第三人称”观察的工作。Unity提供了强大的Gizmos工具API,我们可以在Scene视图中绘制立方体,网格,贴图,射线和UI等,开发者可以自由地拓展显示组件。 辅助元素: 场景在编辑过程中,通常需要一些辅助元素,这样使用者可以更高效的完成编辑工作。
阅读全文
摘要:点击组件中设置(鼠标右键),可以弹出Context菜单,我们可以在原有菜单中拓展出新的菜单栏,代码如下所示: 其中,[MenuItem("CONTEXT/Transform/New Context 1")]表示将新菜单扩展在Transform组件上。如果想拓展在别的组件上,例如摄像机组件,直接修改字
阅读全文
摘要:在Unity中,我们可以给组件设置状态,比如无法编辑的状态。以Transform组件为例,我们可以将Transform组件的原始功能禁掉。代码如下: 同样的,先使用反射获取Transform组件,然后通过GUI.enabled=false方法将Transform组件禁用掉,这样Transform组件
阅读全文
摘要:拓展继承组件 有些系统组件可能在Unity内部已经重写了绘制方法,但是外部是访问不了内部代码的,所以修改起来比较麻烦。如果我们按照前面介绍的方法拓展Transform组件的话,它的面板就会变的非常丑陋,如图所示: Unity将大量的Editor绘制方法封装在内部的DLL文件里,开发者无法调用它的方法
阅读全文
摘要:前面介绍了Hierarchy视图的拓展,接下来我们了解一下Inspector视图的拓展。 Inspector视图可以用来展示组件以及资源的详细信息面板,每个组件的面板信息是各不相同的。系统提供同大量组件通常可以满足开发需求,但是我们偶尔还是希望能够在原有的组件上去拓展,比如添加一些按钮或者添加一些逻
阅读全文
摘要:重写菜单: 前面我们已经知道了Hierarchy视图中的菜单可以在原有基础上拓展,同样的我们可以彻底抛弃它的菜单项,完全使用自己的菜单项。代码如下: 在上述代码中使用Event.current来获取当前的事件。当监听到鼠标抬起的事件后,并满足游戏对象的选中状态,开始执行自定义事件。其中,Editor
阅读全文
摘要:拓展布局 Hierarchy视图中,同样可以对布局进行拓展。 在代码中实现EditorApplication.hierarchyWindowItemOnGUI委托,就可以重写Hierarchy视图了。这里使用了GUI。Button来绘制自定义按钮,点击可以监听事件。(GHI的种类比较丰富,此外,我们
阅读全文
摘要:Heriarchy视图中出现的都是游戏对象,这些对象之间同样具有一定的关联关系。我们可以用树状结构来表示游戏对象之间复杂的父子关系。接下来会一起学习如何拓展Hierarchy视图。 拓展菜单: Heriarchy视图,也可以对Creat菜单项进行拓展。 效果如图所示:
阅读全文
摘要:监听事件 这个是拓展Project视图的最后一节,这里将会介绍一下如何借助程序来约束project视图中的资源。例如用程序来判断资源的原始位置以及将要移动的位置是否合法,从而决定是否能阻止本次移动。Unity为此提供了监听的基类。 这个类需要继承UnityEditor.AssetModificati
阅读全文
摘要:拓展布局 在方法前面添加[InitializeOnLoadMethhod]表示此方法会在C#代码每次编译完成后首先调用,监听EditorApplication.projectWindowItemOGUI委托,即可使用GUI方法来绘制自定义的UI元素(在这里我们添加了一个按钮)。此外,GUI还提供了丰
阅读全文
摘要:创建菜单 菜单条的排序方法和一种介绍的完全一样,设置MenuItem方法的第三个参数即可。代码中的GameObject.CreatPrimitive()方法用于创建Unity基础模型体。 效果如下:
阅读全文
摘要:拓展右键菜单 自定义菜单的参数需要在MenuItem方法中写入显示的菜单路径。如果菜单条比较多,可以在第三个参数处输入标识排序的整数,数值越小,它的排序就越靠前 可以使用Debu.Log()打印选择的游戏对象Selection.activeObject.name(这段代码中输出的是类名) 效果图如下
阅读全文
摘要:Unity编辑器使用的代码应该仅限于编辑模式下,也就是说正式的游戏包不应该包含这些代码。为此,Unity提供了一个规则:如果属于编辑模式下的代码,需要放在Editor文件夹下。如果属于运行时执行的代码,放在任意非Editor文件夹下即可。 其中,Editor文件夹的位置比较灵活,它可以作为多个目录的
阅读全文
1

浙公网安备 33010602011771号