C++ Transition Guide for 4.20

Dear Community,

Here is a thread where you can post your research (compile error resolution especially) as you upgrade to 4.20 !

If you have questions about 4.20 you can post them here as well.

**v141 Build Tools Compile Error**
"The build tools for v141 cannot be found. Install v141 to build using the v141 build tools."

If you saw this you probably compiled in VS 2015.

Epic recommends using VS 2017 for 4.20+

Victory to you!

:heart:

Rama

Well, updating my animation graph seem to completely break in 4.20. I even created a new 4.20 blank project and created a class derived from AnimGraphNode_SkeletalControlBase and it still gives me errors saying GENERATOR_BODY undefined,cannot open source file “AnimGraphNode_SkeletalControlBase.h” and other minor errors.

Im guessing it might have to do with the module declaration but the one’s i am using are :
“Core”, “CoreUObject”, “Engine”, “InputCore”, “AnimationCore”, “AnimGraph”, “AnimGraphRuntime”, “UnrealEd”, “BlueprintGraph”


The errors after introducing the blank animgraph class in a new project

Faced no issues in previous versions. Might have any idea about this ?

Are you still able to build successfully? If so this is likely IntelliSense needing time to catch up. I was able to fix this by unloading the project, then reloading it. Right click on your project in Visual Studio, choose “Unload Project”, then right click again and reload it.

It seems that a bug was introduced in 4.20 where the intermediate include directories for the engine and game are not added to the NMakeIncludeSearchPath property in the visual studio project. That results in intellisense/resharper/visual assist not recognizing the generated.h header files and showing errors everywhere.

I’ve already submitted a bug report and did not receive a response yet.

Can anybody confirm that this is not happening only to me?

Edit: went to answerhub and found out that I’m not the only one experiencing this and this is most certainly a bug. I also answered this question with a workaround: VS cannot find generated.h files - C++ - Unreal Engine Forums

Not only you :slight_smile: It’s critical bug, may be It’s blocker.
This bug reproduce for each user who using 4.20 ver. (I’m sure).

“…\Build\Win64\UE4Editor\Inc**” wrong path. And recursive “**” doesn’t work in VS (from your folder path)
Because need add path to *.generated.h files. Such as “$(SolutionDir)Intermediate\Build\Win64\UE4Editor\Inc$(SolutionName)”. But this is temporary solution.

PS
I can’t work with 4.20 version (c++ code). Awaiting 4.20.1 Maybe this bug will be resolved
Sorry for my bad English.

This seems exactly what i am facing. At least i’m relieved its a public critical problem , so epic should fix it once they see this.

I installed UE 4.20 recently and i cannot create a new code project any more through the unreal project browser

i get the following error

An error occurred while trying to generate project files.

Running D:/Program Files/Epic Games/UE_4.20/Engine/Binaries/DotNET/UnrealBuildTool.exe -projectfiles -project=“d:/Users/nick/Documents/UnrealProjects/MyProject3/MyProject3.uproject” -game -rocket -progress
ERROR: UnrealBuildTool Exception: System.NotSupportedException: The given path’s format is not supported.
at System.Security.Permissions.FileIOPermission.EmulateFileIOPermissionChecks(String fullPath)
at System.Security.Permissions.FileIOPermission.QuickDemand(FileIOPermissionAccess access, String fullPath, Boolean checkForDuplicates, Boolean needFullPath)
at Tools.DotNETCommon.DirectoryReference…ctor(String InPath) in D:\Build++UE4\Sync\Saved\CsTools\Engine\Source\Programs\DotNETCommon\DotNETUtilities\DirectoryReference.cs:line 23
at UnrealBuildTool.LinuxPlatformSDK.HasRequiredManualSDKInternal() in D:\Build++UE4\Sync\Saved\CsTools\Engine\Source\Programs\UnrealBuildTool\Platform\Linux\UEBuildLinux.cs:line 644
at UnrealBuildTool.UEBuildPlatformSDK.HasRequiredManualSDK() in D:\Build++UE4\Sync\Saved\CsTools\Engine\Source\Programs\UnrealBuildTool\Configuration\UEBuildPlatformSDK.cs:line 672
at UnrealBuildTool.UEBuildPlatformSDK.ManageAndValidateSDK(SDKOutputLevel OutputLevel) in D:\Build++UE4\Sync\Saved\CsTools\Engine\Source\Programs\UnrealBuildTool\Configuration\UEBuildPlatformSDK.cs:line 822
at UnrealBuildTool.LinuxPlatformFactory.RegisterBuildPlatforms(SDKOutputLevel OutputLevel) in D:\Build++UE4\Sync\Saved\CsTools\Engine\Source\Programs\UnrealBuildTool\Platform\Linux\UEBuildLinux.cs:line 675
at UnrealBuildTool.UEBuildPlatformFactory.TryRegisterBuildPlatforms(SDKOutputLevel OutputLevel, Boolean bValidatingPlatforms) in D:\Build++UE4\Sync\Saved\CsTools\Engine\Source\Programs\UnrealBuildTool\Configuration\UEBuildPlatformFactory.cs:line 24
at UnrealBuildTool.UnrealBuildTool.RegisterAllUBTClasses(SDKOutputLevel OutputLevel, Boolean bValidatingPlatforms) in D:\Build++UE4\Sync\Saved\CsTools\Engine\Source\Programs\UnrealBuildTool\UnrealBuildTool.cs:line 259
at UnrealBuildTool.UnrealBuildTool.GuardedMain(String] Arguments) in D:\Build++UE4\Sync\Saved\CsTools\Engine\Source\Programs\UnrealBuildTool\UnrealBuildTool.cs:line 808

note that i installed visual studio 2017 enterprize (with visual c++
) and then uninstalled visual studio 2015 , also i;m using windows 7 service pack 1 x64

I have no problem with older engine versions only with 4.20

I haven’t seen it mentioned in the official notes so I am leaving it here:

ULocalPlayer -> GetCachedNetId() now returns an FUniqueNetIdRepl instead of an FUniqueNetId.

APlayerState -> UniqueId is now private and it only has a Set function, I haven’t found a way to get it so far.

APlayerState -> UniqueId is public, the reason intellisense is telling you that the member is not accesible is because it’s not finding the .generated.h headers. Look at my post above.

Alright, nevermind my previous post.
visual studio build was failing but hot reload fixed my problem.

Epic needs to fix this though.

Yep. I find it hard to believe that QA can approve a build like this one, but it seems that it can happen :stuck_out_tongue:

Whenever i’m running a custom AnimGraphNode class , the moment i spawn it in a animation blueprint …CRASH!! every single time it crashes always leading to a breakpoint around line 164 in AnimGraphNode_SkeletalControlBase.h

(Breakpoint) virtual const FAnimNode_SkeletalControlBase* GetNode() const PURE_VIRTUAL(UAnimGraphNode_SkeletalControlBase::GetNode, return nullptr;);

Its saying low level fatar error, pure virtual not implemented for GetNode() function. I am honestly clueless about how to fix this. This crash never happened before. This is also easily reproducible in a very simple almost blank starter class i created from scratch. I am trying to learn to implement but my guess is the GetNode() function isn’t supposed to be touched . Any suggestions or fix ?

EDIT : After some trying , it seems GetNode() is returning a nullptr for some reason . Still no clue on a solution though .

Vote here! Lets hope for a hotfix

Some macros have been (partly) renamed again :frowning:

Instead of:


DECLARE_UNIFORM_BUFFER_STRUCT_MEMBER_ARRAY_EX(MemberType,MemberName,ArrayDecl,Precision)

DECLARE_UNIFORM_BUFFER_STRUCT_MEMBER_ARRAY(MemberType,MemberName,ArrayDecl)

DECLARE_UNIFORM_BUFFER_STRUCT_MEMBER(MemberType,MemberName)

DECLARE_UNIFORM_BUFFER_STRUCT_MEMBER_EX(MemberType,MemberName,Precision)

DECLARE_UNIFORM_BUFFER_STRUCT_MEMBER_SRV(ShaderType,MemberName)

DECLARE_UNIFORM_BUFFER_STRUCT_MEMBER_SAMPLER(ShaderType,MemberName)

DECLARE_UNIFORM_BUFFER_STRUCT_MEMBER_TEXTURE(ShaderType,MemberName)

you now need to use:


UNIFORM_MEMBER_ARRAY_EX(MemberType,MemberName,ArrayDecl,Precision)

UNIFORM_MEMBER_ARRAY(MemberType,MemberName,ArrayDecl)

UNIFORM_MEMBER(MemberType,MemberName)

UNIFORM_MEMBER_EX(MemberType,MemberName,Precision)

UNIFORM_MEMBER_SRV(ShaderType,MemberName)

UNIFORM_MEMBER_SAMPLER(ShaderType,MemberName)

UNIFORM_MEMBER_TEXTURE(ShaderType,MemberName)

UNIFORM_MEMBER_STRUCT(StructType,MemberName)

The explicit variants (e.g. DECLARE_UNIFORM_BUFFER_STRUCT_MEMBER_EXPLICIT ) keep their old naming scheme, though. Why, EPIC? :frowning:

Link to code: https://github.com/EpicGames/UnrealEngine/blob/release/Engine/Source/Runtime/RenderCore/Public/UniformBuffer.h#L689

I’m getting a ton of errors with:
LogCompile: Error: TakeDamage: Override of UFUNCTION in parent class (MyClassName) cannot have a UFUNCTION() declaration above it; it will use the same parameters as the original declaration.

The only thing related I’ve found was this bug that had to do with nativized blueprints but I’m not doing any of that.

Does this have to do with any of the other bugs perhaps?

It seems that the bGenerateOverlapEvents from UPrimitiveComponent is now private and can’t be set directly so bGenerateOverlapEvents = false;
must be SetGenerateOverlapEvents(false);

In 4.19, I had set up a UMediaPlaneComponent auto-sizing video screen for playing our cutscenes. It disappeared completely in 4.20 with no more references in any of the Engine Plugin sources, along with it’s .h. Was this intentional and is there a replacement in 4.20? To restore functionality, as a temporary workaround, I had to remove all references to get us running again.

That’s weird.
Make sure that you’re not using UFUNCTION macro on overridden methods that are already using UFUNCTION macro in the super class.

I’m experiencing this as well. When you override the function of the super class to return a covariant type, you get this error. This did not happen in 4.19.

Hi,

Do you know what the purpose of thr restricted folder names?
I had “apple” in content directory and now I can’t build, because they add it to their list.

Thanks,