4.11 Transition Guide

Dear Community,

Yay for 4.11!

This is a place where you can post compiler errors you have resolved while transitioning from 4.10 to 4.11!

You can also post issues or questions here, challenges that you encounter while upgrading to 4.11 so that the whole community can assist you in one central location.

Enjoy!

Hey! Thanks for the thread. So, the 4.11 update was seamless for me, except for one issue. When I regenerated the project it used VS2013 instead of VS2015. Has anyone run into that?

OK, so it looks like I have something enabled for Android and because of that it forces a max version of VS2013. Passing -2015 to UnrealBuildTool will force it to generate a VS2015 project.

SetCrowdSimulation(bool bEnable) is now deprecated to use SetCrowdSimulationState(ECrowdSimulationState NewState);

If you want to disable completely, you need to send ECrowdSimulationState:: Disabled.

Trying to Rebuild ~ “Epic was unexpected at this time”

Dear Community,

In 4.10 and 4.11, if you installed a fresh engine installation under “program files (x86)/Epic Games”, you will be unable to do a full rebuild via your VS .sln.

You will get the error



Epic was unexpected at this time


The reason is that “Epic Games” has a space in it and the old batch file for rebuild from Epic does not account for this

To fix this, here is the replacement .bat file!

Replace the contents of the old one here:

Engine/Build/BatchFiles/Rebuild.bat

with this:


 
@ echo off

REM %1 is the game name
REM %2 is the platform name
REM %3 is the configuration name

IF EXIST "%~dps0\Clean.bat" (
	call "%~dps0\Clean.bat" %*
) ELSE (
	ECHO Clean.bat not found in %~dps0 
	EXIT /B 999
)

IF EXIST "%~dps0\Build.bat" (
	call "%~dps0\Build.bat" %*
) ELSE (
	ECHO Build.bat not found in %~dps0 
	EXIT /B 999
)


Again please note this will only affect you when you do a fresh engine installation, it is not specifically tied to the 4.11 transition from 4.10, but I figured I’d put it here since I’ve now verified this issue still exists in 4.11

:heart:

Thank you for posting this ! I did not realize Epic had replied to my about this! (not sure if that’s where you got the solution but it’s all clear now)

Thanks again!

Thank you Devero!

Previously, you could get the BlendOutTime from an UAnimMontage* like this:


UAnimMontage* AnimMontage;
// Initialize AnimMontage:

float blendout = AnimMontage->BlendOutTime;

Now it needs to be:


float blendout = AnimMontage->BlendOut.GetBlendTime();

Hope it helps someone out there struggling with this.

Stuff I’m finding:

FPostProcessSettings::bOverride_SceneFringeSaturation has been removed
FPostProcessSettings::SceneFringeSaturation has been removed

I am getting weird shadows when up close to objects in the editor, does anyone know how to fix this?

Will a project still fail to launch upon outdated plugins?

ps. Have probably to wait for VaRest 4.11

Not sure if this is related to the 4.11 stable or not, but my packaged build went from about 360-370MB to 580MB without any real major asset additions. (An icon, a loading splash screen, and a few small speech files.) Anyone else notice an increase in package size? (Yes, if you really wanted to, you could honestly say that 4.11 made my package large.)

Inside of CharacterMovementComponent:

HasRootMotion(), has been removed without any deprecation warnings.

Now use, HasAnimRootMotion() instead.

Right click on .uproject to generate project file is now stubborn to generate VS2013, even if UE is already compiled under VS2015. To force it to generate VS2015 solution file, I had to run (from some older VS2015 discussion threads):



<Path/To/UnrealEngine4>/UE4/Engine/Binaries/DotNET/UnrealBuildTool.exe  -projectfiles -project="<Path/To>/Unreal Projects/<Project Name>/<Project Name>.uproject" -game -engine -progress -2015


Is your .pak 200Mb larger? Or are you seeing quite a few .pdb files under Engine/Binaries/ThirdParty/PhysX/ that were not there with previous version?

For our game, .pak is just 15Mb larger…

my shipping build is 200MB larger as well

A fun addition in 4.11

Dear Community,

I thought this was a rather cute and helpful addition in 4.11, regarding use of FMath::RandRange vs FMath::FRandRange

Now instead of floats passed into RandRange being turned into int32s and giving you strange results, when you’re expecting FRandRange behavior, the constructor will retain the full float values and give you proper result :slight_smile:



/** Helper function for rand implementations. Returns a random number >= Min and <= Max */
	static FORCEINLINE int32 RandRange(int32 Min, int32 Max)
	{
		const int32 Range = (Max - Min) + 1;
		return Min + RandHelper(Range);
	}

	/** Util to generate a random number in a range. Overloaded to distinguish from int32 version, where passing a float is typically a mistake. */
	static FORCEINLINE float **RandRange**(float InMin, float InMax)
	{
		return **FRandRange**(InMin, InMax);
	}

	/** Util to generate a random number in a range. */
	static FORCEINLINE float FRandRange(float InMin, float InMax)
	{
		return InMin + (InMax - InMin) * FRand();
	}


If you overwrote AActor::Tick and AActor::BeginPlay, your Actor will no longer Tick in 4.11 if you forgot to call Super::BeginPlay in your BeginPlay function.

Thanks for this, unfortunately now i have this error when i launch my project via VS2015

Any hint?

Hmm no idea – I didn’t have any errors like that after generating VS2015… does it go away if you generate project file via usual right-click?

More interesting news about AActor::Tick – actors now also tick in non-game threads if you let them.

In constructor:



PrimaryActorTick.bRunOnAnyThread = true;


This didn’t seem to do anything prior to 4.11, but now it works as expected, and can cause trouble if you do stuff that you should only do in game thread (eg spawn other actors)…