問題描述
最近想用 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 的源文件:
TSet<FInstallInfo> FRiderPathLocator::CollectAllPaths()
{TSet<FInstallInfo> InstallInfos;InstallInfos.Append(GetInstalledRidersWithMdfind());InstallInfos.Append(GetManuallyInstalledRiders()); // 手動安裝 Rider 的InstallInfos.Append(GetInstallInfosFromToolbox(GetToolboxPath(), "Rider*")); // 從 JetBrains 的 Toolbox 安裝的 RiderInstallInfos.Append(GetInstallInfosFromResourceFile()); // 從 RiderLocations.txt 找 Rider 安裝路徑return InstallInfos;
}
而 GetInstallInfosFromResourceFile()
只在頭文件定義了接口,在 Linux 下的源文件中并沒有實現,所以方法1在Linux 上并不起作用。
所以我去看了 GetManuallyInstalledRiders
的實現:
static FString GetHomePath()
{
#if ENGINE_MAJOR_VERSION == 4 && ENGINE_MINOR_VERSION <= 20TCHAR CHomePath[4096];FPlatformMisc::GetEnvironmentVariable(TEXT("HOME"), CHomePath, ARRAY_COUNT(CHomePath));const FString FHomePath = CHomePath;
#elseconst FString FHomePath = FPlatformMisc::GetEnvironmentVariable(TEXT("HOME"));
#endifreturn 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.shTOptional<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 選項了。