发布于
Unity插件开发日志 01
Unity插件
这里说的插件不是官方文档脚本部分里的那个插件,而是我们开发游戏时用于扩展编辑器功能的插件。很多时候我们会发现Unity并不自带某些我们需要的功能,这时我们需要去资源商店或其他地方找别人写好的插件安装,来让自己的Unity得到这些本来没有的功能。今天呢我们就来自己写一个Unity插件吧。
写什么插件
关于写什么插件,我思来想去最后想到了,我们来写一个控制台插件,我玩过的很多游戏都有控制台,但是Unity并不自带类似的东西,游戏在发行后我们没有办法显式地即时控制。
插件结构
首先我们需要为自己的插件定一个结构,比如这样:
ConsolePlugin
|- Scripts
|- |- XXX.cs
|- UI
|- |- XXX.cs
|- Utils
|- |- XXX.cs
|- ConsolePlugin.cs
其中Scripts目录下的是这个插件的主要逻辑代码,UI则是UI方面的代码和资产,Utils则是一些适合分离出来复用的模块,最后的ConsolePlugin.cs是插件与Unity对接的一个接口。确定了目录结构,我们现在就可以开始写插件了。
编写 ConsolePlugin.cs
这个与Unity对接的脚本我们肯定是要最先写好的,我们在这个脚本中应该包含给编辑器使用的UI和逻辑,UI我们会用到IMGUI。
首先我们需要引入Unity编辑器,using UnityEditor;,然后我们先创建插件专属的菜单栏。只需要定义一个static void的函数,在其前面带上[MenuItem]属性即可,比如下面这个:
[MenuItem("Console/Toggle")]
public static void ConsoleToggle()
{
Debug.Log("Console toggled");
}
保存编译后你会发现你Unity的菜单栏多出了一项,里面也有我们定义的子项。
缺失图片:ConsoleToggle.png
点击它我们也会看到编辑器的控制台输出了我们定义的文本。
缺失图片:ConsoleToggleResult.png
MenuItem这个特性的参数还可以定义选项卡的打开方式,如下:
//_i:表示没有组合键,直接按住键盘"i"使用
[MenuItem("Console/Inspector _i")]
public static void ConsoleInspector()
{
Debug.Log("Opening Console Inspector");
}
//#d:表示按住 Shift + d 使用
[MenuItem("Console/Debug #d")]
public static void ConsoleDebug()
{
Debug.Log("Starting Console Debug mode");
}
//%w:表示按住 Ctrl + w 使用
[MenuItem("Console/Window %w")]
public static void ConsoleWindow()
{
Debug.Log("Opening Console window");
}
//&a:表示按住 Alt + a 使用
[MenuItem("Console/About &a")]
public static void ConsoleAbout()
{
Debug.Log("Show plugin developer's information");
}
效果如图:
缺失图片:ConsoleMenu.png
编写 UI/Editor/ConsoleEditorWindow.cs
接下来我们编写编辑器这边的窗口。
首先我们还是需要引用UnityEditor,然后我们需要将类的基类改成EditorWindow,也就是class的声明变成:public class ConsoleEditorWindow : EditorWindow