当我们需要在UE4 C++工程中添加一个文件时,大致有两种途径:一是通过Editor中的Add C++ class来添加,二是在Source文件下新建文件后,生成工程文件以实现添加文件。实际工作过程中,存在大量需要在VS中直接添加文件的情景,那么上述过程就比较繁琐了。所以尝试着写了一个简单的插件来简化这个过程。
功能简介
界面入口
如图红框所示,插件在Menu和Toolbar区域各有调用方式。
Regenerate Project Files
这个实际上和.uproject文件上右键generate visual studio project files是一样的功能。
Open Add File Dialog
这个就是文章开头展示的主要功能。右边的TreeView会自动列举工程中模块的Source文件下的目录结构,这里的模块包括插件。
- 选择所要添加文件的目录
- 输入合法的文件名,这里的文件名基本按照UE4 Editor的类名一样的规则来限定。不需要也不能写后缀名
- 可以选择添加.h或者.cpp或者它们的组合
- 文件名不合法会有相关提示
- 当文件已经存在时会提示存在的文件。
注意事项
当前的插件只在VS2017 community版本上测试过。
FAQ
为什么不直接通过右键菜单来直接Add New Item呢?
很遗憾,由于UE4工程需要依赖UE4VersionSelector.exe(uproject启动程序)来生成VS工程文件(.vcxproj),这些工程文件存在于intermediate\ProjectFiles目录下),属于临时文件。而我们的代码实际上放在source目录下,那么Add New Item只会在VS工程文件所在目录添加文件,这并非我们想要的。同理,我开始准备的Item Template扩展也是不符合要求的。总之我们不能绕过需要用到UE4VersionSelector.exe来重新生成工程文件的这个工程。
能够做到像UE4 Editor中Add C++ Class那样自动生成部分代码吗?
理论上是可行的,但是由于UE4 Eidtor中列举那些类是基于反射机制来的,而IDE中无法获得那些类的信息。因此必须外部枚举出各种类的相关数据,以及做好模板代码的映射关系。这就引来一个问题,当UE4引擎版本迭代后,写法就有可能变化,那么要维护各个版本的模板是不现实的。所以暂时只提供了简单的添加文件的功能。
VS插件编写心得
- VS插件编写还是很方便的,主要是和UE4插件一样,有非常稳定的框架作为支持,所以编写起来非常简单很方便。
- C#版的VSIX工程不能添加WPF window类是由于工程类型不对,解决方案是更改工程类型,需要手动在工程文件中添加WPF的ProjectType的Guid。
- 插件重复装的时候我遇到了一个小bug,就是toolbar等的icon异常消失。解决方案是删掉VS Extension目录下的ImageLibrary,即清除错误的图片缓存。
- UE4 slate和WPF的部分设计有点奇妙的联系哦。
工程链接
https://github.com/ArcEcho/UE4ProjectHelper
插件下载链接在release中。
The end
虽然这个插件的功能很简陋的,不过通过制作这个插件让我大致了解VS插件开发的过程。有时间我会继续丰富和改进这个插件的。