Ubuntu20.04: UE4.27 中 Source Code 的编辑器下拉框没有 Rider选项

问题描述

最近想用 Rider 作为 UE4 开发的 IDE,但安装好 Rider 后,发现编辑器下拉框中没有 Rider 的选项,我检查了 UE4 的插件,发现 Rider Integration 插件已经安装且启用的。

环境:Ubuntu 20.04 + UE4.27 + Rider2023.2


解决方法

在网上找了挺久,主要都是两种解决方案,有的人可以成功解决问题,但我尝试后都没有生效。

1、将 Rider 启动文件的绝对路径写入到 RiderLocations.txt ,该文件在 /UE4安装目录/Engine/Plugins/Developer/RiderSourceCodeAccess/Resources/RiderLocations.txt
详细方法传送门

2、用虚幻引擎 master 分支RiderSourceCodeAccess 文件夹替换 UE 安装目录内原有的 RiderSourceCodeAccess,然后重新编译UE4。
RiderSourceCodeAccess 的路径为 /UE安装目录/Engine/Plugins/Developer/RiderSourceCodeAccess
详细方法传送门

3、从 JetBrains 的 Toolbox 下重新安装 Rider
详细方法传送门

查看插件源码

在使用1、2 两种办法都无效后,我尝试着去看了下RiderSourceCodeAccess 插件的源码,发现在UE4中加载IDE Rider都是需要找到 Rider 的安装目录,进而在安装目录内找到 ./bin/rider.sh 的启动文件, 于是我去看了搜索 Rider 安装目录的函数。

搜索安装目录的源码主要在 /UE4安装目录/Engine/Plugins/Developer/RiderSourceCodeAccess/Source/RiderSourceCodeAccess/Private/RiderPathLocator 下,该目录下有着 Linux、Mac、Win 子目录,分别是对应系统的 RiderPathLocator 的源文件。我看了 Linux 下的源文件,即 RiderPathLocatorLinux.cpp

插件会通过几种方法来找到 Rider 的源文件:

cpp 复制代码
TSet<FInstallInfo> FRiderPathLocator::CollectAllPaths()
{
	TSet<FInstallInfo> InstallInfos;
	InstallInfos.Append(GetInstalledRidersWithMdfind());
	InstallInfos.Append(GetManuallyInstalledRiders());	// 手动安装 Rider 的
	InstallInfos.Append(GetInstallInfosFromToolbox(GetToolboxPath(), "Rider*")); // 从 JetBrains 的 Toolbox 安装的 Rider
	InstallInfos.Append(GetInstallInfosFromResourceFile());	// 从 RiderLocations.txt 找 Rider 安装路径
	return InstallInfos;
}

GetInstallInfosFromResourceFile() 只在头文件定义了接口,在 Linux 下的源文件中并没有实现,所以方法1在Linux 上并不起作用。

所以我去看了 GetManuallyInstalledRiders 的实现:

cpp 复制代码
static FString GetHomePath()
{
#if ENGINE_MAJOR_VERSION == 4 && ENGINE_MINOR_VERSION <= 20
	TCHAR CHomePath[4096];
	FPlatformMisc::GetEnvironmentVariable(TEXT("HOME"), CHomePath, ARRAY_COUNT(CHomePath));
	const FString FHomePath = CHomePath;
#else
	const FString FHomePath = FPlatformMisc::GetEnvironmentVariable(TEXT("HOME"));
#endif

	return FHomePath;
}

static TArray<FInstallInfo> GetManuallyInstalledRiders()
{
	TArray<FInstallInfo> Result;
	TArray<FString> RiderPaths;
	const FString FHomePath = GetHomePath();	// 获取家目录路径
	// 将家目录路径与 Rider* 拼接,即 家目录路径/Rider*
	const FString LocalPathMask = FPaths::Combine(FHomePath, TEXT("Rider*")); 
	// 搜索匹配 '家目录路径/Rider*' 的目录
	IFileManager::Get().FindFiles(RiderPaths, *LocalPathMask, false, true);

	for(const FString& RiderPath: RiderPaths)
	{
		// 获取完整的目录,即
		FString FullPath = FPaths::Combine(FHomePath, RiderPath);
		// 在 FullPath 目录下找到可执行文件,即 ./bin/rider.sh
		TOptional<FInstallInfo> InstallInfo = FRiderPathLocator::GetInstallInfoFromRiderPath(FullPath, FInstallInfo::EInstallType::Installed);
		if(InstallInfo.IsSet())
		{
			Result.Add(InstallInfo.GetValue());
		}
	}
	return Result;
}

所以我发现可能是我的 Rider 安装目录的命名不符合搜索的规则,所以才没有 Rider选项。

最终解决

因为我的 Rider 安装路径本来就是在家目录下,只是目录名是 JetBrains Rider 2023.2 ,所以我将起它重命名,以 Rider开头,这样的话,插件就能找到 Rider 的安装路径了。

修改好后,用UE4 打开项目,一般就能看到编辑器下拉框中有 Rider 选项了。

如果还是没有的话或者你修改了RiderSourceCodeAccess 里面的源码,你需要重新构建你的项目。

用 Rider 打开你的 project,选中你的 project 右键,选择 高级构建操作--> 重新构建所选项目

这个过程大概会话 40~60分钟。

构建成功后,再次使用 UE4 打开你的项目,就可以看到 Rider 选项了。

相关推荐
好奇的菜鸟9 小时前
如何在 Ubuntu 24.04 (Noble) 上使用阿里源
linux·运维·ubuntu
好奇的菜鸟11 小时前
如何在Ubuntu上检查MySQL是否启动并放开3306端口
mysql·ubuntu·adb
ZPC821014 小时前
ubuntu 6.8.0 安装xenomai3.3
linux·运维·ubuntu
电脑能手15 小时前
遇到该问题:kex_exchange_identification: read: Connection reset`的解决办法
linux·ubuntu·ssh
snoopyfly~15 小时前
Ubuntu 24.04 安装配置 Redis 7.0 开机自启
linux·redis·ubuntu
精英的英15 小时前
在Ubuntu 24.04主机上创建Ubuntu 14.04编译环境的完整指南
linux·运维·ubuntu
奇妙之二进制16 小时前
计算机科学导论(10)什么是BIOS
ubuntu·计算机基础
岁月玲珑17 小时前
【如何判断Linux系统是Ubuntu还是CentOS】
linux·ubuntu·centos
Kevin不想说话9261918 小时前
Ubuntu 24.04 安装搜狗输入法完整教程
ubuntu
矩阵老炮21 小时前
Ubuntu20.4编译AOSP源码实践
ubuntu·aosp