UnrealCLR是一个插件,它使用公共语言运行库将.NET核心主机本地集成到虚幻引擎中,以便通过用户驱动的蓝图管道直接执行托管代码,从而使用具有引擎API的.NET工具的全部功能来构建游戏逻辑。该项目的目标是稳定性、性能和可维护性。
从惯用的C#编写的托管代码中不断发展访问引擎API的框架。
支持.NET工具,包括硬件加速的数学运算,并透明地重新映射到引擎的向量类型。
支持用于调试和分析的.NET工具,如JetBrains产品线、dnSpy调试器等。
完全独立于程序集的编译管道,并支持NuGet包、分析器和生成器。
新建或使用现有的虚幻引擎C++或BluePrints项目。克隆存储库或从发布部分下载所需的版本。导航到安装文件夹,然后运行DotNet Run命令。按照安装说明进行操作。在安装过程完成后打开项目。
要升级插件,请重新运行安装过程。使用更新的框架重新编译自定义代码。
新建或使用现有的虚幻引擎C++或BluePrints项目。克隆存储库或从发布部分下载所需的版本。将Source/Native文件夹的内容复制到%Project%/Plugins/UnrealCLR目录。通过运行以下命令,从源/托管/运行时文件夹编译托管运行时:DotNet Publish--Configuration Release--framework netcoreapp3.1--Output";%Project%/Plugins/UnrealCLR/Managed";.。重新启动虚幻引擎,打开项目,然后构建插件。
要快速开始测试,请在虚幻引擎中打开包含该插件的项目,将存储库内容中的所有文件夹复制到%Project%/Content目录,然后等待它们加载到内容浏览器中。通过运行以下命令从Source/Managed/Tests文件夹编译托管程序集:
要升级,请从项目中删除插件文件夹,然后重复编译部分中的所有步骤。使用更新的框架重新编译自定义代码。
插件在启动时自动加载。要确保它已初始化,请从Windows->开发人员工具-&>输出日志中打开控制台窗口,使用搜索输入查找UnrealCLR日志。
在编辑器中打开带有测试的场景并进入播放模式。要切换测试,请导航到BluePrints->;Open Level Blueprint,选择Test Systems枚举,然后在右侧面板上更改默认值。
UnrealCLR被设计为具有灵活性和可扩展性。该插件透明地管理运行时的核心功能,绑定和缓存托管环境的引擎API。程序员可以完全控制通过蓝图管道的执行流,这些管道允许用托管逻辑动态编织引擎及其对象的本机事件。在脚本的生命周期后面没有隐藏的状态或模糊的执行顺序。
在运行时,UnrealCLR将托管程序集加载到缓存的独立上下文中。它允许在从内存中卸载程序集后动态替换它们,因此程序员无需重新启动编辑器即可使用代码进行持续开发。编译管道完全由开发人员决定,它可以以任何理想的方式组织,没有任何限制,并且完全支持NuGet包。
插件和框架一直在发展,以尽可能多地利用虚幻引擎的能力。拥有功能丰富的API至关重要。该系统在创建时考虑到了高性能,但没有考虑到交易安全。绝大多数代码都是手工编写和验证的,以防止运行时出现任何意外行为,并确保稳定性。
使用您喜欢的IDE和.NET核心工具,它们可以像附加到常规.NET应用程序一样附加到引擎进程中进行评测和调试。它非常方便,开箱即用,不需要任何外部努力。分析性能,监控CPU使用情况和内存消耗,调试执行,完全控制代码。探索新的可能性,立即扩展您的工具集。
运行库将所有未处理的异常重定向到引擎的日志文件和屏幕消息,但是,强烈建议使用try/catch块覆盖自定义处理程序的重定向。有必要附加一个调试器,以便在编辑器或独立编辑器中正确跟踪异常。
虚幻引擎以及.NET运行时利用垃圾回收器进行内存管理。无论对象是如何创建和释放的:使用C++、C#还是蓝图,该框架的设计都要考虑一致性,以防止崩溃并对程序员透明地验证内存。
该插件独立于用户程序集的编译例程。它根据用户驱动的蓝图管道从%Project%/Managed文件夹加载程序集,并在进入/退出播放模式后在运行时解析依赖项。带有引擎API的插件框架被自动识别并作为依赖项加载。
该框架复制了具有完全互操作性支持的引擎的类层次结构。任何外部C++代码、蓝图和插件都可以通过引擎API与UnrealCLR兼容和扩展。