Unreal-如何在虚幻 5 项目中接入 UnrealLink

最近准备把个人游戏项目从ue4.27.2升级到ue5.4.3,发现UnrealLink无法正常安装了。网上查了一下官方也没有修复这个问题。求人不如求己,自己动手修复了一下这个问题,解决方案记录在此。

阅读前请注意

本文适用于:

  • Rider 版本为 2023.1
  • UnrealLink 版本 2023.1
  • 发行版虚幻

旨在解决从虚幻4升级到虚幻5项目中可能遇到的无法接入 UnrealLink 的问题。

不适用于正常接入 UnrealLink 的流程!

问题描述

首先这个问题已经被 Jetbrains 官方记录在 RIDER-99455

在试图给项目安装 2023.1 版本插件时,编译阶段会抛出错误:

Error C4855 : implicit capture of 'this' via '[=]' is deprecated in '/std:c++20'

这个问题是由于 C++20 之后,想要在 lambda 中捕获类成员和方法,必须显式捕获 this。进入虚幻 5 后,支持的 C++ 版本提升到了 C++202023.1 版本的 UnrealLinkRiderGameControl.cpp 文件中有多处 lambda 没有显式捕获 this,在安装阶段无法正常完成编译,所以 2023.1 版本的 UnrealLink 无法接入虚幻 5 项目。

JB 的研发团队真是太懒了!

解决方案

坏消息:这个问题在 Rider 整个 2023.1 都没有得到解决

好消息UnrealLink 是通过脚本将预先打包好的源码插入项目的 Plugins 中(本质上就是个虚幻插件),再通过虚幻项目进行编译,所以我们可以通过修改源码自己手动解决这个问题

操作步骤如下:

定位源码的位置

UnrealLink 在用户目录和 Program Files 各缓存了一份,在每次执行 Install RiderLink in Game 时,会通过运行脚本将 \UnrealLink\EditorPlugin 下 RiderLink.zip 中的源码插入到项目中的 Plugins 目录里

而我们需要修改的 RiderGameControl.cpp 文件就藏在这里面

修改源码

FRiderGameControl``::``RequestPlayWorldCommand 这个函数中有一个 lamda 调用了类成员函数,没有显示捕获 this,这一处是造成这个问题的根源

我们代 JB 的研发团队显示捕获一下需要用到变量,修改完记得保存

回到项目,在 Settings/Languages & Framework``/Unreal Engine 重新执行 Install RiderLink in Game,就可以成功接入 UnrealLink