最近准备把个人游戏项目从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++20
,2023.1
版本的 UnrealLink
的 RiderGameControl.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 的研发团队显示捕获一下需要用到变量,修改完记得保存
重新执行 Install RiderLink in Game
回到项目,在 Settings/Languages & Framework``/Unreal Engine
重新执行 Install RiderLink in Game
,就可以成功接入 UnrealLink
。