Linker error when compiling project using a plugin

Last night I closed my UE during startup which somehow corrupted my project. I cannot get it to run now. I deleted the binary and intermediate folders of my project and the RTSPlugin I am using (I use no other plugins). However, while everything compiles fine, I run into four linker errors that are concerned with the RTSPlugin. These did not occur previously. I would like to know why they happen and how to resolve them.
The error message in my log is

Module.RealTimeStrategy.9_of_9.cpp.obj : error LNK2019: Verweis auf nicht aufgel?stes externes Symbol ""public: class TSet<struct TWeakObjectPtr<class URTSFloatingCombatTextComponent,struct FWeakObjectPtr>,struct DefaultKeyFuncs<struct TWeakObjectPtr<class URTSFloatingCombatTextComponent,struct FWeakObjectPtr>,0>,class FDefaultSetAllocator> __cdecl URTSComponentRegistry::GetComponents<class URTSFloatingCombatTextComponent>(void)" (??$GetComponents@VURTSFloatingCombatTextComponent@@@URTSComponentRegistry@@QEAA?AV?$TSet@U?$TWeakObjectPtr@VURTSFloatingCombatTextComponent@@UFWeakObjectPtr@@@@U?$DefaultKeyFuncs@U?$TWeakObjectPtr@VURTSFloatingCombatTextComponent@@UFWeakObjectPtr@@@@$0A@@@VFDefaultSetAllocator@@@@XZ)" in Funktion ""private: void __cdecl ARTSHUD::DrawFloatingCombatTexts(void)" (?DrawFloatingCombatTexts@ARTSHUD@@AEAAXXZ)".
Module.RealTimeStrategy.9_of_9.cpp.obj : error LNK2019: Verweis auf nicht aufgel?stes externes Symbol ""public: class TSet<struct TWeakObjectPtr<class URTSHealthBarWidgetComponent,struct FWeakObjectPtr>,struct DefaultKeyFuncs<struct TWeakObjectPtr<class URTSHealthBarWidgetComponent,struct FWeakObjectPtr>,0>,class FDefaultSetAllocator> __cdecl URTSComponentRegistry::GetComponents<class URTSHealthBarWidgetComponent>(void)" (??$GetComponents@VURTSHealthBarWidgetComponent@@@URTSComponentRegistry@@QEAA?AV?$TSet@U?$TWeakObjectPtr@VURTSHealthBarWidgetComponent@@UFWeakObjectPtr@@@@U?$DefaultKeyFuncs@U?$TWeakObjectPtr@VURTSHealthBarWidgetComponent@@UFWeakObjectPtr@@@@$0A@@@VFDefaultSetAllocator@@@@XZ)" in Funktion ""private: void __cdecl ARTSHUD::DrawHealthBars(void)const " (?DrawHealthBars@ARTSHUD@@AEBAXXZ)".
Module.RealTimeStrategy.9_of_9.cpp.obj : error LNK2019: Verweis auf nicht aufgel?stes externes Symbol ""public: class TSet<struct TWeakObjectPtr<class URTSConstructionProgressBarWidgetComponent,struct FWeakObjectPtr>,struct DefaultKeyFuncs<struct TWeakObjectPtr<class URTSConstructionProgressBarWidgetComponent,struct FWeakObjectPtr>,0>,class FDefaultSetAllocator> __cdecl URTSComponentRegistry::GetComponents<class URTSConstructionProgressBarWidgetComponent>(void)" (??$GetComponents@VURTSConstructionProgressBarWidgetComponent@@@URTSComponentRegistry@@QEAA?AV?$TSet@U?$TWeakObjectPtr@VURTSConstructionProgressBarWidgetComponent@@UFWeakObjectPtr@@@@U?$DefaultKeyFuncs@U?$TWeakObjectPtr@VURTSConstructionProgressBarWidgetComponent@@UFWeakObjectPtr@@@@$0A@@@VFDefaultSetAllocator@@@@XZ)" in Funktion ""private: void __cdecl ARTSHUD::DrawConstructionProgressBars(void)const " (?DrawConstructionProgressBars@ARTSHUD@@AEBAXXZ)".
Module.RealTimeStrategy.9_of_9.cpp.obj : error LNK2019: Verweis auf nicht aufgel?stes externes Symbol ""public: class TSet<struct TWeakObjectPtr<class URTSProductionProgressBarWidgetComponent,struct FWeakObjectPtr>,struct DefaultKeyFuncs<struct TWeakObjectPtr<class URTSProductionProgressBarWidgetComponent,struct FWeakObjectPtr>,0>,class FDefaultSetAllocator> __cdecl URTSComponentRegistry::GetComponents<class URTSProductionProgressBarWidgetComponent>(void)" (??$GetComponents@VURTSProductionProgressBarWidgetComponent@@@URTSComponentRegistry@@QEAA?AV?$TSet@U?$TWeakObjectPtr@VURTSProductionProgressBarWidgetComponent@@UFWeakObjectPtr@@@@U?$DefaultKeyFuncs@U?$TWeakObjectPtr@VURTSProductionProgressBarWidgetComponent@@UFWeakObjectPtr@@@@$0A@@@VFDefaultSetAllocator@@@@XZ)" in Funktion ""private: void __cdecl ARTSHUD::DrawProductionProgressBars(void)const " (?DrawProductionProgressBars@ARTSHUD@@AEBAXXZ)".

The entire error log reads like this:

Log file open, 08/08/23 13:32:05
LogWindows: Failed to load 'aqProf.dll' (GetLastError=0)
LogWindows: File 'aqProf.dll' does not exist
LogProfilingDebugging: Loading WinPixEventRuntime.dll for PIX profiling (from ../../../Engine/Binaries/ThirdParty/Windows/WinPixEventRuntime/x64).
LogWindows: Failed to load 'VtuneApi.dll' (GetLastError=0)
LogWindows: File 'VtuneApi.dll' does not exist
LogWindows: Failed to load 'VtuneApi32e.dll' (GetLastError=0)
LogWindows: File 'VtuneApi32e.dll' does not exist
LogWindows: Started CrashReportClient (pid=14236)
LogWindows: Custom abort handler registered for crash reporting.
LogInit: Display: Running engine for game: CastleFight
LogCore: UnrealTraceServer: Trace store launch successful
LogCore: Initializing trace...
LogCore: Display: Requested channels: 'cpu,gpu,frame,log,bookmark'
LogCore: Finished trace initialization.
LogCsvProfiler: Display: Metadata set : platform="Windows"
LogCsvProfiler: Display: Metadata set : config="Development"
LogCsvProfiler: Display: Metadata set : buildversion="++UE5+Release-5.1-CL-23901901"
LogCsvProfiler: Display: Metadata set : engineversion="5.1.1-23901901+++UE5+Release-5.1"
LogCsvProfiler: Display: Metadata set : commandline="" C:/Users/Siegb/Documents/GitHub/CastleFight-5.1/CastleFight.uproject""
LogCsvProfiler: Display: Metadata set : os="Windows 10 (22H2) [10.0.19045.3086] "
LogCsvProfiler: Display: Metadata set : cpu="AuthenticAMD|AMD Ryzen 5 3600 6-Core Processor"
LogCsvProfiler: Display: Metadata set : pgoenabled="0"
LogCsvProfiler: Display: Metadata set : loginid="82f1d96d4ac77aa5f027e28fee19968d"
LogCsvProfiler: Display: Metadata set : asan="0"
LogCsvProfiler: Display: Metadata set : llm="0"
LogStats: Stats thread started at 0.265079
LogICUInternationalization: ICU TimeZone Detection - Raw Offset: +1:00, Platform Override: ''
LogInit: Session CrashGUID >====================================================
         Session CrashGUID >   UECC-Windows-B62A48D842BD3A6259FCC391E4718822
         Session CrashGUID >====================================================
LogConfig: Display: Loading Android ini files took 0.03 seconds
LogConfig: Display: Loading HoloLens ini files took 0.03 seconds
LogConfig: Display: Loading IOS ini files took 0.03 seconds
LogConfig: Display: Loading Mac ini files took 0.03 seconds
LogConfig: Display: Loading Unix ini files took 0.04 seconds
LogConfig: Display: Loading TVOS ini files took 0.04 seconds
LogConfig: Display: Loading LinuxArm64 ini files took 0.05 seconds
LogConfig: Display: Loading Linux ini files took 0.05 seconds
LogConfig: Display: Loading VulkanPC ini files took 0.02 seconds
LogConfig: Display: Loading Windows ini files took 0.03 seconds
LogPluginManager: Mounting Engine plugin EnhancedInput
LogPluginManager: Mounting Engine plugin Bridge
LogPluginManager: Mounting Engine plugin FastBuildController
LogPluginManager: Mounting Engine plugin MeshPainting
LogPluginManager: Mounting Engine plugin TraceUtilities
LogPluginManager: Mounting Engine plugin XGEController
LogPluginManager: Mounting Engine plugin AISupport
LogPluginManager: Mounting Engine plugin EnvironmentQueryEditor
LogPluginManager: Mounting Engine plugin AnimationSharing
LogPluginManager: Mounting Engine plugin CLionSourceCodeAccess
LogPluginManager: Mounting Engine plugin CodeLiteSourceCodeAccess
LogPluginManager: Mounting Engine plugin DumpGPUServices
LogPluginManager: Mounting Engine plugin KDevelopSourceCodeAccess
LogPluginManager: Mounting Engine plugin NullSourceCodeAccess
LogPluginManager: Mounting Engine plugin PixWinPlugin
LogPluginManager: Mounting Engine plugin GitSourceControl
LogPluginManager: Mounting Engine plugin PerforceSourceControl
LogPluginManager: Mounting Engine plugin PluginUtils
LogPluginManager: Mounting Engine plugin PlasticSourceControl
LogPluginManager: Mounting Engine plugin PropertyAccessNode
LogPluginManager: Mounting Engine plugin RiderSourceCodeAccess
LogPluginManager: Mounting Engine plugin SubversionSourceControl
LogPluginManager: Mounting Engine plugin TextureFormatOodle
LogPluginManager: Mounting Engine plugin TraceDataFilters
LogPluginManager: Mounting Engine plugin UObjectPlugin
LogPluginManager: Mounting Engine plugin VisualStudioCodeSourceCodeAccess
LogPluginManager: Mounting Engine plugin VisualStudioSourceCodeAccess
LogPluginManager: Mounting Engine plugin XCodeSourceCodeAccess
LogPluginManager: Mounting Engine plugin InterchangeEditor
LogPluginManager: Mounting Engine plugin Interchange
LogPluginManager: Found config from plugin[Interchange] Game
LogPluginManager: Mounting Engine plugin AndroidMedia
LogPluginManager: Mounting Engine plugin AvfMedia
LogPluginManager: Mounting Engine plugin ImgMedia
LogPluginManager: Mounting Engine plugin MediaCompositing
LogPluginManager: Mounting Engine plugin MediaPlate
LogPluginManager: Mounting Engine plugin MediaPlayerEditor
LogPluginManager: Mounting Engine plugin WebMMedia
LogPluginManager: Mounting Engine plugin WmfMedia
LogPluginManager: Mounting Engine plugin TcpMessaging
LogPluginManager: Mounting Engine plugin UdpMessaging
LogPluginManager: Mounting Engine plugin AnimationModifierLibrary
LogPluginManager: Mounting Engine plugin BlendSpaceMotionAnalysis
LogPluginManager: Mounting Engine plugin ControlRigSpline
LogPluginManager: Mounting Engine plugin ControlRig
LogPluginManager: Mounting Engine plugin IKRig
LogPluginManager: Mounting Engine plugin Niagara
LogPluginManager: Mounting Engine plugin ActorLayerUtilities
LogPluginManager: Mounting Engine plugin AndroidFileServer
LogPluginManager: Mounting Engine plugin AndroidMoviePlayer
LogPluginManager: Mounting Engine plugin AndroidPermission
LogPluginManager: Mounting Engine plugin AndroidDeviceProfileSelector
LogPluginManager: Mounting Engine plugin AppleMoviePlayer
LogPluginManager: Mounting Engine plugin AppleImageUtils
LogPluginManager: Mounting Engine plugin ArchVisCharacter
LogPluginManager: Mounting Engine plugin AudioCapture
LogPluginManager: Mounting Engine plugin AssetTags
LogPluginManager: Mounting Engine plugin AudioSynesthesia
LogPluginManager: Mounting Engine plugin AudioWidgets
LogPluginManager: Mounting Engine plugin CableComponent
LogPluginManager: Mounting Engine plugin ChunkDownloader
LogPluginManager: Mounting Engine plugin CustomMeshComponent
LogPluginManager: Mounting Engine plugin DataRegistry
LogPluginManager: Mounting Engine plugin ExampleDeviceProfileSelector
LogPluginManager: Mounting Engine plugin GameplayAbilities
LogPluginManager: Mounting Engine plugin GeometryCache
LogPluginManager: Mounting Engine plugin GeometryProcessing
LogPluginManager: Mounting Engine plugin GoogleCloudMessaging
LogPluginManager: Mounting Engine plugin GooglePAD
LogPluginManager: Mounting Engine plugin InputDebugging
LogPluginManager: Mounting Engine plugin IOSDeviceProfileSelector
LogPluginManager: Mounting Engine plugin LinuxDeviceProfileSelector
LogPluginManager: Mounting Engine plugin LocationServicesBPLibrary
LogPluginManager: Mounting Engine plugin MeshModelingToolset
LogPluginManager: Mounting Engine plugin Metasound
LogPluginManager: Mounting Engine plugin MobilePatchingUtils
LogPluginManager: Mounting Engine plugin ProceduralMeshComponent
LogPluginManager: Mounting Engine plugin PropertyAccessEditor
LogPluginManager: Mounting Engine plugin SignificanceManager
LogPluginManager: Mounting Engine plugin ResonanceAudio
LogPluginManager: Mounting Engine plugin SoundFields
LogPluginManager: Mounting Engine plugin Synthesis
LogPluginManager: Mounting Engine plugin WaveTable
LogPluginManager: Mounting Engine plugin WebMMoviePlayer
LogPluginManager: Mounting Engine plugin WindowsMoviePlayer
LogPluginManager: Mounting Engine plugin WindowsDeviceProfileSelector
LogPluginManager: Mounting Engine plugin DatasmithContent
LogPluginManager: Mounting Engine plugin GLTFExporter
LogPluginManager: Mounting Engine plugin VariantManager
LogPluginManager: Mounting Engine plugin VariantManagerContent
LogPluginManager: Mounting Engine plugin OnlineBase
LogPluginManager: Mounting Engine plugin OnlineServices
LogPluginManager: Mounting Engine plugin OnlineSubsystem
LogPluginManager: Mounting Engine plugin OnlineSubsystemNull
LogPluginManager: Mounting Engine plugin OnlineSubsystemUtils
LogPluginManager: Mounting Engine plugin AlembicImporter
LogPluginManager: Mounting Engine plugin AssetManagerEditor
LogPluginManager: Mounting Engine plugin BlueprintHeaderView
LogPluginManager: Mounting Engine plugin CurveEditorTools
LogPluginManager: Mounting Engine plugin CryptoKeys
LogPluginManager: Mounting Engine plugin DataValidation
LogPluginManager: Mounting Engine plugin EditorScriptingUtilities
LogPluginManager: Mounting Engine plugin EditorDebugTools
LogPluginManager: Mounting Engine plugin FacialAnimation
LogPluginManager: Mounting Engine plugin GameplayTagsEditor
LogPluginManager: Mounting Engine plugin GeometryMode
LogPluginManager: Mounting Engine plugin GLTFImporter
LogPluginManager: Mounting Engine plugin MacGraphicsSwitching
LogPluginManager: Mounting Engine plugin MaterialAnalyzer
LogPluginManager: Mounting Engine plugin MobileLauncherProfileWizard
LogPluginManager: Mounting Engine plugin PluginBrowser
LogPluginManager: Mounting Engine plugin SpeedTreeImporter
LogPluginManager: Mounting Engine plugin ModelingToolsEditorMode
LogPluginManager: Mounting Engine plugin SequencerAnimTools
LogPluginManager: Mounting Engine plugin StylusInput
LogPluginManager: Mounting Engine plugin WorldPartitionHLODUtilities
LogPluginManager: Mounting Engine plugin LauncherChunkInstaller
LogPluginManager: Mounting Engine plugin Takes
LogPluginManager: Mounting Engine plugin CameraShakePreviewer
LogPluginManager: Mounting Engine plugin GameplayCameras
LogPluginManager: Mounting Engine plugin ActorSequence
LogPluginManager: Mounting Engine plugin LevelSequenceEditor
LogPluginManager: Mounting Engine plugin SequencerScripting
LogPluginManager: Mounting Engine plugin TemplateSequence
LogPluginManager: Mounting Engine plugin OodleNetwork
LogPluginManager: Mounting Engine plugin Paper2D
LogPluginManager: Mounting Engine plugin AutomationUtils
LogPluginManager: Mounting Engine plugin BackChannel
LogPluginManager: Mounting Engine plugin ChaosCaching
LogPluginManager: Mounting Engine plugin ChaosCloth
LogPluginManager: Mounting Engine plugin ChaosClothEditor
LogPluginManager: Mounting Engine plugin ChaosEditor
LogPluginManager: Mounting Engine plugin ChaosNiagara
LogPluginManager: Mounting Engine plugin ChaosSolverPlugin
LogPluginManager: Mounting Engine plugin CharacterAI
LogPluginManager: Mounting Engine plugin ChaosUserDataPT
LogPluginManager: Mounting Engine plugin Dataflow
LogPluginManager: Mounting Engine plugin FullBodyIK
LogPluginManager: Mounting Engine plugin GeometryCollectionPlugin
LogPluginManager: Mounting Engine plugin GeometryFlow
LogPluginManager: Mounting Engine plugin Iris
LogPluginManager: Mounting Engine plugin MeshLODToolset
LogPluginManager: Mounting Engine plugin MeshModelingToolsetExp
LogPluginManager: Mounting Engine plugin OpenImageDenoise
LogPluginManager: Mounting Engine plugin PlatformCrypto
LogPluginManager: Mounting Engine plugin PlanarCut
LogPluginManager: Mounting Engine plugin ProxyLODPlugin
LogPluginManager: Mounting Engine plugin PythonScriptPlugin
LogPluginManager: Mounting Engine plugin SkeletalReduction
LogPluginManager: Mounting Engine plugin UVEditor
LogPluginManager: Mounting Engine plugin InterchangeTests
LogPluginManager: Mounting Engine plugin OnlineSubsystemGooglePlay
LogPluginManager: Mounting Engine plugin ContentBrowserFileDataSource
LogPluginManager: Mounting Engine plugin ContentBrowserClassDataSource
LogPluginManager: Mounting Engine plugin ContentBrowserAssetDataSource
LogPluginManager: Mounting Engine plugin LightMixer
LogPluginManager: Mounting Engine plugin ObjectMixer
LogPluginManager: Mounting Engine plugin OnlineSubsystemIOS
LogPluginManager: Mounting Project plugin RealTimeStrategy
LogPackageName: Display: FPackageName: Mount point added: '../../Plugins/Bridge/Content/' mounted to '/Bridge/'
LogPackageName: Display: FPackageName: Mount point added: '../../Plugins/Developer/AnimationSharing/Content/' mounted to '/AnimationSharing/'
LogPackageName: Display: FPackageName: Mount point added: '../../Plugins/Interchange/Runtime/Content/' mounted to '/Interchange/'
LogPackageName: Display: FPackageName: Mount point added: '../../Plugins/Media/MediaCompositing/Content/' mounted to '/MediaCompositing/'
LogPackageName: Display: FPackageName: Mount point added: '../../Plugins/Media/MediaPlate/Content/' mounted to '/MediaPlate/'
LogPackageName: Display: FPackageName: Mount point added: '../../Plugins/Animation/ControlRigSpline/Content/' mounted to '/ControlRigSpline/'
LogPackageName: Display: FPackageName: Mount point added: '../../Plugins/Animation/ControlRig/Content/' mounted to '/ControlRig/'
LogPackageName: Display: FPackageName: Mount point added: '../../Plugins/Animation/IKRig/Content/' mounted to '/IKRig/'
LogPackageName: Display: FPackageName: Mount point added: '../../Plugins/FX/Niagara/Content/' mounted to '/Niagara/'
LogPackageName: Display: FPackageName: Mount point added: '../../Plugins/Runtime/AudioSynesthesia/Content/' mounted to '/AudioSynesthesia/'
LogPackageName: Display: FPackageName: Mount point added: '../../Plugins/Runtime/AudioWidgets/Content/' mounted to '/AudioWidgets/'
LogPackageName: Display: FPackageName: Mount point added: '../../Plugins/Runtime/GeometryProcessing/Content/' mounted to '/GeometryProcessing/'
LogPackageName: Display: FPackageName: Mount point added: '../../Plugins/Runtime/MeshModelingToolset/Content/' mounted to '/MeshModelingToolset/'
LogPackageName: Display: FPackageName: Mount point added: '../../Plugins/Runtime/Metasound/Content/' mounted to '/Metasound/'
LogPackageName: Display: FPackageName: Mount point added: '../../Plugins/Runtime/ResonanceAudio/Content/' mounted to '/ResonanceAudio/'
LogPackageName: Display: FPackageName: Mount point added: '../../Plugins/Runtime/Synthesis/Content/' mounted to '/Synthesis/'
LogPackageName: Display: FPackageName: Mount point added: '../../Plugins/Runtime/WaveTable/Content/' mounted to '/WaveTable/'
LogPackageName: Display: FPackageName: Mount point added: '../../Plugins/Enterprise/DatasmithContent/Content/' mounted to '/DatasmithContent/'
LogPackageName: Display: FPackageName: Mount point added: '../../Plugins/Enterprise/GLTFExporter/Content/' mounted to '/GLTFExporter/'
LogPackageName: Display: FPackageName: Mount point added: '../../Plugins/Editor/BlueprintHeaderView/Content/' mounted to '/BlueprintHeaderView/'
LogPackageName: Display: FPackageName: Mount point added: '../../Plugins/Editor/GeometryMode/Content/' mounted to '/GeometryMode/'
LogPackageName: Display: FPackageName: Mount point added: '../../Plugins/Editor/GLTFImporter/Content/' mounted to '/GLTFImporter/'
LogPackageName: Display: FPackageName: Mount point added: '../../Plugins/Editor/SpeedTreeImporter/Content/' mounted to '/SpeedTreeImporter/'
LogPackageName: Display: FPackageName: Mount point added: '../../Plugins/Editor/ModelingToolsEditorMode/Content/' mounted to '/ModelingToolsEditorMode/'
LogPackageName: Display: FPackageName: Mount point added: '../../Plugins/VirtualProduction/Takes/Content/' mounted to '/Takes/'
LogPackageName: Display: FPackageName: Mount point added: '../../Plugins/MovieScene/SequencerScripting/Content/' mounted to '/SequencerScripting/'
LogPackageName: Display: FPackageName: Mount point added: '../../Plugins/2D/Paper2D/Content/' mounted to '/Paper2D/'
LogPackageName: Display: FPackageName: Mount point added: '../../Plugins/Experimental/ChaosCaching/Content/' mounted to '/ChaosCaching/'
LogPackageName: Display: FPackageName: Mount point added: '../../Plugins/Experimental/ChaosClothEditor/Content/' mounted to '/ChaosClothEditor/'
LogPackageName: Display: FPackageName: Mount point added: '../../Plugins/Experimental/ChaosNiagara/Content/' mounted to '/ChaosNiagara/'
LogPackageName: Display: FPackageName: Mount point added: '../../Plugins/Experimental/ChaosSolverPlugin/Content/' mounted to '/ChaosSolverPlugin/'
LogPackageName: Display: FPackageName: Mount point added: '../../Plugins/Experimental/Dataflow/Content/' mounted to '/Dataflow/'
LogPackageName: Display: FPackageName: Mount point added: '../../Plugins/Experimental/FullBodyIK/Content/' mounted to '/FullBodyIK/'
LogPackageName: Display: FPackageName: Mount point added: '../../Plugins/Experimental/GeometryCollectionPlugin/Content/' mounted to '/GeometryCollectionPlugin/'
LogPackageName: Display: FPackageName: Mount point added: '../../Plugins/Experimental/GeometryFlow/Content/' mounted to '/GeometryFlow/'
LogPackageName: Display: FPackageName: Mount point added: '../../Plugins/Experimental/MeshLODToolset/Content/' mounted to '/MeshLODToolset/'
LogPackageName: Display: FPackageName: Mount point added: '../../Plugins/Experimental/MeshModelingToolsetExp/Content/' mounted to '/MeshModelingToolsetExp/'
LogPackageName: Display: FPackageName: Mount point added: '../../Plugins/Experimental/PythonScriptPlugin/Content/' mounted to '/PythonScriptPlugin/'
LogPackageName: Display: FPackageName: Mount point added: '../../Plugins/Experimental/UVEditor/Content/' mounted to '/UVEditor/'
LogPackageName: Display: FPackageName: Mount point added: '../../Plugins/Editor/ObjectMixer/LightMixer/Content/' mounted to '/LightMixer/'
LogPackageName: Display: FPackageName: Mount point added: '../../Plugins/Editor/ObjectMixer/ObjectMixer/Content/' mounted to '/ObjectMixer/'
LogPackageName: Display: FPackageName: Mount point added: '../../../../../../Users/Siegb/Documents/GitHub/CastleFight-5.1/Plugins/RealTimeStrategy/Content/' mounted to '/RealTimeStrategy/'
SourceControl: Source control is disabled
SourceControl: Source control is disabled
Launching UnrealBuildTool... [C:/Program Files/Epic Games/UE_5.1/Engine/Build/BatchFiles/Build.bat -Mode=QueryTargets -Project="C:/Users/Siegb/Documents/GitHub/CastleFight-5.1/CastleFight.uproject" -Output="C:/Users/Siegb/Documents/GitHub/CastleFight-5.1/Intermediate/TargetInfo.json"]
LogInit: Warning: Incompatible or missing module: CastleFight
LogInit: Warning: Incompatible or missing module: RealTimeStrategy
Running C:/Program Files/Epic Games/UE_5.1/Engine/Build/BatchFiles/Build.bat Development Win64 -Project="C:/Users/Siegb/Documents/GitHub/CastleFight-5.1/CastleFight.uproject" -TargetType=Editor -Progress -NoEngineChanges -NoHotReloadFromIDE
Running UnrealBuildTool: dotnet "..\..\Engine\Binaries\DotNET\UnrealBuildTool\UnrealBuildTool.dll" Development Win64 -Project="C:/Users/Siegb/Documents/GitHub/CastleFight-5.1/CastleFight.uproject" -TargetType=Editor -Progress -NoEngineChanges -NoHotReloadFromIDE
Log file: C:\Users\Siegb\AppData\Local\UnrealBuildTool\Log.txt
Using 'git status' to determine working set for adaptive non-unity build (C:\Users\Siegb\Documents\GitHub\CastleFight-5.1).
Creating makefile for CastleFightEditor (no existing makefile)
@progress push 5%
Parsing headers for CastleFightEditor
  Running Internal UnrealHeaderTool C:\Users\Siegb\Documents\GitHub\CastleFight-5.1\CastleFight.uproject C:\Users\Siegb\Documents\GitHub\CastleFight-5.1\Intermediate\Build\Win64\CastleFightEditor\Development\CastleFightEditor.uhtmanifest -WarningsAsErrors -installed
Total of 308 written
Reflection code generated for CastleFightEditor in 1.2040632 seconds
@progress pop
Waiting for 'git status' command to complete
Building CastleFightEditor...
Using Visual Studio 2019 14.29.30146 toolchain (C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133) and Windows 10.0.18362.0 SDK (C:\Program Files (x86)\Windows Kits\10).
[Upgrade]
[Upgrade] Using backward-compatible include order. The latest version of UE has changed the order of includes, which may require code changes. The current setting is:
[Upgrade]     IncludeOrderVersion = EngineIncludeOrderVersion.Unreal5_0
[Upgrade] Suppress this message by setting 'IncludeOrderVersion = EngineIncludeOrderVersion.Unreal5_1;' in CastleFightEditor.Target.cs.
[Upgrade] Alternatively you can set this to 'EngineIncludeOrderVersion.Latest' to always use the latest include order. This will potentially cause compile errors when integrating new versions of the engine.
[Upgrade]
[Adaptive Build] Excluded from RealTimeStrategy unity file: RTSAcquireTargetService.cpp, RTSAttackTask.cpp, SetIdleTask.cpp, RTSCombatComponent.cpp
Determining max actions to execute in parallel (6 physical cores, 12 logical cores)
  Executing up to 6 processes, one per physical core
Building 50 actions with 6 processes...
[1/50] Resource Default.rc2
[2/50] Resource Default.rc2
[3/50] Compile SharedPCH.Engine.ShadowErrors.InclOrderUnreal5_0.cpp
[4/50] Compile Module.RealTimeStrategy.5_of_9.cpp
[5/50] Compile Module.RealTimeStrategy.7_of_9.cpp
[6/50] Compile RTSAttackTask.cpp
[7/50] Compile SetIdleTask.cpp
[8/50] Compile RTSCombatComponent.cpp
[9/50] Compile Module.RealTimeStrategy.2_of_9.cpp
[10/50] Compile MyRTSPlayerState.gen.cpp
[11/50] Compile RTSAcquireTargetService.cpp
[12/50] Compile Module.RealTimeStrategy.4_of_9.cpp
[13/50] Compile Module.RealTimeStrategy.6_of_9.cpp
[14/50] Compile Module.RealTimeStrategy.3_of_9.cpp
[15/50] Compile MyRTSGameMode.gen.cpp
[16/50] Compile RTSGameplayAbility.cpp
[17/50] Compile RTSLog.cpp
[18/50] Compile RTSTargetType.cpp
[19/50] Compile CFPlayerStart.gen.cpp
[20/50] Compile MyRTSHUD.gen.cpp
[21/50] Compile CFPlayerStart.cpp
[22/50] Compile Module.RealTimeStrategy.9_of_9.cpp
[23/50] Compile RTSAbilityTypes.gen.cpp
[24/50] Compile MyRTSHUD.cpp
[25/50] Compile RTSTargetType.gen.cpp
[26/50] Compile GEPawn.gen.cpp
[27/50] Compile GEPawn.cpp
[28/50] Compile Module.RealTimeStrategy.1_of_9.cpp
[29/50] Compile CastleFightGameModeBase.cpp
[30/50] Compile MyRTSPlayerController.cpp
[31/50] Compile MyRTSPlayerController.gen.cpp
[32/50] Compile CastleFight.cpp
[33/50] Compile MyRTSGameState.gen.cpp
[34/50] Compile MyRTSGameState.cpp
[35/50] Compile CFTeamStart.cpp
[36/50] Compile RTSGameplayAbility.gen.cpp
[37/50] Compile CastleFight.init.gen.cpp
[38/50] Compile CFTeamStart.gen.cpp
[39/50] Compile MyRTSPlayerState.cpp
[40/50] Compile CastleFightGameModeBase.gen.cpp
[41/50] Compile PlayMontageAndWaitForEvent.cpp
[42/50] Compile MyRTSGameMode.cpp
[43/50] Compile PlayMontageAndWaitForEvent.gen.cpp
[44/50] Compile RTSAbilityTypes.cpp
[45/50] Link UnrealEditor-CastleFight.lib
   Bibliothek "C:\Users\Siegb\Documents\GitHub\CastleFight-5.1\Intermediate\Build\Win64\UnrealEditor\Development\CastleFight\UnrealEditor-CastleFight.lib" und Objekt "C:\Users\Siegb\Documents\GitHub\CastleFight-5.1\Intermediate\Build\Win64\UnrealEditor\Development\CastleFight\UnrealEditor-CastleFight.exp" werden erstellt.
[46/50] Compile Module.RealTimeStrategy.8_of_9.cpp
C:\Users\Siegb\Documents\GitHub\CastleFight-5.1\Plugins\RealTimeStrategy\Source\RealTimeStrategy\Private\Construction\RTSBuildingCursor.cpp(113): warning C4996: 'USkinnedMeshComponent::SkeletalMesh': Replaced by SkinnedAsset. Use GetSkinnedAsset()/SetSkinnedAsset() instead, or GetSkeletalMeshAsset/SetSkeletalMeshAsset() when called from a USkeletalMeshComponent. Please update your code to the new API before upgrading to the next release, otherwise your project will no longer compile.
[47/50] Link UnrealEditor-RealTimeStrategy.lib
   Bibliothek "C:\Users\Siegb\Documents\GitHub\CastleFight-5.1\Plugins\RealTimeStrategy\Intermediate\Build\Win64\UnrealEditor\Development\RealTimeStrategy\UnrealEditor-RealTimeStrategy.lib" und Objekt "C:\Users\Siegb\Documents\GitHub\CastleFight-5.1\Plugins\RealTimeStrategy\Intermediate\Build\Win64\UnrealEditor\Development\RealTimeStrategy\UnrealEditor-RealTimeStrategy.exp" werden erstellt.
[48/50] Link UnrealEditor-RealTimeStrategy.dll
   Bibliothek "C:\Users\Siegb\Documents\GitHub\CastleFight-5.1\Plugins\RealTimeStrategy\Intermediate\Build\Win64\UnrealEditor\Development\RealTimeStrategy\UnrealEditor-RealTimeStrategy.suppressed.lib" und Objekt "C:\Users\Siegb\Documents\GitHub\CastleFight-5.1\Plugins\RealTimeStrategy\Intermediate\Build\Win64\UnrealEditor\Development\RealTimeStrategy\UnrealEditor-RealTimeStrategy.suppressed.exp" werden erstellt.
Module.RealTimeStrategy.9_of_9.cpp.obj : error LNK2019: Verweis auf nicht aufgel?stes externes Symbol ""public: class TSet<struct TWeakObjectPtr<class URTSFloatingCombatTextComponent,struct FWeakObjectPtr>,struct DefaultKeyFuncs<struct TWeakObjectPtr<class URTSFloatingCombatTextComponent,struct FWeakObjectPtr>,0>,class FDefaultSetAllocator> __cdecl URTSComponentRegistry::GetComponents<class URTSFloatingCombatTextComponent>(void)" (??$GetComponents@VURTSFloatingCombatTextComponent@@@URTSComponentRegistry@@QEAA?AV?$TSet@U?$TWeakObjectPtr@VURTSFloatingCombatTextComponent@@UFWeakObjectPtr@@@@U?$DefaultKeyFuncs@U?$TWeakObjectPtr@VURTSFloatingCombatTextComponent@@UFWeakObjectPtr@@@@$0A@@@VFDefaultSetAllocator@@@@XZ)" in Funktion ""private: void __cdecl ARTSHUD::DrawFloatingCombatTexts(void)" (?DrawFloatingCombatTexts@ARTSHUD@@AEAAXXZ)".
Module.RealTimeStrategy.9_of_9.cpp.obj : error LNK2019: Verweis auf nicht aufgel?stes externes Symbol ""public: class TSet<struct TWeakObjectPtr<class URTSHealthBarWidgetComponent,struct FWeakObjectPtr>,struct DefaultKeyFuncs<struct TWeakObjectPtr<class URTSHealthBarWidgetComponent,struct FWeakObjectPtr>,0>,class FDefaultSetAllocator> __cdecl URTSComponentRegistry::GetComponents<class URTSHealthBarWidgetComponent>(void)" (??$GetComponents@VURTSHealthBarWidgetComponent@@@URTSComponentRegistry@@QEAA?AV?$TSet@U?$TWeakObjectPtr@VURTSHealthBarWidgetComponent@@UFWeakObjectPtr@@@@U?$DefaultKeyFuncs@U?$TWeakObjectPtr@VURTSHealthBarWidgetComponent@@UFWeakObjectPtr@@@@$0A@@@VFDefaultSetAllocator@@@@XZ)" in Funktion ""private: void __cdecl ARTSHUD::DrawHealthBars(void)const " (?DrawHealthBars@ARTSHUD@@AEBAXXZ)".
Module.RealTimeStrategy.9_of_9.cpp.obj : error LNK2019: Verweis auf nicht aufgel?stes externes Symbol ""public: class TSet<struct TWeakObjectPtr<class URTSConstructionProgressBarWidgetComponent,struct FWeakObjectPtr>,struct DefaultKeyFuncs<struct TWeakObjectPtr<class URTSConstructionProgressBarWidgetComponent,struct FWeakObjectPtr>,0>,class FDefaultSetAllocator> __cdecl URTSComponentRegistry::GetComponents<class URTSConstructionProgressBarWidgetComponent>(void)" (??$GetComponents@VURTSConstructionProgressBarWidgetComponent@@@URTSComponentRegistry@@QEAA?AV?$TSet@U?$TWeakObjectPtr@VURTSConstructionProgressBarWidgetComponent@@UFWeakObjectPtr@@@@U?$DefaultKeyFuncs@U?$TWeakObjectPtr@VURTSConstructionProgressBarWidgetComponent@@UFWeakObjectPtr@@@@$0A@@@VFDefaultSetAllocator@@@@XZ)" in Funktion ""private: void __cdecl ARTSHUD::DrawConstructionProgressBars(void)const " (?DrawConstructionProgressBars@ARTSHUD@@AEBAXXZ)".
Module.RealTimeStrategy.9_of_9.cpp.obj : error LNK2019: Verweis auf nicht aufgel?stes externes Symbol ""public: class TSet<struct TWeakObjectPtr<class URTSProductionProgressBarWidgetComponent,struct FWeakObjectPtr>,struct DefaultKeyFuncs<struct TWeakObjectPtr<class URTSProductionProgressBarWidgetComponent,struct FWeakObjectPtr>,0>,class FDefaultSetAllocator> __cdecl URTSComponentRegistry::GetComponents<class URTSProductionProgressBarWidgetComponent>(void)" (??$GetComponents@VURTSProductionProgressBarWidgetComponent@@@URTSComponentRegistry@@QEAA?AV?$TSet@U?$TWeakObjectPtr@VURTSProductionProgressBarWidgetComponent@@UFWeakObjectPtr@@@@U?$DefaultKeyFuncs@U?$TWeakObjectPtr@VURTSProductionProgressBarWidgetComponent@@UFWeakObjectPtr@@@@$0A@@@VFDefaultSetAllocator@@@@XZ)" in Funktion ""private: void __cdecl ARTSHUD::DrawProductionProgressBars(void)const " (?DrawProductionProgressBars@ARTSHUD@@AEBAXXZ)".
C:\Users\Siegb\Documents\GitHub\CastleFight-5.1\Plugins\RealTimeStrategy\Binaries\Win64\UnrealEditor-RealTimeStrategy.dll : fatal error LNK1120: 4 nicht aufgel?ste Externe
[49/50] Link UnrealEditor-CastleFight.dll
   Bibliothek "C:\Users\Siegb\Documents\GitHub\CastleFight-5.1\Intermediate\Build\Win64\UnrealEditor\Development\CastleFight\UnrealEditor-CastleFight.suppressed.lib" und Objekt "C:\Users\Siegb\Documents\GitHub\CastleFight-5.1\Intermediate\Build\Win64\UnrealEditor\Development\CastleFight\UnrealEditor-CastleFight.suppressed.exp" werden erstellt.
[50/50] WriteMetadata CastleFightEditor.target cancelled
LogInit: Warning: Still incompatible or missing module: CastleFight
LogInit: Warning: Still incompatible or missing module: RealTimeStrategy
LogCore: Engine exit requested (reason: EngineExit() was called)
LogExit: Preparing to exit.
LogVirtualization: UE::Virtualization was shutdown
LogModuleManager: Shutting down and abandoning module DesktopPlatform (58)
LogModuleManager: Shutting down and abandoning module PythonScriptPluginPreload (56)
LogModuleManager: Shutting down and abandoning module PlatformCryptoOpenSSL (54)
LogModuleManager: Shutting down and abandoning module PlatformCryptoTypes (52)
LogModuleManager: Shutting down and abandoning module PlatformCrypto (50)
LogModuleManager: Shutting down and abandoning module PerforceSourceControl (48)
LogModuleManager: Shutting down and abandoning module SourceControl (47)
LogModuleManager: Shutting down and abandoning module XGEController (44)
LogXGEController: Cannot use XGE Controller as Incredibuild is not installed on this machine.
LogXGEController: Cleaning working directory: C:/Users/Siegb/AppData/Local/Temp/UnrealXGEWorkingDir/
LogModuleManager: Shutting down and abandoning module FastBuildController (42)
LogModuleManager: Shutting down and abandoning module AnimationModifiers (40)
LogModuleManager: Shutting down and abandoning module AudioEditor (38)
LogModuleManager: Shutting down and abandoning module PropertyEditor (37)
LogModuleManager: Shutting down and abandoning module Virtualization (34)
LogModuleManager: Shutting down and abandoning module MessageLog (33)
LogModuleManager: Shutting down and abandoning module TextureCompressor (30)
LogModuleManager: Shutting down and abandoning module RenderCore (28)
LogModuleManager: Shutting down and abandoning module Landscape (26)
LogModuleManager: Shutting down and abandoning module SlateRHIRenderer (24)
LogModuleManager: Shutting down and abandoning module AnimGraphRuntime (22)
LogModuleManager: Shutting down and abandoning module Renderer (20)
LogModuleManager: Shutting down and abandoning module Engine (18)
LogModuleManager: Shutting down and abandoning module CoreUObject (16)
LogModuleManager: Shutting down and abandoning module SandboxFile (14)
LogModuleManager: Shutting down and abandoning module PakFile (12)
LogModuleManager: Shutting down and abandoning module RSA (11)
LogModuleManager: Shutting down and abandoning module NetworkFile (8)
LogModuleManager: Shutting down and abandoning module StreamingFile (6)
LogModuleManager: Shutting down and abandoning module CookOnTheFly (4)
LogModuleManager: Shutting down and abandoning module StorageServerClient (2)
LogExit: Exiting.
Log file closed, 08/08/23 13:33:55

The RTSPlugins build file is

namespace UnrealBuildTool.Rules
{
public class RealTimeStrategy : ModuleRules
{
public RealTimeStrategy(ReadOnlyTargetRules Target)
: base(Target)
{
PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs;
bEnforceIWYU = true;
//bUseUnityBuild = false;
//bUsePCHFiles = false;
PrivateIncludePaths.AddRange(
new
{
“RealTimeStrategy/Private”
});

  	PublicDependencyModuleNames.AddRange(
  		new[]
  		{
  			"Core",
  			"CoreUObject",
  			"Engine",
  			"InputCore",
  			"AIModule",
  			"UMG",
  			"Slate",
  			"SlateCore",
  			"RHI",
  			"RenderCore",
  			"Landscape",
  			"GameplayTags",
  			"GameplayTasks",
  			"NavigationSystem",
  			"GameplayAbilities",
  			"DeveloperSettings"
  		});
  	
  	PrivateDependencyModuleNames.AddRange(new string[] {"Niagara"});

  	// Setup Gameplay Debugger.
  	if (Target.bBuildDeveloperTools || (Target.Configuration != UnrealTargetConfiguration.Shipping && Target.Configuration != UnrealTargetConfiguration.Test))
  	{
  		PrivateDependencyModuleNames.Add("GameplayDebugger");
  		PublicDefinitions.Add("WITH_GAMEPLAY_DEBUGGER=1");
  	}
  }

}
}

I checked for all mentions of UE functions in the linker error message and the corresponding unreal modules are correctly specified in the RTSPlugin buildfile.
The ARTSHUD.h file, which is mentioned in the linker error, looks like this

RTSHUD.h

#pragma once

#include "CoreMinimal.h"

#include "GameFramework/HUD.h"

#include "RTSHUD.generated.h"

class URTSProductionProgressBarWidgetComponent;
class URTSConstructionProgressBarWidgetComponent;
class URTSHealthBarWidgetComponent;
class URTSComponentRegistry;


/**
* HUD with RTS features, such as showing a selection frame.
*/
UCLASS(Category="RTS")
class REALTIMESTRATEGY_API ARTSHUD : public AHUD
{
	GENERATED_BODY()

public:
	virtual void DrawHUD() override;

	virtual void BeginPlay() override;
	
	/** Event for drawaing a floating combat text. */
	virtual void NotifyDrawFloatingCombatText(
		AActor* Actor,
		const FString& Text,
		const FLinearColor& Color,
		float Scale,
		float Lifetime,
		float RemainingLifetime,
		float LifetimePercentage,
		float SuggestedTextLeft,
		float SuggestedTextTop);

	/** Event for drawing the selection frame because the mouse is being dragged. */
	virtual void NotifyDrawSelectionFrame(float ScreenX, float ScreenY, float Width, float Height);

	/** Event for hiding the selection frame because the mouse isn't being dragged. */
	virtual void NotifyHideSelectionFrame();

	/** Event for drawaing a floating combat text. */
	UFUNCTION(BlueprintImplementableEvent, Category = "RTS", meta = (DisplayName = "DrawFloatingCombatText"))
	void ReceiveDrawFloatingCombatText(
		AActor* Actor,
		const FString& Text,
		const FLinearColor& Color,
		float Scale,
		float Lifetime,
		float RemainingLifetime,
		float LifetimePercentage,
		float SuggestedTextLeft,
		float SuggestedTextTop);

	/** Event for drawing the selection frame because the mouse is being dragged. */
	UFUNCTION(BlueprintImplementableEvent, Category = "RTS", meta = (DisplayName = "DrawSelectionFrame"))
	void ReceiveDrawSelectionFrame(float ScreenX, float ScreenY, float Width, float Height);

	/** Event for hiding the selection frame because the mouse isn't being dragged. */
	UFUNCTION(BlueprintImplementableEvent, Category = "RTS", meta = (DisplayName = "HideSelectionFrame"))
	void ReceiveHideSelectionFrame();

	UFUNCTION(BlueprintPure)
	FVector2D GetActorCenterOnScreen(AActor* Actor) const;

	UFUNCTION(BlueprintPure)
	FVector2D GetActorSizeOnScreen(AActor* Actor) const;

private:
	/** Whether to always show all health bars. */
	UPROPERTY(EditDefaultsOnly, Category = "RTS|Health Bars")
	bool bAlwaysShowHealthBars;

	/** Whether to show health bars for hovered units. */
	UPROPERTY(EditDefaultsOnly, Category = "RTS|Health Bars")
	bool bShowHoverHealthBars = true;

	/** Whether to show health bars for selected units. */
	UPROPERTY(EditDefaultsOnly, Category = "RTS|Health Bars")
	bool bShowSelectionHealthBars = true;

	/** Whether to show health bars while the respective hotkey is pressed. */
	UPROPERTY(EditDefaultsOnly, Category = "RTS|Health Bars")
	bool bShowHotkeyHealthBars = true;


	/** Whether to always show all construction progress bars. */
	UPROPERTY(EditDefaultsOnly, Category = "RTS|Construction Progress Bars")
	bool bAlwaysShowConstructionProgressBars;

	/** Whether to show construction progress bars for hovered units. */
	UPROPERTY(EditDefaultsOnly, Category = "RTS|Construction Progress Bars")
	bool bShowHoverConstructionProgressBars = true;

	/** Whether to show construction progress bars for selected units. */
	UPROPERTY(EditDefaultsOnly, Category = "RTS|Construction Progress Bars")
	bool bShowSelectionConstructionProgressBars = true;

	/** Whether to show construction progress bars while the respective hotkey is pressed. */
	UPROPERTY(EditDefaultsOnly, Category = "RTS|Construction Progress Bars")
	bool bShowHotkeyConstructionProgressBars = true;


	/** Whether to always show all production progress bars. */
	UPROPERTY(EditDefaultsOnly, Category = "RTS|Production Progress Bars")
	bool bAlwaysShowProductionProgressBars;

	/** Whether to show production progress bars for hovered units. */
	UPROPERTY(EditDefaultsOnly, Category = "RTS|Production Progress Bars")
	bool bShowHoverProductionProgressBars = true;

	/** Whether to show production progress bars for selected units. */
	UPROPERTY(EditDefaultsOnly, Category = "RTS|Production Progress Bars")
	bool bShowSelectionProductionProgressBars = true;

	/** Whether to show production progress bars while the respective hotkey is pressed. */
	UPROPERTY(EditDefaultsOnly, Category = "RTS|Production Progress Bars")
	bool bShowHotkeyProductionProgressBars = true;


	/** Whether to show floating combat texts above actors. */
	UPROPERTY(EditDefaultsOnly, Category = "RTS|Floating Combat Texts")
	bool bShowFloatingCombatTexts = true;

	/** How many pixels the floating combat text should rise, per second. */
	UPROPERTY(EditDefaultsOnly, Category = "RTS|Floating Combat Texts")
	float FloatingCombatTextSpeed = 20.0f;

	/** Whether to automatically adjust the alpha value of the color of floating combat texts depending on their elapsed lifetime. */
	UPROPERTY(EditDefaultsOnly, Category = "RTS|Floating Combat Texts")
	bool bFadeOutFloatingCombatTexts = true;


	/** Whether we've been drawing the selection frame last frame, because the mouse was being dragged. */
	bool bWasDrawingSelectionFrame;

	/** Actor the player has hovering last frame. */
	UPROPERTY()
	AActor* OldHoveredActor;
	
	UPROPERTY()
	URTSComponentRegistry* ComponentRegistry;


	/** Draws the current selection frame if mouse is being dragged. */
	void DrawSelectionFrame();

	/** Draws floating combat texts. */
	void DrawFloatingCombatTexts();

	/** Draws unit health bars. */
	void DrawHealthBars() const;

	/** Draws the health bar of the specified actor. */
	void DrawHealthBar(URTSHealthBarWidgetComponent* HealthBarWidgetComponent) const;

	/** Draws all construction progress bars. */
	void DrawConstructionProgressBars() const;

	/** Draws the construction progress bar of the specified actor. */
	void DrawConstructionProgressBar(URTSConstructionProgressBarWidgetComponent* ConstructionProgressBarWidgetComponent) const;

	/** Draws a custom HUD effect for the currently hovered actor (e.g. player name). */
	void DrawHoveredActorWidget();

	/** Draws all production progress bars. */
	void DrawProductionProgressBars() const;

	/** Draws the production progress bar of the specified actor. */
	void DrawProductionProgressBar(URTSProductionProgressBarWidgetComponent* ProductionProgressBarWidgetComponent) const;
};

The RTSHUD.cpp file looks like this

RTSHUD.cpp

#include "UI/RTSHUD.h"

#include "EngineUtils.h"

#include "RTSPlayerController.h"
#include "Combat/RTSHealthBarWidgetComponent.h"
#include "Construction/RTSConstructionSiteComponent.h"
#include "Construction/RTSConstructionProgressBarWidgetComponent.h"
#include "Kismet/GameplayStatics.h"
#include "Libraries/RTSCollisionLibrary.h"
#include "Libraries/RTSGameplayLibrary.h"
#include "Production/RTSProductionComponent.h"
#include "Production/RTSProductionProgressBarWidgetComponent.h"
#include "UI/RTSFloatingCombatTextComponent.h"
#include "UI/RTSFloatingCombatTextData.h"
#include "UI/RTSHoveredActorWidgetComponent.h"


void ARTSHUD::DrawHUD()
{
	Super::DrawHUD();

	DrawFloatingCombatTexts();
	DrawSelectionFrame();
	DrawHealthBars();
	DrawConstructionProgressBars();
	DrawProductionProgressBars();
	DrawHoveredActorWidget();
}

void ARTSHUD::BeginPlay()
{
	Super::BeginPlay();

	ComponentRegistry = UGameplayStatics::GetGameInstance(this)->GetSubsystem<URTSComponentRegistry>();
}

void ARTSHUD::NotifyDrawFloatingCombatText(AActor* Actor, const FString& Text, const FLinearColor& Color, float Scale, float Lifetime, float RemainingLifetime, float LifetimePercentage, float SuggestedTextLeft, float SuggestedTextTop)
{
	ReceiveDrawFloatingCombatText(
		Actor,
		Text,
		Color,
		Scale,
		Lifetime,
		RemainingLifetime,
		LifetimePercentage,
		SuggestedTextLeft,
		SuggestedTextTop);
}

void ARTSHUD::NotifyDrawSelectionFrame(float ScreenX, float ScreenY, float Width, float Height)
{
	ReceiveDrawSelectionFrame(ScreenX, ScreenY, Width, Height);
}

void ARTSHUD::NotifyHideSelectionFrame()
{
	ReceiveHideSelectionFrame();
}

FVector2D ARTSHUD::GetActorCenterOnScreen(AActor* Actor) const
{
	const FVector ProjectedLocation = Project(Actor->GetActorLocation());
	return FVector2D(ProjectedLocation.X, ProjectedLocation.Y);
}

FVector2D ARTSHUD::GetActorSizeOnScreen(AActor* Actor) const
{
	// Get actor position projected on HUD.
	const float ActorHeight = URTSCollisionLibrary::GetActorCollisionHeight(Actor);
	const float ActorWidth = URTSCollisionLibrary::GetActorCollisionSize(Actor);

	const FVector ActorTopPosition = Project(Actor->GetActorLocation() + (Actor->GetActorForwardVector() * ActorHeight));
	const FVector ActorBottomPosition = Project(Actor->GetActorLocation() - (Actor->GetActorForwardVector() * ActorHeight));
	const FVector ActorLeftPosition = Project(Actor->GetActorLocation() - (Actor->GetActorRightVector() * ActorWidth));
	const FVector ActorRightPosition = Project(Actor->GetActorLocation() + (Actor->GetActorRightVector() * ActorWidth));

	const float Width = FVector(ActorRightPosition - ActorLeftPosition).Size();
	const float Height = FVector(ActorTopPosition - ActorBottomPosition).Size();

	return FVector2D(Width, Height);
}

void ARTSHUD::DrawSelectionFrame()
{
	// Get selection frame.
	const ARTSPlayerController* PlayerController = Cast<ARTSPlayerController>(PlayerOwner);

	if (!PlayerController)
	{
		return;
	}

	FIntRect SelectionFrame;

	if (!PlayerController->GetSelectionFrame(SelectionFrame))
	{
		if (bWasDrawingSelectionFrame)
		{
			NotifyHideSelectionFrame();
		}

		bWasDrawingSelectionFrame = false;
		return;
	}

	// Draw selection frame.
	NotifyDrawSelectionFrame(
		SelectionFrame.Min.X,
		SelectionFrame.Min.Y,
		SelectionFrame.Width(),
		SelectionFrame.Height());

	bWasDrawingSelectionFrame = true;
}

void ARTSHUD::DrawFloatingCombatTexts()
{
	if (!bShowFloatingCombatTexts)
	{
		return;
	}

	TSet<TWeakObjectPtr<URTSFloatingCombatTextComponent>> FloatingCombatTextComponents = ComponentRegistry->GetComponents<URTSFloatingCombatTextComponent>();

	for (TWeakObjectPtr<URTSFloatingCombatTextComponent> FloatingCombatTextComponent : FloatingCombatTextComponents)
	{
		if (!FloatingCombatTextComponent.IsValid())
		{
			continue;
		}

		for (FRTSFloatingCombatTextData& TextData : FloatingCombatTextComponent->GetTexts())
		{
			// Calculate lifetime.
			const float ElapsedLifetime = TextData.Lifetime - TextData.RemainingLifetime;
			const float LifetimePercentage = ElapsedLifetime / TextData.Lifetime;

			// Calculate position.
			const FVector2D Center = GetActorCenterOnScreen(FloatingCombatTextComponent->GetOwner());
			const FVector2D Size = GetActorSizeOnScreen(FloatingCombatTextComponent->GetOwner());

			// Calculate color.
			FLinearColor TextColor = TextData.Color;

			if (bFadeOutFloatingCombatTexts)
			{
				TextColor.A = 1 - LifetimePercentage;
			}

			// Draw text.
			NotifyDrawFloatingCombatText(
				FloatingCombatTextComponent->GetOwner(),
				TextData.Text,
				TextColor,
				TextData.Scale,
				TextData.Lifetime,
				TextData.RemainingLifetime,
				LifetimePercentage,
				Center.X,
				Center.Y - (Size.Y / 2) - (FloatingCombatTextSpeed * ElapsedLifetime));
		}
	}
}

void ARTSHUD::DrawHealthBars() const
{
	const ARTSPlayerController* PlayerController = Cast<ARTSPlayerController>(PlayerOwner);

	if (!PlayerController)
	{
		return;
	}

	TSet<TWeakObjectPtr<URTSHealthBarWidgetComponent>> HealthBarWidgetComponents = ComponentRegistry->GetComponents<URTSHealthBarWidgetComponent>();

	for (TWeakObjectPtr<URTSHealthBarWidgetComponent> HealthBarWidgetComponent : HealthBarWidgetComponents)
	{
		if (!HealthBarWidgetComponent.IsValid())
		{
			continue;
		}

		AActor* Actor = HealthBarWidgetComponent->GetOwner();

		if (!URTSGameplayLibrary::IsFullyVisibleForLocalClient(Actor))
		{
			HealthBarWidgetComponent->SetVisibility(false);
			continue;
		}

		// Check override conditions.
		if (bAlwaysShowHealthBars || (bShowHotkeyHealthBars && PlayerController->IsHealthBarHotkeyPressed()))
		{
			// Draw all health bars.
			DrawHealthBar(HealthBarWidgetComponent.Get());
		}
		else if (bShowHoverHealthBars && Actor == PlayerController->GetHoveredActor())
		{
			// Draw health bar for hovered actor.
			DrawHealthBar(HealthBarWidgetComponent.Get());
		}
		else if (bShowSelectionHealthBars && PlayerController->GetSelectedActors().Contains(Actor))
		{
			// Draw health bars for selected actors.
			DrawHealthBar(HealthBarWidgetComponent.Get());
		}
		else
		{
			HealthBarWidgetComponent->SetVisibility(false);
		}
	}
}

void ARTSHUD::DrawHealthBar(URTSHealthBarWidgetComponent* HealthBarWidgetComponent) const
{
	if (!IsValid(HealthBarWidgetComponent))
	{
		return;
	}

	const FVector2D Size = GetActorSizeOnScreen(HealthBarWidgetComponent->GetOwner());

	HealthBarWidgetComponent->UpdatePositionAndSize(Size);
	HealthBarWidgetComponent->SetVisibility(true);
}

void ARTSHUD::DrawConstructionProgressBars() const
{
	const ARTSPlayerController* PlayerController = Cast<ARTSPlayerController>(PlayerOwner);

	if (!PlayerController)
	{
		return;
	}

	TSet<TWeakObjectPtr<URTSConstructionProgressBarWidgetComponent>> ConstructionProgressBarWidgetComponents = ComponentRegistry->GetComponents<URTSConstructionProgressBarWidgetComponent>();

	for (TWeakObjectPtr<URTSConstructionProgressBarWidgetComponent> ConstructionProgressBarWidgetComponent : ConstructionProgressBarWidgetComponents)
	{
		if (!ConstructionProgressBarWidgetComponent.IsValid())
		{
			continue;
		}

		AActor* Actor = ConstructionProgressBarWidgetComponent->GetOwner();

		if (!URTSGameplayLibrary::IsFullyVisibleForLocalClient(Actor))
		{
			ConstructionProgressBarWidgetComponent->SetVisibility(false);
			continue;
		}

		// Check override conditions.
		if (bAlwaysShowConstructionProgressBars || (bShowHotkeyConstructionProgressBars && PlayerController->IsConstructionProgressBarHotkeyPressed()))
		{
			// Draw all progress bars.
			DrawConstructionProgressBar(ConstructionProgressBarWidgetComponent.Get());
		}
		else if (bShowHoverConstructionProgressBars && Actor == PlayerController->GetHoveredActor())
		{
			// Draw progress bar for hovered actor.
			DrawConstructionProgressBar(ConstructionProgressBarWidgetComponent.Get());
		}
		else if (bShowSelectionConstructionProgressBars && PlayerController->GetSelectedActors().Contains(Actor))
		{
			// Draw progress bars for selected actors.
			DrawConstructionProgressBar(ConstructionProgressBarWidgetComponent.Get());
		}
		else
		{
			ConstructionProgressBarWidgetComponent->SetVisibility(false);
		}
	}
}

void ARTSHUD::DrawConstructionProgressBar(URTSConstructionProgressBarWidgetComponent* ConstructionProgressBarWidgetComponent) const
{
	// Check progress.
	const URTSConstructionSiteComponent* ConstructionSiteComponent = ConstructionProgressBarWidgetComponent->GetOwner()->FindComponentByClass<URTSConstructionSiteComponent>();

	if (!ConstructionSiteComponent)
	{
		return;
	}

	if (!ConstructionSiteComponent->IsConstructing())
	{
		ConstructionProgressBarWidgetComponent->SetVisibility(false);
		return;
	}

	const FVector2D Size = GetActorSizeOnScreen(ConstructionProgressBarWidgetComponent->GetOwner());

	ConstructionProgressBarWidgetComponent->UpdatePositionAndSize(Size);
	ConstructionProgressBarWidgetComponent->SetVisibility(true);
}

void ARTSHUD::DrawHoveredActorWidget()
{
	const ARTSPlayerController* PlayerController = Cast<ARTSPlayerController>(PlayerOwner);

	if (!PlayerController)
	{
		return;
	}

	AActor* NewHoveredActor = PlayerController->GetHoveredActor();

	if (NewHoveredActor == OldHoveredActor)
	{
		return;
	}

	if (IsValid(OldHoveredActor))
	{
		URTSHoveredActorWidgetComponent* OldHoveredActorWidgetComponent =
			OldHoveredActor->FindComponentByClass<URTSHoveredActorWidgetComponent>();

		if (IsValid(OldHoveredActorWidgetComponent))
		{
			OldHoveredActorWidgetComponent->SetVisibility(false);
		}
	}

	if (IsValid(NewHoveredActor))
	{
		URTSHoveredActorWidgetComponent* NewHoveredActorWidgetComponent =
			NewHoveredActor->FindComponentByClass<URTSHoveredActorWidgetComponent>();

		if (IsValid(NewHoveredActorWidgetComponent))
		{
			const FVector2D Size = GetActorSizeOnScreen(NewHoveredActor);

			NewHoveredActorWidgetComponent->UpdatePositionAndSize(Size);
			NewHoveredActorWidgetComponent->UpdateData(NewHoveredActor);
			NewHoveredActorWidgetComponent->SetVisibility(true);
		}
	}

	OldHoveredActor = NewHoveredActor;
}

void ARTSHUD::DrawProductionProgressBars() const
{
	const ARTSPlayerController* PlayerController = Cast<ARTSPlayerController>(PlayerOwner);

	if (!PlayerController)
	{
		return;
	}

	TSet<TWeakObjectPtr<URTSProductionProgressBarWidgetComponent>> ProductionProgressBarWidgetComponents = ComponentRegistry->GetComponents<URTSProductionProgressBarWidgetComponent>();

	for (TWeakObjectPtr<URTSProductionProgressBarWidgetComponent> ProductionProgressBarWidgetComponent : ProductionProgressBarWidgetComponents)
	{
		if (!ProductionProgressBarWidgetComponent.IsValid())
		{
			continue;
		}

		AActor* Actor = ProductionProgressBarWidgetComponent->GetOwner();

		if (!URTSGameplayLibrary::IsFullyVisibleForLocalClient(Actor))
		{
			ProductionProgressBarWidgetComponent->SetVisibility(false);
			continue;
		}

		// Check override conditions.
		if (bAlwaysShowProductionProgressBars || (bShowHotkeyProductionProgressBars && PlayerController->IsProductionProgressBarHotkeyPressed()))
		{
			// Draw all progress bars.
			DrawProductionProgressBar(ProductionProgressBarWidgetComponent.Get());
		}
		else if (bShowHoverProductionProgressBars && Actor == PlayerController->GetHoveredActor())
		{
			// Draw progress bar for hovered actor.
			DrawProductionProgressBar(ProductionProgressBarWidgetComponent.Get());
		}
		else if (bShowSelectionProductionProgressBars && PlayerController->GetSelectedActors().Contains(Actor))
		{
			// Draw progress bars for selected actors.
			DrawProductionProgressBar(ProductionProgressBarWidgetComponent.Get());
		}
		else
		{
			ProductionProgressBarWidgetComponent->SetVisibility(false);
		}
	}
}

void ARTSHUD::DrawProductionProgressBar(URTSProductionProgressBarWidgetComponent* ProductionProgressBarWidgetComponent) const
{
	// Check progress.
	const URTSProductionComponent* ProductionComponent = ProductionProgressBarWidgetComponent->GetOwner()->FindComponentByClass<URTSProductionComponent>();

	if (!ProductionComponent)
	{
		return;
	}

	if (!ProductionComponent->IsProducing())
	{
		ProductionProgressBarWidgetComponent->SetVisibility(false);
		return;
	}

	UE_LOG(LogTemp, Log, TEXT("Actor %s is still producing"), *ProductionProgressBarWidgetComponent->GetOwner()->GetActorLabel())

	// Draw progress bar.
	const FVector2D Size = GetActorSizeOnScreen(ProductionProgressBarWidgetComponent->GetOwner());

	ProductionProgressBarWidgetComponent->UpdatePositionAndSize(Size);
	ProductionProgressBarWidgetComponent->SetVisibility(true);
}

Now the following classes are mentioned in the error message, which are also suspiciously declared in the RTSHUD.h file at the top:

class URTSProductionProgressBarWidgetComponent;
class URTSConstructionProgressBarWidgetComponent;
class URTSHealthBarWidgetComponent;
class URTSComponentRegistry;

So my current hypothesis is, that somehow the object files of these classes are somehow missing, But their headers are correctly included in the RTSHUD.cpp, so they should be known to the linker/their object files should exist.

The RTSPLugin we are using is this one: GitHub - marshal-it/ue4-rts-1: Real-time strategy plugin and showcase for Unreal Engine 4.
We use UE 5.1 though, so maybe there is some issue as it was build for UE4, I do not know about these details.

edit:
The error log also mentions

[Adaptive Build] Excluded from RealTimeStrategy unity file: RTSAcquireTargetService.cpp, RTSAttackTask.cpp, SetIdleTask.cpp, RTSCombatComponent.cpp

Which is due to us (friend and me) using Git. Perhaps something got corrupted here during interrupting the UE startup yesterday night (before that everything compiled fine).
I tried to deactivate the adaptive build, but it did not work either (i.e. the project did not compile).

Ok, my friend told me he had encountered the same issue on his computer a while ago and solved it. With his advice I was able to solve it, too.

The cause is a template method in the RTSComponentRegistry class (not shown here). It was declared but not defined in the RTSComponentRegistry .h file. The definition resided in a separate .cpp file. However, for template functions, you should generally not seperate declaration and definition, but define the template function/method in the header. So I defined the GetComponent template function in the header and the error was resolved. I hope this helps someone in the future.

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.