JetBrains骑士-现在用于虚幻引擎

哈勃!

上周,在2020.1版发布之后,我们所有台式机产品都发生了另一项重大事件- 我们开放了对Rider for Unreal Engine试用版的公开访问目前,这是一个单独的产品,是我们针对Rider开发环境的一个版本,但支持C ++和Unreal Engine。 别这样!C ++开发环境。多一个?!让我们按顺序整理一下。

虚幻引擎骑士



让我们从一个小故事开始。几年前,我们在JetBrains召集了所有使用C ++工具的人,讨论了用户浏览我们提供的各种产品有多么困难。毕竟,在AppCode中有CLion,ReSharper C ++和对C ++的支持。经过几个小时的讨论,我们得出以下结论:

  • 尽管通用工具看起来很诱人,但是随着目标的扩展,集成的第三方工具数量的增加,支持的用例的增加,很难在界面的便捷性,直观性和大量机会之间找到平衡。
  • 长期以来,软件开发领域在开发语言中没有明确的界限。许多项目是多语言的。更重要的是其中使用的软件和技术的范围。

结果,我们决定在我们的C ++工具中统一用户体验,但是同意为软件开发的不同领域开发不同工具(尽管具有通用内核或通用平台)的方法是正确的。实际上,它看起来像这样:

  • CLion — C C++. , , , AI, , . , , ( CMake, Gradle Native, compilation database, Bazel, Makefiles) . , , CLion msbuild, , .
  • ReSharper C++ — , Windows, , Visual Studio. C++ C#. Visual Studio, ReSharper, C++.
  • AppCode — , iOS/macOS. C/C++ mac- .

那么,车手与它什么关系呢?与C ++相关的.NET跨平台开发环境是什么?实际上,大约30%的Rider用户是游戏工作室和游戏开发公司。这是可以理解的,因为Rider正是作为Unity的开发环境而广泛流行的。这不是骑手团队为该游戏引擎专门定制乐器的第一年。结果不仅受到Unity程序员的喜爱,也受到Unity Technologies本身的喜爱,在技术本身方面,我们与他们进行了长期而富有成果的互动。

在游戏开发领域的许多用户中,我们注意到许多工作室并没有明确的区分-仅在Unity或虚幻引擎上制作游戏。今天,他们使用一种技术,明天使用另一种技术,或者一个团队使用虚幻引擎,另一个使用Unity,甚至使用自己的自定义引擎。显然,开发人员和公司通常确实不喜欢在不同的开发环境之间“跳转”。在这里,我们决定,如果我们能够使Rider在Unity方面取得成功,那么我们可以走得更远,并使其在游戏开发领域大体上取得成功。因此,Rider的想法诞生于Game Dev的通用开发环境

虚幻引擎的车手包括什么


对于那些熟悉Rider技术的人来说,赛事的进一步发展是显而易见的。Rider由基于IntelliJ平台的前端部分和基于ReSharper的后端部分组成。所有语言支持都在后端起作用。因此,我们只是使用相同的技术将ReSharper C ++中现有的C ++和Unreal Engine支持连接到Rider。从特定的角度来说,我必须另外实现:

  • 用于在引擎版本4.22-4.24的虚幻编辑器(Rider Source Code Access)中选择Rider作为开发环境的插件从版本4.25开始,此功能将已包含在UE引擎本身中。
  • 用于Rider的UnrealLink 插件和用于Unreal Editor的RiderLink,它们与Rider中的蓝图集成在一起,通常负责Rider和Unreal Editor之间的通信。
  • 调试器

值得注意的是,现在Rider for Unreal Engine的预览版仅在Windows上可用,可以打开.sln文件,并依赖于Microsoft编译器的构建。将来,在发布时,我们将尝试扩展到所有三个平台,并实现对.uproject作为主要设计模型的支持。

基于LLDB的调试器


现在,游戏开发的重要部分正在Windows平台上进行,并且已成为Microsoft工具链的一部分。如果我们查看针对使用Microsoft Visual C ++编译器编译的代码存在哪些调试工具,我们将看到:

  1. Microsoft在其自己的工具中使用基于vsdebugeng.dll的调试工具该许可证不允许在第三方开发环境中使用这些工具。
  2. CDB WinDbg dbgeng.dll. MS . (.pdb), , , .
  3. LLVM社区中也有一些开发,以使用LLDB调试对Visual Studio工具链的支持。我们使用了它们,并且仅仅一年半的时间就编写了一个可以正常运行的调试器的第一个版本。它包括对NatVis格式的初始和原始支持(例如MS专用的漂亮打印机)。同时,Rider for Unreal Engine现在可以在Unreal Engine的项目中找到NatVis,并将其加载到调试器中。现在,我们在Visual Studio工具链的CLion中使用了相同的调试器(在这种情况下,默认情况下从版本2020.1开始启用该调试器)。

新的调试器仍然潮湿,当然,它仍然存在严重的问题和速度下降。但是我们希望将其发布。

C ++支持


我再说一遍-Rider for Unreal Engine Preview现在提供了ReSharper C ++的所有语言支持功能这包括:

  • 大约170种不同的代码检查和50多种快速修复。
  • 重构考虑了符号的所有上下文使用(重命名,更改方法签名,方法删除,添加字段/变量/ typedef,替换(内联)变量或typedef等)。
  • 代码生成(getter / setter方法,构造函数,比较运算符,代码文档模板)。
  • 用于帮助编写代码,导航,格式化以及支持命名样式,排序#include指令的动作。

产生动作

支持HLSL,C#,uproject / uplugin方言


今年,我们开始致力于为使用ReSharper C ++编写HLSL着色器提供语言支持,并且立即将其引入Rider for Unreal Engine。支持包括语法突出显示,带有文档的工具提示,参数名称和类型的工具提示,导航操作,自动完成,对虚拟文件路径的支持,甚至重构。

由于Rider for Unreal Engine基于.NET的开发环境,因此Build.cs和Target.cs文件均支持语言。

最后,在支持语言方言方面,Rider for Unreal Engine可理解.uproject / .uplugin文件的方言,并提供自动完成和文档工具选项。

uproject方言

蓝图整合


蓝图文件是二进制数据,通常在虚幻编辑器中的可视编辑器中进行编辑。这些文件中的对象是从C ++中的类继承的;它们从游戏的C ++部分重新定义了属性。在这里,Under Engine的Rider是一个独特的开发环境,它可以读取所有必要的Blueprints文件并在C ++代码编辑器中显示这些链接:

BP派生类

例如,如果您在Unreal Engine编辑器中更改属性的值并保存资产,则该值位于此处它也会在Rider中自动更新(我们已经邀请观察员来更改资产文件):

BP特性

如果不保存文件,我们希望它也能尽快运行(现在正在UnrealLink插件中进行准备)。

“查找用法”调用不仅包括C ++代码中的用法,还包括蓝图文件。双击此类用途可打开虚幻编辑器。

了解UE4的反射机制


虚幻引擎中的反射是使用特殊的宏(UCLASS,UFUNCTION,UPROPERTY等)实现的。骑士知道这样的宏的参数不仅仅是文本。 ReSharper C ++和Rider中的C ++语言解析器可以真正“理解”这些宏的含义,甚至无需启动Unreal Header Build工具(即在.gene.h文件的内容实际生成之前)。

顺便说一句,在谈到.gene.h文件时,ReSharper C ++和Rider知道在连接.generation.h文件之前,必须严格插入自动添加的缺少的#include指令。并且在重命名重构时还要考虑这些生成的文件。

回到反射机制,值得一提的是,反射说明符不仅仅是ReSharper C ++和Rider中的文本。它们有自动完成和文档提示:

反射文件

文档提示也可用于反射宏本身。

然后代码分析器检查反射宏的使用并指出与此相关的错误。例如:

  • UCLASS类必须从UObject或其任何后代类公开继承。此外,这样的父母必须恰好是一个。
  • UCLASS说明符应用于类,USTRUCT应用于结构。
  • UE4类不能在其他类中声明。
  • 垃圾收集器可以随时收集未标记为UPROPERTY的字段中存储的对象。

远程过程调用(RPC)支持导航和代码生成操作


如果从常规C ++解析器的角度考虑对远程过程的调用,那么很快就会注意到解析器的无知,即具有不同名称的多个函数(例如,后缀_Validate_Implementation可以对应于一个函数声明在ReSharper的C ++ /骑士,我们已经培养了解析器识别的RPC over符ClientServerNetMulticast在宏设置UFUNCTION从而:

  • 导航提供了实现该功能的所有必要选项。
  • 代码生成带有后缀的创建功能_Validate_Implementation或只有那些丢失:
    RPC产生
  • 代码重构“重命名和更改签名”将更新所有必要的功能,从而使您的代码保持正确的状态。

虚幻引擎4命名规则的知识


ReSharper C ++和Rider知道虚幻引擎代码中的正式命名规则开发环境在所有处理代码的操作中都会使用这些规则,例如生成getter和setter或重构变量(Introduce Variable)。最重要的是,存在不一致的UE4命名检查代码检查和相应的快速修复程序,这将导致重命名重构并重命名不符合规则的名称的所有用法。

编辑表现


我们已经为ReSharper C ++中的Unreal Engine提供了开发支持已经有一段时间了,当然,我们看到编辑器性能是主要的抱怨。由于其体系结构,Rider不受ReSharper中存在的许多性能问题的影响(部分原因是Studio对32位进程的限制,ReSharper可以在其中工作,但不仅限于此)。

此外,我们专门调整了IDE,以提高虚幻引擎的性能。我们首先为用户游戏的代码编制索引,立即包括编辑器对用户代码的所有巧妙操作。引擎代码本身的索引在此之后发生。还有一些其他管理索引的选项:

性能选项

结果,那些已经开始使用Rider for Unreal Engine的人对编辑器的性能非常满意!而且我们确信我们可以做得更好。

视频演示,并再次介绍如何访问


这些和许多其他功能可以从我们的开发律师的演示视频(英语)中看到:


要亲自尝试这些功能,只需填写一个简单的表格并收到我们的来信,其中包含指向免费试用版的许可的构建和激活的链接。去,填写,尝试,写评论!对于您的反馈,像往常一样,这里有评论,跟踪器(ReSharper C ++Rider)以及我们的支持邮件(rider-cpp-support@jetbrains.com)。

感谢您的关注!

车手
发展团队

All Articles