Unreal Engine 4.7 Release Notes

Choose your operating system:




Unreal Engine 4.7 is our biggest release yet, with the power to render huge numbers of instanced objects in large worlds, beautiful rendering of leaves and foliage, HDR texture support, in-editor animation editing, along with hundreds of optimizations and improvements.

Many highly-requested features have been added: You can now assemble new actors using components right in your level, and even create your own custom component types using Blueprint visual scripting or C++! Speaking of scripting, the Blueprint Editor UI has been redesigned with a clean, unified layout. And it's never been easier to import content in your project -- Unreal Editor now detects new asset files and imports them automatically!

HTML5 platform + WebGL is ready to use -- run your game in a compatible browser with a single click! You can also now build, cook and deploy Android developers on Mac. For virtual reality creators, new "VR Preview" feature immerses you in your world instantly from the editor. In addition, you can now access Leap Motion support if you're building a code-based project. Finally, we now give you the full C++ engine source code in every release to make learning and debugging even easier!

This release includes 38 great changes that were submitted from Unreal Engine's amazing community of developers. Epic would like to especially thank community member Sebastien Rombauts for contributing his Git source control plugin to Unreal Engine for this release. Amazing work! Thanks to all of the contributors below:

Artem V. Navrotskiy (bozaro), ArneBezuijen, Black Phoenix (PheonixBlack), codetackler, Daniel Zeligman (dzeligman), Derek van Vliet (derekvanvliet), Fazouane Marouane (fazouane-marouane), Jesus Fernandez (jsfdez), Lukasz Baran (iniside), Moritz Wundke (moritz-wundke), Michael Kosel (TheCodez), Michael Allar (Allar), Marat Radchenko (slonopotamus), 3dluvr, Pierdek, Quadtree, Rama (EverNewJoy), Robert Wallis (robert-wallis), Rick Yorgason (Skrapion), Simon Taylor (simontaylor81), Stephen Whittle (stephenwhittle), Tobias Mollstam (mollstam), Cengiz Terzibas (yaakuro)

Major Features

Realistic Foliage Lighting

The new Foliage Shading Model allows light to be transmitted through grass, leaves, paper, and other materials


Diffuse lighting on the opposite side of the surface becomes transmissive lighting on the side being shaded

  • Transmissive lighting is a mix of wrap-around diffuse with a view dependent lobe for backscattering

  • Subsurface color filters this lighting and can be used to represent varying thickness as well (e.g. leaf veins)

  • Note that using opacity with this shading model will only affect shadow falloff distance

Foliage Rendering for Large Worlds

The foliage system has been optimized to to support huge, open environments!


We now use a hierarchical system for managing and culling of foliage that scales to millions of instances! Also, we now smoothly transition between mesh LODs with a temporal fade to eliminate the annoying pop when switching LODs!

In-World Component Editing

Components can now be added directly to actors placed in your level. This allows you to assemble new actors out of components without having to create a Class Blueprint first. It's great for experimenting with components and assembling new objects right inside your level.


You can now select individual components in the 3D level, move them around using familiar gizmos and edit their properties.


After you create something awesome, click "Blueprint / Add Script" to save it as a reusable class or add scripting to it. This will automatically replace your actor with an instance of that class.


Placeable Empty Actors

You can now drag and drop to place "empty actors" right into your level!


Empty pawns and characters are supported too. You can use the new in-world component editing features to build up interesting actors right in your level.

Blueprintable Components

Create your own component types using Blueprint scripting! You can save these components and reuse them on any actor!

Click "Add Component", then select "New Blueprint Script Component..." right at the top. You can do this on actors in your level, from inside any Actor Class Blueprint, and even from the Content Browser's "New Blueprint..." window.


Choose a Parent Class for your new component. "Scene Components" have a 3D position within the actor, but "Actor Components" only have scripting logic.


Here is the fun part -- writing Blueprint script code for your new component. In this example, we rotate the component's owner (the actor) around the yaw axis every single frame using the Tick event. We named this component "Spinner" because it spins actors around!


Now, you can drop the component onto any actor in your scene and they will start rotating when the game begins. Yay, reusable modular functionality!


You can also drop it into any normal actor class Blueprint. Your new components can always be found in the "Add Component" menu (under the "Custom" category), and also in the Content Browser like any other asset.

Automatic Asset Importing

Importing meshes, sounds and textures has never been easier. Simply save your source art files under your project's Content folder, and the editor will automatically import the new files, ready to be used in UE4!

If you update these files from an external application, the editor will detect that and automatically reimport your content! This makes iterating on game content much faster.

This feature is turned on by default, but you can toggle it using the "Monitor Content Directories" in the "Loading & Saving" section of editor preferences.

Redesigned Blueprint Editor UI

The Blueprint Editor has been redesigned to be easier to use! All three modes have been unified into a single screen to help streamline your workflow, along with many other improvements.


You can now freely rearrange panels, such as the Viewport and Graph views, and even have both on screen at the same time!

The "My Blueprint" view has been revamped to be cleaner and sparser, and it's easier to add new functions and variables.

Selecting your actor's name in the Components panel will show your class' defaults (or you can click "Class Defaults" on the toolbar.) To see your Blueprint's settings, use the "Class Settings" button on the toolbar (previously, this was called "Blueprint Props")

HTML5 and WebGL Support (Windows Only)

You can now package and run your game in a Web browser through the binary tools you get through the Launcher.


Simply install the Emscripten SDK, restart the editor and launcher, then use the Launch drop down to select a web browser!


Notes about HTML5 support:

  • Firefox, Safari, or 64-bit Chrome is required during development (shipping builds work fine in 32-bit Chrome)

  • Windows is currently required for HTML5 support. We're working on Mac for an upcoming release.

  • Your game may take a while to prepare for HTML5, especially the first time, as assets and code in your project are optimized for the web browser.

OpenEXR: High Dynamic Range Textures

2D High Dynamic Range (HDR) textures can now be imported from OpenEXR files! You can store images with up to 16-bits of data per channel (about 30 stops of exposure.)


(Previously, only Cube Map textures were able to be imported from OpenEXR files.)

Android Development on Mac

The OS X version of Unreal Engine now fully supports Android development!


Mac users can now build, cook and package for Android, as well as deploy to Android devices from the editor or command-line.


You will need Java for OS X and the Android SDK (which can be installed using the TADP installer in Engine/Extras/Android). After installing, either restart the editor, or set paths to the SDK in the new Android SDK section in Project Settings.

Full Engine C++ Source Code and Debug Symbols

Unreal Engine now includes the full engine C++ source code and debugging symbols when installed using the Launcher!


This allows you to seamlessly step into engine code while debugging, and you will have complete call stacks after a crash. You no longer need to compile the engine yourself to get full engine debugging powers.

Note that if you want to recompile the engine yourself, you'll still need to go to GitHub to get all of the required files.

Play in Virtual Reality

We have added a new "VR Preview" button to the editor! If you have an Oculus Rift device plugged in, you can instantly play your game in virtual reality.


Clicking "VR Preview" will minimize the editor window, and pop up your game directly on the Oculus Rift device.

Leap Motion Plugin *BETA*

UE4 now ships with support for the Leap Motion device through a plugin. This allows you to use Leap's hand tracking technology directly in your project. Their API is exposed in both Blueprints and code, so any project can take advantage of the tech.

For examples on how to use the plugin, please see Leap Motion's website at www.leapmotion.com. Currently, this plugin is only available to those who build the engine from GitHub, and those who download the plugin directly from Leap's website.

C++ Classes in Content Browser

Your game's C++ classes are now visible in the Content Browser!


You can easily create new C++ classes right from the Content Browser! It will be automatically compiled and displayed in the editor, ready to use!


Double-click on C++ class icons to jump straight to the source code in Visual Studio or Xcode, or right click to create a new class using the selected class as a base.

Morph Target Exaggeration

Morph Targets can now be weighted higher than 100%, allowing for exaggerated poses, or below 0% for inverse poses.


Feature Packs and Content Packs

You can now add new "features" and content to your game at any time using Content Browser! Packs can contain any combination of content, Blueprint classes or C++ classes.


All existing template project features are available as Feature Packs. So you could add a First Person Feature Pack to your game, and then later on add the Vehicle Feature Pack and be able to use both of these features in your project!

In Content Browser, just click Add New, then click "Add Feature or Content Pack...". The files will be injected right into your project! Many packs may include built-in tutorials, too!


Even the Starter Content can be added to your project at any time. In fact, there is a new "Mobile Optimized" Starter Content pack you can choose, too.

Animation Editing System

You can now edit animations right inside the Persona animation tool!


Scrub the time slider, select, move and rotate bones using the gizmo and set keys at any frame. (Hint: 'S' key is a shortcut)


Inside Persona, all of your animation curve edits will be stored on an "additive layer". If you decide to reimport your original animation, your modifications will be preserved! This layer only exists in Persona. Simply click the "Apply" toolbar button to commit your changes and see the animation in your game!


You can also save out a whole new custom animations! Use the "Create Asset" toolbar button to create animations from either a reference post, or your current pose or animation.


Some other notes:

  • Animation curves can be disabled or deleted if you don't need them curves

  • Once baked, export will work with the final baked animation. Additive curves are not exported.

  • When you retarget, the curves are not transferred. However, the final baked animation will be retargeted.

Instant Bone Controller Preview

Bone Controller nodes can now be adjusted interactively using the viewport gizmo, rather than having to recompile each time!

Currently this feature works with TwoBoneIK, ModifyBone & Fabrik nodes, but we will be adding more.

Creating Animations from Physics

You can now record physics simulation in the physics editor (PhAT) and save that as an animation!


Start by clicking "Record" on the toolbar, then interact with your object in the viewport to create an interesting simulation! After you're done, click "Stop" to save the simulation as an animation.

You can also capture animation right from your level!

  • In the Level Editor, click the "Simulate" button in the Play toolbar drop-down

  • Find the simulated Skeletal Mesh in your scene

  • Right click on the mesh and select "Keep Simulated Changes" (or press the 'K' key) to save an animation!

Project Launcher

The new Project Launcher interface allows you to easily run or package your game with more control!


Project Launcher has features to help test your game on multiple types of devices and configurations, as well as running multiple sessions simultaneously. Launch your project on any connected device, with easily customizable build types and cooking preferences.

Use Custom Launch Profiles to create builds specific to your needs.

  • All our advanced options are exposed.

  • Select exactly the content you want to build.

  • Build multiple platforms at once.

  • Package and store builds for others to run, or to run later.

Of course, you can still run your game using the convenient "Launch" button on the main toolbar. But if you need more flexibility, just open up the the Project Launcher from either the "Launch" toolbar drop down menu, or the main Window menu.

Blueprint Merge Tool

You can now merge different Blueprints together using the new Blueprint Merge Tool.

This tool shows a visual comparison of two Blueprints and assists you in combining them! It's great for merging versions of a single Blueprint that were modified by different team members.


There are three ways to use this tool:

  • Click on File -> Merge in the Blueprint Editor

  • Right click on an asset with a source control merge conflict and select Merge

  • From the command-line, run: UE4Editor.exe -diff [options]

Git Source Control Plugin (Beta!)

Thanks to community member Sebastien Rombauts for graciously contributing his excellent Git source control plugin to Unreal Engine!!


If you connect your project to a Git repository, the editor supports most source control interactions such as adding and removing files, committing changes, displaying file history, diffing files, and displaying the source control status of any asset.

AI Perception System: Blueprint Scripting

The AI Perception System can now be configured using Blueprint scripts! Just add an AI Perception Component to your AI, then inspect and tweak its properties and events.


Tutorials for New Project Templates

Each New Project Template now has its very own Overview Tutorial that provides a brief outline of how each of that template's assets and classes work.


Just click the 'Play' button on the Tutorial thumbnail in the Content Browser to start it!


Content Packs and Feature Packs can also have their own tutorials too! If you add a pack to your project, look for a tutorial that you can play that will teach you about that feature or content pack!

New Thumbnail Look and Feel

The editor now displays asset thumbnails using a new colorful style


Also, both C++ classes and Blueprint classes will now display a live 3D thumbnail when possible, as well as a small icon in the corner that indicates what the parent class is.

Paper2D: Improved Tile Map Layer Editing

We have added lots of useful layer editing features to the Tile Map editor!


  • Layers can be reordered, moving them up or down with respect to each other

  • Selection in the layer browser now controls which layer will be painted on rather than always painting on the topmost layer

  • The selected layer is remembered across editing sessions

  • The selected layer now has a helper grid rendered at the correct depth with a wireframe outline being drawn for all unselected layers

  • Layer renaming now works exactly like renaming an actor in the World Outliner with a more obvious visual style and intuitive click interaction

  • Layers can now be duplicated

  • Tile maps can now be reusable assets or instances in the level, with a command to promote to an asset

  • Newly added layers have more meaningful names

  • Note: Tile maps are still an 'experimental' feature in this version of Unreal Engine

Paper2D: Flipbook Collision Detection

Flipbooks allow you to create 2D animations out of images that play in a sequence. Now, you can define collision properties for your animation frames!


Flipbook assets have a new Collision Source property that controls the source of collision data for the flipbook (if any)

  • No Collision: The flipbook has no collision

  • First Frame Collision: The flipbook has non-animated collision based on the first frame of the animation

  • Each Frame Collision: The flipbook changes collision each frame based on the animation (Note: This setting can be expensive as it requires recreating the physics state every frame)

Some notes on usage:

  • In many cases it may make more sense to attach collision components (e.g., a box component) to a socket on the flipbook component rather than directly generating collision from source frames, especially if you want some collision regions to overlap while others block

  • Character movement still relies on the collision capsule, in most cases you want to use a different collision channel for the flipbook than BlockAll to prevent the capsule from getting stuck on the flipbook (move/be blocked based on the capsule, and test for overlap or collision with projectiles based on the flipbook)

UI: Custom Cursor Support

You can now create custom Widgets to use as Software Cursors in your project. You can use all the functionality of Unreal Motion Graphics to add text, health meters, tool-tips or whatever you desire to your cursor.


Software cursors can be useful in a number of cases:

  • Adding cursors to platforms that do not have hardware cursors. For example, a virtual mouse cursor on a console.

  • Adding cursors which are visually rich, have animations, or have complicated interactions.

  • Adding cursors that look consistent across PC, Mac, Linux without having to worry about the platform specific formats.

You can use the new User Interface section of Project Settings to setup your game's software cursor Widgets. If you do not specify a cursor, you will get a default hardware cursor.

Note: Software Cursor motion will be limited to your game's frame rate, unlike a regular mouse cursor that is rendered by your operating system. This is the main tradeoff to consider.

Unreal Motion Graphics: New Widget Binding System

The binding system for widgets has had a massive overhaul to allow support for binding to sub-properties and functions on the widget, and to greatly improve performance!


Some notes about new Widget Bindings

  • Bindings are based on a dynamically evaluated set of fields rather than using Blueprint scripting.

  • Direct bindings to both C++ or Blueprint functions are supported!

  • Trivial conversions are handled automatically (e.g. Linear Color to Slate Color, Texture2D to a Slate Brush.)

  • Binding to properties have gotten much faster with this change! (about 10x speed improvement)

  • Old bindings will continue to work, but you should update them to the new system to take advantage of the performance improvements

Visual Logger (AI Visualization Tool)

We have a whole new Visual Logger tool with lots features. This is designed to help you debug and fine-tune AI in your project!


  • Log out events, then use powerful tools to search on a timeline. This video shows an example.

  • Items on the timeline with warnings are now shown in yellow, and items with errors in red.

  • You can use a special Debug Camera to fly around while the game is paused.

  • Save out generated 'reports' from visual logger events. Hyperlinks in the reports allow you to filter the log, making it easier to analyze

Translucent Object Ordering Control

This new feature allows you to configure the order that the renderer draws translucent objects. This is really useful for 2D games!


In your project's Rendering Settings, check out the new Translucent Sort Policy options:

  • Sort by Distance: Sort based on distance from the camera to the object's bounding sphere center. This is the default and typically the best for 3D games.

  • Sort by Projected Z: Sort based on the post-projection Z distance to the camera. This setting can cause popping as the camera rotates.

  • Sort Along Axis: Sort based on the projection onto a fixed axis. This is typically the best option for 2D games. The axis to sort along is called Translucent Sort Axis and can also be edited in the renderer project settings (defaults to -Y)

Fixed Blueprint Cyclic Dependencies

Blueprint loading has been redesigned so that it should be able to handle any "cyclic" scenario you throw at it. Your Blueprints can intermingle and cross-communicate all they want, and most importantly: they will load up properly next time around.

This addresses many Blueprint on-load crashes, and other scenarios where Blueprints could be loaded in a malformed state!

Unreal C++ Programming Improvements

We're continuously working to make C++ in Unreal Engine easier to use and more familiar to everyone.

  • No special constructors needed! Your class constructors no longer need to take an Object Initializer argument.

  • Creating sub-objects for Unreal classes now has a new simple syntax.

Multi-threaded Animation

Animation pose calculations are now offloaded to multiple CPU cores reducing the overall amount of time the engine takes to calculate animation.

This improves performance in games with many animated skeletal meshes!

Desktop-Quality Rendering on Android *BETA* (OpenGL ES 3.1 w/ AEP)

OpenGL ES 3.1 (combined with the Android Extension Pack) gives you the ability to use much of the full desktop rendering experience on Android devices! This feature is currently in beta testing, please provide feedback.

  • "ES3.1+AEP" is now a selectable target in for building and cooking.

  • Tegra K1 devices (for instance, the NVIDIA Shield Tablet) have been used for testing and development. More and more devices will be supporting AEP in the future!

  • Enable it via the "Enable OpenGL ES31 + AEP" option Android Project Settings.

Currently, you'll need to compile the engine yourself from the source on GitHub to use this feature.

Blueprint-only projects will need to recompile the base UE4Game executable with OpenGL ES 3.1 support by enabling bBuildForES31 in the engine's BaseEngine.ini file.

Downloadable Content (DLC) Packaging *BETA*

Downloadable content (DLC) can now be packaged up for distribution!

Currently this feature is in beta testing and requires a command-line tool. Create your add-on DLC inside a game plugin Content folder, and use the new packaging tool to "cook" and optimize your content for your platform of choice.

This feature makes use of the game's asset registry to know what content is already supplied in the shipped game, and will cook anything needed from the game's content into the DLC.

To use this feature, run the cook utility for your main game with "-CreateReleaseVersion=x.y", then again for each DLC plugin with "-BasedOnReleaseVersion=x.y -DLCName=MyPluginName".

Android Movie Playback

Loading movies and startup movies now play on Android devices! You can configure startup movies to play in your Project Settings.

Android movies must be in MP4 format to play correctly. Also, the movie playback feature requires a device with Android 4.0 or above.

Android SDK Path Setup in Editor

You can now set the locations for the SDK components needed for Android development directly in the "Android SDK" section of Project Settings. This can greatly simplify the initial setup!


These settings override any environment variables that are set (you can leave them blank to use the environment variables if you prefer the original method)

Access Non-Editable Blueprint Variables

You can once again access variables from other Blueprints without having to make those variables "Editable". This was already possible in the 4.6 release, but not in 4.7. Sorry about that!

AI Blackboard Synchronization

Keys defined in a Blackboard asset can now be marked as 'synced', which synchronizes its value across all AI using it. This allows you to synchronize behavior across multiple AIs, or be can be used for communication between them.

General Release Notes


  • New: Preview Mobile Rendering right in the editor!

    • The "Feature Level Preview" option is no longer experimental

    • Use 'Settings->Preview Rendering Level' menu option to change the feature level used in the main editor window.

  • New: Distance Field lighting features now support instanced static meshes and foliage (Ambient Occlusion, Ray Traced Shadows)

  • New: Improved sky specular occlusion for the Two Sided Foliage shading model. Applies AO directly instead of doing the reflection cone vs bent normal intersection.

  • New: Raised the default shadow map resolution to 2048, which allows higher resolution shadows

  • New: Landscape causes Distance Field Ambient Occlusion on other parts of the scene, but no self-shadowing

    • Pixels without a distance field representation like Landscape can now receive occlusion with reasonable performance

  • New: GPU object management of Distance Field meshes, can handle 100x more meshes with only a small GPU cost for culling

    • The CPU uploads scene change deltas only, nothing per frame

  • New: Tangent bases for static meshes are now computed using MikkTSpace. Special thanks to JedTheKrampus for the GitHub pull request.

  • New: Added the BC4 texture format to OpenGL on all platforms that support GL_ARB_texture_compression_rgtc.

  • New: Added "Disabled LODs Keep Emitter Alive" to particle emitters. When true, this will cause any disabled LODs to keep the emitter alive so that the system is not considered complete. This keeps the emitter alive so that it will reactivate when re-entering a closer, active LOD.

  • New: Added missing shadow rendering policies for mobile, including lightmaps with directional lights and cascaded shadows.

  • New: New primitive component setting "Affect Distance Field Lighting" (disable this for small clutter objects)

  • New: Marked members of Custom Mesh Triangles (used by CustomMeshComponent) as 'BlueprintReadWrite' to allow them to be created easily in a Blueprint.

  • New: Added Set Occlusion Tint and Set Min Occlusion Blueprint functions to Skylight Components

  • New: Subsurface scattering is now enabled when using the OpenGL RHI

  • New: The UVs of sprite and GPU sprite particles can now be flipped at spawn time. This feature is available in the required module of emitters.

  • The selected preview rendering level selected in the editor will now be retained when you create or open a different map

  • Improved Skeletal Mesh rendering performance by pre-sorting the LOD's active bone indices instead of doing it at render data generation time.

  • Improved the world aligned texture material functions method for correcting projected normal maps.

  • Fixed crash that could occur when exporting a texture with a maximum size of 64 or less.

  • Fixed renderer reallocating scene render targets when rendering scene captures outside of the editor. This change improves performance in the standalone game.

  • Fixed Distance Field Ambient Occlusion enabled in ortho viewports

  • Emitters with one LOD disabled were assumed to be complete and so the enabled LODs were not showing when they should. Emitters with any enabled LODs remain active so this does not happen.

  • Fixed the "Subsurface Profile" shading model when used with "Light Propagation Volumes"

  • Fixed a bug causing incorrect static lighting brightness on Instanced Static Meshes and foliage.

  • Fixed a bug on mobile where some characters were not showing their static lightmaps with movable directional shadows

  • Fixed a bug where the screen would go black in SM4 feature levels, when specifying a high resolution screenshot capture region.

  • Fixed a bug that could make no refractive meshes render, if no static refractive meshes were on screen. This could make effects disappear under the right circumstances.

  • Fixed a case where Static Mesh Elements would not be updated when SkyLight render proxies were created.

  • Fixed a crash when dragging a skylight or reflection capture when the "no precomputed visibility" warning was turned on

  • Fixed a rare race condition crash when using reflection capture render targets.

  • Fixed a small memory leak in particle systems

  • Fixed an issue causing particles using the Skel/Vert/Surf module in cascade to spawn at the origin.

  • Fixed an issue where checking Disable Depth Test on materials was being ignored on mobile.

  • Fixed an issue where every 64th instance of foliage would not render on mobile

  • Fixed Bounds Scale not working correctly for Text Render Component

  • Fixed bug where a bad source channel for auto lightmap UVs caused a crash.

  • Fixed texture mip levels marked as Cinematic not getting used on cooked platforms

  • Fixed clipping issues with ES2 post process caused by constrained aspect ratio cameras.

  • Fixed crash if no Subsurface Profile was used and Visualize Subsurface Profiles gets activated

  • Fixed crash loading editor with detached 3D viewport and skylight in the scene

  • Fixed crash that occurred when changing some particle system settings in Cascade while the game was simulating

  • Fixed crash when enabling Show Visualize Subsurface Scattering (Screen Space)

  • Fixed unexpected visual discoloration in "Subsurface Profile" shading omdel

  • Fixed HZB occlusion bug where large vertical meshes would be incorrectly culled.

  • Fixed incorrect aspect ratio when using constrained aspect cameras with mobile's post processing chain.

  • Fixed incorrect handling of light volumes and levels after feature level switch.

  • Fixed issue where collision channel on emitters would not work correctly after a reload.

  • Fixed issue which caused Orient Mesh Emitters to not work correctly in cascade's Skel/Vert/Surf module.

  • Fixed issue with Mixamo Fuse characters having incorrect bone weights

  • Fixed lighting not being fully built with static meshes with LODs that are fully shadowed from a stationary light

  • Fixed multiple issues with editor primitives when in ES2 feature level preview.

  • Fixed particle collisions on emitters spawned using Blueprint function SpawnEmitterAtLocation and SpawnEmitterAttached.

  • Fixed potential crash when reading from reflection texture that was not ready. (affects SM4 only)

  • Fixed rare crash bug in masked material compilation.

  • Fixed a situation that could cause legitimate mobile preview shaders to fail compile. (Shaders were compiled against the deferred path, erroneously requiring more samplers than is available with ES2.)

  • Fixed Skeletal Mesh rendering with a tessellated Material

  • Fixed Subsurface Scattering Profile half resolution rendering

  • Fixed swizzled UV1 for tessellation and displacement

  • Fixed visible seams in landscape caused by LOD discontinuities between neighboring components in different streaming levels, and while texture streaming.

  • Fixed adding a Scene Capture 2D to Render Target will override Motion Blur settings in level

  • Improved canvas text wrapping logic to avoid severe hitches when it is the only use of internationalized text wrapping resources & services.

  • Improved performance of compilation for very large materials

  • Increased the default compression quality of PVR compressed textures (iOS). Noticably reduces granular lightmap artefacts.

  • The high resolution screenshot capture region rendering now correctly updates the gbuffer referencing counting system, fixing an occasional crash

  • Various fixes have been made to the behaviour of fullscreen game windows when using Alt-Tab to switch to different applications. The window should now return to it's previous state when switching back into the game.

  • Fixed text render actors becoming invisible when they are close to the player

  • Fixed skeletal meshes rendered with a tessellated Material causing excessive blur

  • Fixed render targets rendering with stretched pixels in standalone and launched games

  • Fixed incorrect rendering of scene captures in section 1.7 of Content Examples Reflection map sample.

  • Fixed an issue where changing Atmospheric Fog precompute parameters had no effect in the editor and caused a black sky in the game

Editor and Tools

  • New: The Scene Outliner has been renamed to World Outliner to better reflect its purpose as a view of all actors in a world

  • New: Added basic cube, sphere, cone, and cylinder shapes to the placement browser and "Add Component" menu for actors

  • New: Greatly reduced import times when importing large skeletal meshes.

  • New: Brushes and BSP primitives now have a numeric translation, rotation and scale in the details panel like all other actors.

  • New: Details panels can now display properties whose group matches a search criteria.

  • New: Editor tool-tips have a new "bright" look with a larger font, to make them easier to read


  • New: Improved tool tips for components, showing more information about the component class, associated asset, and where the component was first introduced

  • New: Each viewport type now maintains its own transform details, so that perspective/ortho viewports remember their settings when moving from one to another.

  • New: Editor will now compile and open newly-created C++ projects automatically, along with opening the code IDE.

  • New: Improved editor startup times by moving some initialization code relating to source code navigation to a background thread.

  • New: Improvements to placement of BSP / Volumes in the level.

    • Drag and drop placement always places the BSP / Volume with its base on the floor.

    • Fixed snap actions so that snap to floor / snap to pivot work correctly in all cases.

  • New: Mesh Proxy Tool now supports Spline Meshes

  • New: Open / Save dialogs now show the current path at the bottom of the window

  • New: Added a new Row Editor for editing Data Tables

  • New: Saved color swatches in the color picker are now split into non-alpha and alpha parts, so that colors with alpha of 0 can still be viewed.

  • New: Sorted Settings submenus when "Expand configuration menus" is checked.

  • New: When attempting to add C++ code or create a C++ project on a Windows machine without Visual Studio 2013 installed, there is now a button to directly install visual studio

    • Clicking it will download and automatically launch the Visual Studio 2013 installer for you

  • New: Editor now prompts you to check in modified project settings files (config files) along with package files.

  • New: Actors referencing Blueprint assets now open the Blueprint in preference to any other referenced asset when pressing Ctrl+E in the editor.

  • New: Added 'Include Debug Files' option to the packaging settings in the editor.

  • New: The project name label in the level editor now has a tooltip displaying build version information, branch name, etc...

  • New: Adding a new C++ Class from the editor will no longer cause a Visual Studio prompt telling you to reload your solution

  • Changed the editor's startup Splash Screen to indicate progress more frequently, and cleaned up the game name and version text

  • Updated 'create asset from object', 'delete', and 'parent class picker' dialogs to use colorized flat buttons

  • Content Browser now displays results more quickly when filtering by type.

  • Pressing Escape will now only exit Play In Editor (PIE) when that viewport has active keyboard focus

    • This frees up Escape to be used for other game features if you choose to remove the 'CloseEditorViewport' debug key binding in the Input configuration file

  • Removed the 'Recompile Level Editor' toolbar menu button, which did not work reliably and was not useful.

  • Content browser thumbnails can now be made even smaller.

  • Billboard scale set in config (Editor viewport settings) is now correctly set upon restarting the editor.

  • Fixed to an issue so that dragging multiple materials over a mesh no longer applies one of them immediately (while still previewing, before releasing the drag).

  • Fixed a bug preventing you being able to reimport font pages of an offline (bitmap) font asset

  • Fixed a crash in Gameplay Debugger when Playing in Editor when all Viewport tabs are hidden

  • Fixed a crash that may sometimes occur during garbage collection when saving packages due to invalid references.

  • Fixed a crash that occurred when selecting the "Fracture Mesh" button in the Destructable Mesh editor

  • Fixed a crash when shutting down an asset editor that uses a standalone mode tools instance

    • Asset editors now ensure that all local mode instances are exited when closed.

  • Fixed an issue in the import dialog for FBX files where the dialog would show animation options when importing a mesh

  • Fixed a problem copying data to the landscape copy/paste gizmo when no part of the current landscape is saved in the "current level"

  • Fixed bug where the Placement Mode UI would not appear until the editor window had been activated after starting up

  • Fixed crash closing a window on Mac after all other windows have been minimized.

  • Fixed crash when entering an empty string in the hex field of the color picker.

  • Fixed default template map not having nice names for all of the actors in World Outliner

  • Fixed Blueprint-derived volumes from being populated in the volumes list in placement mode.

  • Fixed editor modes not receiving a Post Edit Undo event. This caused various issues, including:

    • Painting foliage and then undoing caused the foliage instance count to become invalid

    • Deleting a foliage type and then undoing restored the instances to the level, but the foliage type did not appear in the UI

  • Fixed empty files not being marked for delete when running Resave Packages and Fixup Redirects commandlets.

  • Fixed issue where the editor would occasionally stream out all textures and then stream them back in again

  • Fixed issue where utilizing Quick Launch in the Project Launcher would crash for code-based projects. Quick Launch now behaves similarly to Launch On, but with the selected map.

  • Fixed 'Merge Levels' operation not working correctly.

  • Fixed a bug where duplication of multiple actors in different levels was failing.

  • Fixed slow tasks sometimes not updating their progress dialogs

  • Fixed "Create New Folder" button appearing in World Outliner overlay in Layers tab.

  • Fixed the "Show only Modified Properties" setting not working in details panels.

  • Fixed the actor details view scrollbar being visible even when nothing was selected

  • Fixed an issue where the color picker eye dropper wasn't picking colors outside of a UE4 window.

  • Fixed the performance issues caused by new text being added the output log

  • Fixed the project launcher showing build versions that aren't shipped with the binary release of the engine.

  • Fixed vertex editing in geometry mode with rotated/scaled brushes.

  • Fixing a crash in the level editor that would result in a crash at low frame rates if clicking on a drop down menu in the viewport when refocusing the window.

  • Fixed lighting actors having an incorrectly scaled icon size

  • Fixed "Ctrl+Enter" keyboard shortcut accidentally clearing editable text boxes

  • Fixed a crash when using the Bing or Sogou Pinyin IMEs (Input Method Editors)

  • Fixed asset search boxes not allowing mouse-selection in the suggestions box - previously the box would close and the selection be ignored.

  • Fixed incorrect padding between widgets in the "Convert to Blueprint" window

  • Fixed incorrect padding between widgets in the "Open Level" window

  • The search box in the placement mode tools panel now filters classes by their localized name as well as their original name in English.

  • Fixed missing padding between the select Actor name in Details and it's icon graphic

  • Improved the messaging during launch on to better reflect what is happening at each step of the process.

  • Long drag-drop feedback tooltips in graph editors now wrap instead of being clipped

  • Made "Create New Blueprint" in Class Viewer more robust, now invalid names are disallowed.

  • Materials dragged over the level viewport correctly go back to a drag preview when leaving the viewport.

  • Moved the pak file option to the cook by the book settings in the project launcher.

  • Prevented multiple Open Asset windows from being opened.

  • Removed FBX window dependency on Blueprint only details panel

  • Fixed issue with context menu not opening in Material and Sound Editors

  • New: Amended the layout of the SCS Diff widget so that the component list can be scrolled.

  • New: Added new vertex color import options: vertex colors in the imported mesh can now be taken from the FBX file, preserved from the current mesh, or set to a constant color.

  • Materials and textures for all LOD levels now are found when reimporting a static mesh.

  • Removed superfluous transactions when dropping actors into the world.

  • Fixed "Use Default" option in the level editor viewport show menu not resetting volume, sprite and layer visibility flags correctly.

  • Fixed undo not functioning in the spline component visualizer with native spline components.

  • The asset pickers in the details panel and the Ctrl+P popup now remember your thumbnail size options and layout options.

  • The breadcrumb bar on the content browser now scrolls to the right to make the most child folder you're in always visible, instead of the most root folder.

  • The Mesh Proxy tool now exports Base Color textures in the correct color space

  • Placed limits on the sizes of font textures which can be generated when changing the Distance Field Scale Factor, preventing editor crashes for out-of-range values.

  • The interior portion of the rotation gizmo no longer captures clicks when translucent selection is enabled

  • Added some extra checks to close any open asset editors that may be editing play in editor lifetime objects when exiting play in editor, so that they don't hold on to invalid references.

  • Fixed components on PIE instances of actors re-registering their properties change. This fix allows you to modify properties of actors during PIE (through the normal details panel in the level editor) and not lose all your state.

  • Fixed crash in Project Settings when changing default Game Mode from one that no longer exists.

  • Fixed the edit/extrude BSP operation in Geometry Mode with multiple selected brushes, so that all geometry elements move in the expected direction. Also fixed scaling of BSP surfaces in the limited case that there is exactly one surface selected.

  • Fixed a bug where box selection in orthographic viewports would always select all BSP in the world.

  • Fixed a crash after converting BSP to a static mesh.

  • Fixed a crash when doing 'Save Asset As' after double-clicking on a folder icon in the right panel

  • Fixed a crash when importing an FBX mesh with an empty texture assigned to it

  • Fixed an issue where you could not move an editor transform gizmo after it was previously moved without moving the mouse again first

  • Fixed crash in Gameplay Debugger when Playing in the Editor without a visible viewport

  • Fixed crash when attempting to turn an edge in Geometry Mode whose associated polys are coincident.

  • Fixed undo/redoing an action in the editor that invalidates a lightmap causing a serialization crash

    • e.g. Given a landscape with built static lighting, sculpting the landscape (invalidating the lightmap), undoing (restoring the lightmap), then redoing (re-invalidating the lightmap) would crash

Content Browser

  • New: The content browser in the default layout of the editor has been moved so that it is placed along the bottom of the editor to give it more room.

    • This will only affect new projects. To see this with an existing project, you must reset your layout via the "Edit" menu in the editor

  • New: Added a new dialog for adding features previously only available as project templates, and content previously only available as starter content to an existing open project.

  • New: Add an editor setting 'Log Timestamp Mode' that controls how timestamps are formatted and displayed or omitted in the output log

  • New: Added a play button to tutorial assets in the Content Browser so that the tutorial can be played directly without opening the asset.

  • New: Tooltip for Skeletal Meshes now includes the default Physics Asset being used. Will show in orange (warning) if 'None'.

  • Fixed an issue where large content browsers would become unusably slow due to rendering asset thumbnails.

  • Fixed tooltip when creating a new Level via the Content Browser.

Unreal Motion Graphics (UI)

  • New: Added snapping options to the UMG animation timeline.

  • New: Added rulers to the UMG designer to give users a sense of size.

  • New: When adding widgets to the viewport, you can now, as an advanced parameter, choose the ZOrder. Additionally ZOrder has been added as an option to the Widget Component. Widget Components now correctly take resolution quality/scale into account when positioning the widget on the screen.

  • New: Helper lines are now drawn when moving the anchor gizmo. Along with percentage text, this information now appears on hover of the anchor medallion pieces.

  • Create widgets that take a player controller now return null from instead of crashing if the player controller is not local (e.g not a remote player in a multiplayer session).

  • Fixed a crash initializing a Dynamic Mesh Builder for each view in a UMG widget component.

  • Copy / Paste of widgets now should remember the each copied widgets size when pasting

  • New: Exposing the ability to configure Max Interactable Distance and Draw Size of the Widget Component to Blueprints and C++ at runtime.

  • New: Get All Widgets Of Class added to the widget Blueprint library. Allows accessing all widgets in the current world, optionally allows just getting the top level ones in the viewport.

  • New: The 3D Widget Component now allows you to specify a Pivot (defaults to center, 0.5,0.5), old assets load with the original (defaults to 0,0, upper left).

    • Now allows Space to be specified. The default is world space, which renders in the world. You can also now select Screen, which will spawn it into the viewport, but places the widget based on world to screen projection of the component.

  • New: A play button is now visible in the designer, just like in the graph view.

  • New: The Scroll Box now has Scroll to End and Scroll To Start Blueprint callable functions.

  • New: The Widget Reflector can detect UMG widgets as being different than normal slate widgets, and the source link is replaced by a link back to the Blueprint asset. Animations on widget Blueprints can now be looped a specified number of times (or indefinitely) The Details panel in the designer view now correctly shows the selected widgets properties after going to the graph and then returning to the designer. The DPI Scaling settings for UMG now properly label the axis that each value represents. When renaming an animation we now also check for a valid variable name as well as checking collisions with other members of the Blueprint. This prevents a common crash when renaming animations to match other members in the widget. Widgets are now selected after being placed. Fixed poor performance when using screen space widgets coming from components. We no longer attempt to recreate them every frame, and then remove them from the viewport.

  • Made some improvements to Drag/Drop.:

  • Now allows you to choose a pivot, and offset.

    • The drag data can no longer be Garbage Collected while the drag is being performed.

    • The drag pivot now defaults to Center,Center.

    • In order to reduce drag/drop popping on begin drag there is now a small interpolation that occurs to move the object to the chosen pivot/offset.

    • The Default Drag Visual is now correctly marked as ReadOnly.

  • Fixed several UMG designer bugs when resizing, moving, re-anchoring widgets.

  • You can no longer construct of abstract widget classes using the CreateWidget Blueprint node. If the class has the abstract flag, CreateWidget will return null.

  • Fixed text or checkbox state changes not being remembered when a UMG widget's slate widget is recreated.

  • Fixed a crash that occurs when compiling a UMG widget without any animations, and without the timeline/animations visible. Causes an object to be garbage collected. We now report the object reference to prevent GC.

  • Fixed a crash that would occur in UMG when adding an event handler to a widget after editing a value on the widget that caused a Garbage Collection.

  • Fixed a crash when the animation tab is removed from UMG, future runs would fail to initialize the binding object the edtior would crash.

  • Fixed an editor crash and memory corruption issue that occurs when UMG 3D Components have been placed in the level and the widget they spawn is recompiled with certain changes.

    • Restructuring the way external Blueprint compilers are registered so that they can properly wait until all compiling has finished to do re-registering of components and complete other post compile work.

  • Fixed an intermittent crash in the Designer that occurs during compile when you have an item in a canvas panel selected.

  • Fixed many problems with the String Combobox. Updating/Refreshing issues as well as crash bugs when clearing the list.

  • Fixed several crashes in the hierarchy view from edge cases not being accounted for when moving widgets around.

  • Fixed spelling of Visibility on widgets. Now using a class enum with a specified size, this appears to fix the issue with visibility bindings returning bogus values on the stack, likely due to it being seen as an int32 vs. uint8 sized value in different places.

  • Fixed a bug in the UMG animation timeline where resizing a keyframe section to zero would make it uneditable.

  • Fixed 3D UMG UI widgets from appearing as a green quad for one frame when they become visible.

  • Fixed a bug where renaming UMG widgets to a used name in the hierarchy could cause a crash.

  • Fixed a bug where you couldn't safely access the certain functionality of a UMG Widget in the On Constructed callback.

  • Fixed a crash that could happen while transitioning to PIE (Play In Editor) with a UMG editor open

  • Fixed UMG UI Widget recompiles not updating 3D widgets in the world when not in realtime rendering mode

  • Named slots to no longer disappear when PIE occurs.

  • Removed binding options on the Root of a widget since they were not expected to work.

  • It is now safe to call IsPressed on a button before it has been added to the screen.

  • All UMG widgets when adding to the viewport now start at z-order 10 instead of 0

    • This ensures all UMG items always appear above items added by the engine like the virtual joystick on mobile.

    • This prevents a common issue people encounter with UMG, having their UIs get interleaved with the virtual joystick, which absorbs all hits.

  • The Virtual joystick is now able to lock the finger index when clicked allowing it to work with other UI on the screen and now lose capture if your finger moves over other UI elements.

  • Fixed a crash on recompile of widget Blueprints if the editor is not yet available.


  • New: Added double buffering for the bone transforms on Skinned Mesh Components.

    • This solves issues when you use a bone transform while it has not yet finished being modified by the animation system. Now the animation system waits until everything is complete (including physics simulation being blended in) before updating the public bone transforms.

  • New: Added a new option to Anim Notifies context menu in Persona that will open the source Blueprint for that notify (if it came from a blueprint).

  • New: Added warning to Persona to make it more obvious that changes to preview properties will not be saved in the asset

  • New: We now support Blueprints and AnimNotify_State as branching points!

  • Branching Points refactor. BranchingPoints are now regular AnimNotifies, with their MontageTickType set to 'BranchingPoint' instead of 'Queued'.

  • New: Added the Static Mesh Morph Target MAXScript to Engine/Extras/3DSMAXScripts

  • New: Removed Blueprint Notify for State Transition Event

  • New: Removed the user driven path to create rigid meshes and instead made the FBX importer automatically attempt to import a rigid mesh if a skeletal mesh appears to have no bone hierarchy.

  • New: Fixed a bug related to dynamic parameters on mesh particle emitters, that could cause a crash under certain circumstances.

  • New: Added the ability to create a Blueprint from the Trail Notify State where you can then override the default particle system template by implementing the OverridePSTemplate function.

  • Hid the backward/forward buttons in the animation asset browser when in Anim Blueprint edit mode, giving more vertical space for the asset list

  • Fixed crash with index mismatches often after skeleton retargeting or reimport.

  • Fixed a crash when right-clicking on variable nodes inside state machine transition rules

  • Prevented editing preview properties in Persona when stopped at a breakpoint as it is unsafe

  • Reduced tick overhead of Skeletal Mesh Components by removing "Post Physics" calls.

  • Added reconciliation to montages on load to make sure the correct length is used. If a mismatch is found a warning is logged prompting a resave of the asset.

  • Fix issues during reimport if the skeletal hierarchy had changed a lot.

  • Event Dispatcher is disabled in Animation Graph since it doesn't make sense and it causes crashes.

  • Removed editor only Transform Curve data from being cooked resulting in a crash on cooked platforms.

  • Fixed "Preserve Local Transform" not appearing in the FBX import UI when importing a skeletal mesh and its animations together.

  • Fixed a bug with looping Interpolation didn't work with Time, so it now doesn't do time interpolation at all.

  • Fixed a crash caused by having empty animation tracks when loading an animation montage.

  • Fixed a crash which could occur when undoing adding a new curve.

  • Fixed a crash in Persona's preview tooltip when a selected item did not have a preview mesh assigned.

  • Fixed a crash in the root motion system when a Montage or Composite asset has an empty animation segmant

  • Fixed a crash when changing the parameter range of a Blend Space 1D asset

  • Fixed a crash when selecting IK nodes in Persona

  • Fixed animation notifies collapsing down to time zero.

  • Fixed animation notify events defined in animation assets not correctly appearing in the Blueprint context menu when trying to place event nodes.

  • Fixed Character Movement not working when "Root Motion from Everywhere" is turned on

  • Fixed crash in Parallel Animation Evaluation when the Skeletal Mesh is changed during evaluation.

  • Fixed crash related to linked montage elements being removed from their track.

  • Fixed crash when copy and pasting Animation Notifes.

  • Fixed crash when layer node is corrupted

  • Fixed crash when retargeting animation from a null Skeleton.

  • Fixed crash with animation when track is mismatched with skeleton

  • Fixed erratic movement of animation montage elements in some instances

  • Fixed incorrect root motion multiplication order that broke root motion rotation.

  • Fixed incorrect times for pasted anim notifies in Persona

  • Fixed issue where Blend Space doesn't start when interpolation set up is not correct

  • Fixed issue with not updating viewport when update animation data.

  • Fixed local-space bounding box for skeletal meshes being incorrect (was causing problems in materials that used the mesh bounds).

  • Fixed montage composite sections collapsing down to time zero.

  • Fixed one frame delay with Blend Space Evaluation Node.

  • Fixed Persona's montage panel not correctly updating to the correct sequence length without an editor restart.

  • Fixed retargeting to no longer apply incorrect translation when parent is not present.

  • Fixed Skeletal Mesh corruption caused by non thread safe code in the animation system.

  • Fixed so that Animation Montage instances are kept referenced correct even if not transient to support map transition

  • Fixed so that the end delegate for AnimMontage will call with proper reference

  • Fixed the "Ignore Root Motion" mode not properly extracting the root motion from the root bone

  • Fixed transition rule crossfading so that it isn't possible to divide by zero on updating the transition if the same transition was taken multiple times in a single tick.

  • Fixed transition rule notify parameters not appearing in Persona

  • Fixed animation stretching caused by a bad optimization


  • New: Newly created Blueprints now have a few nodes pre-placed to jump start Blueprint construction. These nodes are disabled until you actually hook something up to them.


  • New: All local variables, used by event graphs, are stored on a persistent frame. (Blueprint compiler optimization)

  • New: Set Defaults for Blueprint Local Variables. You can now easily set default values for local variables in your Blueprint functions. Every time the function is entered, these variables are reset to the default.


  • New: Added new node for enabling or disabling actor ticking


  • New: Add Component nodes for non-scene component subclasses no longer display the unused RelativeTransform and bManualAttachment pins


  • New: Added a boolean output to Blueprint pure cast nodes (so you can detect if the cast succeeded or not).


  • New: Added a pin for the Touch Event to deal with Moved.

Previously only Pressed and Released were handled.

  • New: Added "Is Valid Class" node to Blueprints, which returns true if the passed-in class is a valid class to use.

  • New: "Infinite Loop" error messages are now posted to the message log with a helpful notification to inform the user to that something happened.

    • Message will provide links to the node where the crash occurred, the Blueprint asset it occurred in, and the callstack that led to the crash.

  • New: Added ability to reference actors by name in Blutilities

  • New: Added Actor Component as a Blueprint variable type (so you can reference all components by their shared base type)

  • New: Added an experimental Blueprint setting that will default cast nodes to their pure form (without execution pins).

  • New: Added Get Components By Tag, a Blueprint callable function used to find components on an actor

  • New: Added new "Select Class" node to Blueprints, which will return one of the two given classes based on the input boolean. This is similar to the other Select nodes such as "Select Object", except it takes a class.

  • New: Added padding to variable set nodes so that the exec wires will line up with other nodes


  • New: Added scientific notation support to Blueprint node inputs (so they accept input like: 1.2e5).

  • New: Added support to reference an actor by its name in Blutilities, which allows tutorials to create references to objects that may or may not exist in the current level.

  • New: Added UI helpers functions to get information about the current editor selection and viewport perspective to placed Blutilities

  • New: Adding Interfaces to Class Blueprints and setting a pin or variable type will now list unloaded Blueprint assets to be able select from.

  • New: Blueprint Context Menu "scoring" improvements - 'if' now selects the 'Branch' node by default; 'parent' and 'owner' now select Get Owner when working with an Actor Component

  • New: Blueprint Diff Tool Improved

    • Added Components and Defaults views to the diff tool

    • Added Command Line access: UE4Editor.exe -diff [options] LEFT_FILENAME RIGHT_FILENAME

    • Unified list of differences into a tree view that displays differences in all parts of a blueprint

    • Known Issues: Changes made in the "My Blueprint" panel are not present in the list of changes

  • New: Changed the user description on Blueprint assets to allow multiple lines, which can be added by using Ctrl+Enter in the edit field

  • New: Changing Blueprint variable types no longer requires all of the variable's nodes to be removed.

    • Node's variable pins will disconnect due to the type change and a global search will be done to show the user where the variable is in use so pin fix-ups can occur.

  • New: Clarified error message for Message nodes that had no input pin

  • New: Clarified tooltip on Blueprint node "Division (whole and remainder)", tooltip no longer refers to ambiguous "A" and "B"

  • New: Clarified tooltip on Blueprint node "Random Integer In Range", now explains that Min and Max are inclusive

  • New: Class pickers and content pickers on nodes now allow you to search and use the arrow keys without clicking or tabbing to change focus.

  • New: Comment bubbles on re-route nodes have been adapted to display when the user hovers the node to allow complex graphs to provide better information in cases with more complex wiring.

  • New: Custom Event created from an Event Dispatcher pin has the same signature as the Event Dispatcher.

  • New: Added a row editor for Data Tables, so they can be edited directly from within the editor

  • New: Text Gathering from Data Table Assets! Text in data table assets are now gathered automatically for localization

  • New: Exposed 2D Dot Product and 2D Cross Product methods to Blueprints

  • New: Exposed Set Tickable When Paused and Set Component Tick Enabled on Actor Component to Blueprints

  • New: Find in Blueprints now stores searchable data in the asset instead of using the Derived Data Cache (DDC), this makes searchable data more reliable when assets are used on multiple machines.

  • New: Level Blueprints and Blueprinted Components are now searchable using Find in Blueprints

  • New: Get Data Table Row Names node added to Blueprints, which returns the names of all of the rows in a Data Table column

  • New: Added new 2D Vector interpolation functions to Blueprints

  • New: The Make Array node will no longer reset to wildcard when all pins are disconnected. Instead, a Reset to Wildcard context menu option will become available if no pins are connected.

  • New: Placed Editor Utility Blueprints can now select Actors and clear the selected Actors in the Editor.

  • New: Added support for being able to grab information about the level editor viewport camera and the current selection set from Blutilities, to aid in making tutorials

  • New: Replacing actors in the level viewport will automatically replace all references in the Level Blueprint.

  • New: Selecting custom events in the My Blueprint window will function as if selecting the event node.

  • New: The 'Class Defaults' and 'Class Settings' toolbar buttons now light up when either of them are currently being edited in the Details panel

  • New: The comment bubbles used in all the graph editors have had some attention to try and improve usability, this includes:

    • Directly editable bubbles so now there is no requirement to edit the comments in the context menu

    • Support for multiple line text editing

    • The ability to show/hide the bubbles independent of the comment text being present

    • Functionality that allows the user to determine how the bubbles behave when the graph is zoomed

  • New: This adds the ability to mark Blueprint variables as config variables, this means that default values can be set in the config file.


  • New: Uncategorized functions will no longer be categorized into a "Class" category in the Blueprint node context menu when being displayed for a currently selected level Actor.

  • New: Variable set nodes now have an output pin to get the value of the variable, allowing the user to re-use the Set node instead of placing a separate Get node.


  • New: When Blueprint functions that change from impure to pure, the execution pins in the graph will automatically update to maintain the execution flow.

    • Several Actor class functions became pure (Get Distance To, etc.)

  • New: You can now drag-drop assets and component classes from the Content Browser into the viewport in the Blueprint Editor

    • These behave as if they were dropped in to the components tree, creating new components and attaching them to the root where possible

  • New: You can now drag-drop C++ and Blueprint actor classes from the Content Browser into the components tree to create new child actor components

  • New: Added 'Convert Selected Actor to Blueprint Class' and 'Convert Selected Components to Blueprint Class' under the Blueprint toolbar button in the level editor

  • New: Exposed a Print Text node, which works like Print String but takes localizable Text object instead

  • New: Input Key and Input Actions are now listed in the My Blueprint panel

  • New: Inheritable Blueprint Components: Allow Blueprints to modify the properties of their parent components

  • New: Fixed Get Component By Class nodes so their return type matches the class set by the Component Class input.

  • Blueprint subclasses of Actor Component can now pick a category for the Add Components menu using the Blueprint Category property in Class Settings

    • Note: Currently this only works for loaded Blueprints, unloaded Blueprints will always show up in the Custom category

  • Allowed component category headers in the Add Components list to be displayed even when the list is filtered

  • User Defined Enums are now properly loaded when used by Blueprint Macro Libraries.

  • User Defined Struct instances are filled with default values in property editor.

  • Variables of type User Defined Struct, that are not compiled when a project is closed, are now visible when the project is reopened.

  • Fixed graphs not showing the proper text for components and widgets that have been renamed.

  • Added Actor Component and Scene Component to the 'quick list' of Blueprint parent classes when creating a new Blueprint asset in the Content Browser

  • Changed systemic renames of construction created components as a part of destroy to no longer be considered transactional

  • Made a fix to ensure that functions and properties from the current Blueprint appear in the action menus if the Blueprint requires compilation.

  • Tutorial Blueprints can now "soft reference" Actors in the Editor, enabling them to interact with Actors without locking out their ability to save.

  • Changed the messaging for editing the class default properties of a Blueprint to be consistently referred to in code and documentation as "Class Defaults" instead of "Blueprint Defaults" or other names

  • Clarified the comment for delay and retriggerable delay nodes to indicate that the duration is in seconds

  • Script Component was renamed to Script Plugin Component in order to differentiate it from new Blueprint Components.

  • The Blueprint compiler now includes the type name in the error message when it encounters an unsupported data type.

  • "Delete" option for Blueprint nodes will gray out if none of the selected can be deleted.

  • Actor input pins on Blueprint nodes will now only display the Actor picker if the node is in a Level Script Blueprint.

  • Added category for On Destroyed and On End Play, previously they were under the 'Event Dispatchers' category.

  • Added tooltips to each window displayed in the Blueprint Editor Window menu

  • Adding and removing interfaces from Blueprints, as well as reparenting, will no longer drop the current details view.

  • All instances of the class will now be removed from the current level when choosing to force delete a Blueprint Class asset.

  • Fixed an issue where external timelines were being duplicated to the Blueprint after a copy/paste operation instead of using a reference to the external timeline.

  • Blueprint graph editor window no longer recreates widgets when compiling a blueprint, which speeds up compilation for large blueprints

  • Blueprint methods for Date Time to Text conversion now assume the supplied Date Time is of the "Unknown" timezone, rather than local machine's timezone.

  • Fixed the Blueprint Editor's debugged world combo box not being updated when a new object was selected

  • Brush and its sub-classes can no longer be spawned by Blueprints using the "Spawn Actor from Class" node.

  • Changed "Convert to Composited Blueprint" to "Convert to Class Blueprint" to make the functionality more clear. The button will create a new Class Blueprint with the components from the selected actor.

  • Converting an actor or selection of components to a Blueprint now attempts to preserve the existing component names rather than resetting them to default names

  • Crash fix when editing multiple Math Expression nodes at once

  • Crash fix when launching a cooked project that uses a Game Instance Blueprint.

  • Custom event net replication flags are now properly inherited by custom event overrides in child Blueprints.

  • Functions hidden to the current Class Blueprint can still be copy and pasted or dragged from the Palette so other classes that do not hide the function can still use them.

  • Improved handling of illegal name collisions in the compiler so that ones that are missed turn into a recoverable Blueprint compile error rather than a failed assert crash

  • Interface output pins can no longer be directly connected to Object input pins. A conversion node is now required, which can be placed from the context menu by dragging off the Object pin..

  • Fixed a problem with curve output pins missing from timeline nodes when reloading a previously made Blueprint.

  • Graphs created by Math Expression nodes are no longer editable, these graphs are auto-generated by the node.

  • Hide global Actor class defaults that aren't related to the selected component when C++-defined components are selected in the Blueprint editor.

  • Level actor references on loaded levels will no longer display the incorrect display name for the actor.

  • Made Random Stream node no longer discard their seed and initial seed

  • Make Array will now always have default values for each unconnected input pin once pin type has been determined.

  • Overridable functions in the My Blueprints panel now display the same tooltip as when the function has been overridden.

  • Proper Display Names are now shown for User Defined Structs, instead of unsanitized C++ names.

  • References to Actors in sublevels can no longer be added to the Level Blueprint of other sublevels

  • Removed the "Save Intermediate Build Products" option from the Blueprint editor's compile menu (still in the editor's File->Developers menu).

  • Removed the "selected actor" section from the Level Blueprint's context menu, when dragging off a pin (because it was providing confusing/duplicate options).

  • Renamed the "Replace with Composited Blueprint" button to "Convert to Class Blueprint" to make it more clear what the button does

  • Selecting variables, functions, and macros and other Blueprint items that display pin type selectors, have had their performance greatly improved.

  • The components tree in the Blueprint editor now shows the proper root component when it's set in code to something other than the first native C++ component that's defined for the Actor class.

  • The context menu in the Blueprint Graph editor view now filters out functions with metadata that would disallow it from being placed into the current graph context.

  • The Default Value for a Timespan variable doesn't reset when its Blueprint is compiled.

  • Addressed a problem with comment nodes whereby you could create a comment around a set of selected nodes but moving the comment wouldn't move the nodes until you re-selected the comment.

  • Improved the comment detection of enclosed nodes to include off screen nodes.

  • Limited the scope of classes that component Blueprints can be re-parented to, this should now only display Actor Components and any of it's children

  • Fixed issue with the Default Value Panel for User Define Struct not displaying correct defaults.

  • Details panel filter area is no longer hidden when a variable is selected in a blueprint

  • Double clicking an Actor reference will jump to the referenced actor in the Level Editor.

  • Some erroneous errors from Blueprint compiler are fixed.

  • Expanding macros with illegally placeable nodes in the current graph will no longer crash.

  • Fixed crash when duplicating auto-generated Blueprint component variables.

  • Fixed properties on components not being properly copied from actor instances to new Blueprints when using the "Replace with Composited Blueprint" button

  • Fixed new Blueprint Classes sometimes not appearing in the Class Viewer or Class Picker instances.

  • Fixed Blueprint-related crash occasionally encountered when duplicating levels in the asset browser.

  • Fixed some problems with comment bubbles where the following happened

    • Changing the comments on custom event nodes renamed the nodes instead of adding a comment.

    • Compiling or closing a Blueprint would lose changes to any recently modified comments.

  • Fixed comments entered through the node context menu to automatically show/hide the node comment bubble.

  • Fixed bug that allowed incompatible delegate pins to be connected.

  • Fixed a bug in the Blueprint construction script that caused a crash when referencing another Blueprint of the same type.

  • Fixed a bug in the Blueprint diff-tool that flagged timelines with empty curves as different.

  • Fixed a bug that caused a Blueprint crash when a node's interface input was left unconnected.

  • Fixed a bug that caused a crash when deleting a vertex-painted mesh from a Blueprint's components.

  • Fixed a bug that occurred when creating a Blueprint from a static mesh in the Content Browser, and caused a crash when using the context menu thereafter.

  • Fixed a bug that occurred when renaming a matinee track, where the corresponding matinee Blueprint node would be left with invalid connections.

  • Fixed a bug that would break calls to Blueprint event-dispatchers from the level Blueprint (after reloading the level).

  • Fixed a bug where a Blueprint could crash if it had a cast node for a type that had been deleted.

  • Fixed a bug where an exposed Blueprint variable would be cleared when hitting Play.

  • Fixed a bug where event dispatchers would not show up in the Blueprint context menu.

  • Fixed a bug where the first change to a Blueprint's defaults could not be undone.

  • Fixed a bug with Blueprint array nodes, where they wouldn't handle connected self nodes (they would treat it as an invalid object).

  • Fixed a bug with Blueprint automation testing, where all Blueprints were getting marked as having unsaved changes.

  • Fixed a bug with Blueprint math-expression nodes that could cause cooking and packaging to fail.

  • Fixed a crash in Blueprint editor when deleting default element of array struct variable

  • Fixed a crash that could occur when using Canvas Render Target objects

  • Fixed a crash when a child Blueprint is reparented and the previous parent is recompiled.

  • Fixed a crash when renaming a Blueprint or instance component in a way that conflicted with inherited components added in C++

    • The rename is now blocked if it conflicts with either the component object name or variable name, as they can differ for native components

  • Fixed a crash when the Game Instance class could not be found when Playing in the Editor.

  • Fixed a crash when undoing a default value change to a variable

  • Fixed Blueprint compiler error after deleting a Format Text node.

  • Fixed Blueprint node copy and pasting to prevent you from pasting a macro node into an unrelated Blueprint.

  • Fixed crash in editor when creating an input boolean inside of a Blueprint interface with an improper default value

  • Fixed crash when using input nodes that have a Key picker in the details panel.

  • Fixed missing tooltip on Input Touch node.

  • Fixed precision issue that could cause Static Meshes in Blueprint Classes to lose precomputed lighting.

  • Fixed several places where Blueprint-callable functions would crash if there was no valid World associated

    • This could happen in particular when using the Receive Init event in a Game Instance Blueprint, in a standalone game.

  • Fixed some issues with lost or locked root components when reparenting Blueprints to classes with a different inherited component hierarchy

  • Fixed the Blueprint debugger, so it now will show pin values for the Blueprint's parent.

  • Fixed up older event nodes on load to ensure that they include a delegate pin.

  • Fixed up several component registration issues in and around Actor-based Blueprint instance construction paths.

  • Fixing the class picker so that it's not clipping the contents of the dropdown list.

  • Fixed a crash when changing a Vector variable in a Blueprint's transform

  • Fixed the picking a new component in the Blueprint editor creating a component with the same name as an existing native component

  • Fixed a "Graph linked to external object" problem that could occur with in data-only Blueprints.

  • Fixed a "Graph linked to external object" error that could occur when converting instances in the level editor into Blueprint classes

  • Fixed a bug where compiling with a custom event or input event selected in the My Blueprints panel would deselect it

  • Fixed an issue where editor-only components created by other components were being harvested when creating a Blueprint from an actor selection

  • Fixed an issue where folders would not be expanded to show the newly selected item in My Blueprints when something else forced selection to change

  • Fixed a crash that could occur when adding a text array to a user defined structure.

  • Fixed selection highlighting so that Blueprint editing and C++ class source hyperlinks are still readable when selected and unfocused

  • Fixed various issues with default transform property value propagation and "live" property defaults editing in the Blueprint editor.

  • Fixed various issues with the title for Add Component nodes

    • Generalized how asset names were gathered, allowing it to work correctly with any component type, instead of a small hard-coded list of types

    • Fixed an issue where the component title was latched and didn't update when the template was modified

    • Added a second line to the asset information display when showing the full title.

  • Fixed some problems when changing maps after editing Blueprints where the previous map was unable to be unloaded before entering the new map.

  • Fixed support for the default details view in the new Blueprints editor layout and prevent refresh actions such as compilation from causing problems with the details view.

  • Made a fix to ensure that all component templates stored in Blueprints are marked public and are importable to maps.

  • Fixed missing object path text in the node comments being shown in the reference viewer

  • Fixed info bubbles such as watch values in the graph editor becoming obscured by the nodes comment. This fixes the functionality to stack the bubbles correctly.

  • Fixed User Defined Struct editor accepting an empty name

  • Fixed regression where node comment bubbles (watch values, anim states, timeline/latent delay display, etc...) would be hugely inflated

  • Fixed various issues with inherited native components that had a mismatch between their member variable name and object name

    • Prevents renaming a component to a name that would conflict and crash when the construction script is rerun, improves displayed tooltips, and allows drag-dropping from the components tree to the Blueprint graph to access the variable


  • New: Added basic path-following support to the Floating Pawn Movement component

  • New: Added a blueprint-implementable event to AI Controller, On Using Black Board, that can be used to initialize Blackboard values when AI is assigned with new Blackboard asset.

    • The event gets called just after setting up a blackboard component with the new asset, but before any other AI activity, making it a perfect place to feed the blackboard with initial data.

  • New: Added a configurable, optional vertical offset to Environment Query System items projected to geometry or navigation EQS_ZOffset.png

  • Super-useful when projecting points to navmesh which by definition can be cutting through level geometry which in turn can result in failing some later Line-of-Sight checks

  • New: Added a dedicated AI Controller with the Crowd Following component, Detour Crowd AI Controller, to give Blueprint users a way to use detour crowds.

  • New: Added new editor preferences for Gameplay Debugger and Visual Logger tools.

  • New: Added a simple blueprint-assignable delegate to Navigation System that will be triggered when navigation data instances (like navmesh) finish runtime generation. Use it to react to "navmesh generation finished" kind of events. OnNavBuilt.png

  • New: Added a very handy function for extracting, if possible, an AI controller from a given actor. For pawns it results in the pawn's controller cast to AI Controller. For controllers it returns the result of casting to AI Controller. In all other cases it returns None.

  • New: Added alternative Blueprint-implementable events to Behavior Tree nodes supplying users with AI Controller and Pawn instances BT_AIEvents.png

    • This will save you some casts just to get controller and pawn from generic "Owner Actor"

    • These alternative versions are called only if the given node is controlling an AI-driven pawn

  • New: Added an AI Behavior Tree task that waits for an amount of time specified by a Blackboard variable.

  • New: Added Blueprint functions for AI-checking the validity of vectors and rotators

  • New: Added dynamic data binding for Environment Query System (EQS), it will replace existing query parameters

  • New: Added navmesh generation support for World Composition

  • New: Added random number stream to Functional Test instances for deterministic random number generation while running a test

    • AI spawn location randomization now uses it

  • New: Added a warning message when "Simple Move To" Blueprint functions are used on a pawn that can't support path following (e.g. rigid body physics)

  • New: Added the option to specify a random deviation for the "Wait" Behavior Tree Task

  • New: Added the "Check Gameplay Tags On Actor" Behavior Tree Decorator, which conditionally checks whether a gameplay tag, or tags, exist on an Actor.

  • New: Crowd Manager's basic properties have been exposed to Project Settings for easier tweaking

  • New: Exposed Brain Component's functions for stopping and restarting AI logic to Blueprint. Finally Blueprint users will have the power to stop AI from thinking!


  • New: The initial rebuild of navigation mesh is now a configurable option in project settings (Navigation Mesh - Force Rebuild On Load)

  • New: Navigation area modifiers (dynamic obstacles) now work with instanced static meshes and foliage

  • New: Navigation System's supported agents can now specify the navigation data class that should be generated for them


  • Made navigation-related properties' and functions' categories more consistent. Now "Navigation" is being used for properties and "AI|Navigation" for functions.

  • Added a very basic Behavior Tree task for playing animation on the controlled pawn's skeletal mesh


  • The detour navmesh instance is cleared if it has been created during level loading but the loaded navigation data was empty.

  • Added mechanics for AI perception stimulus auto-expiration after a specified time interval

  • Added validation to some Navmesh generation properties to shield users from accidentally entering invalid values.

  • AI Controller's rotation updating mechanics have been updated to take advantage of the AI's focus mechanics

  • Fixed a Behavior Tree editor bug resulting in users not being able to open and edit composite decorators.

  • The Behavior Tree editor no longer checks out blackboards that are not dirty

  • Pressing enter now refreshes Behavior Tree search results

  • Stopped EQS Testing Pawn from trying to run environment queries in response to changes to its default properties

  • Unused EnvQueryGenerator_PathingGrid's property Trace Type has been removed

  • Changed the default value of Acceptance Radius for the AI Move To Blueprint node to supply users with a better initial setup out of the box.

  • Fixed crash bugs which could occur in editor when selecting an EQS Test node in Environmental Querying System

  • Fixed "Simple Move To" Blueprint functions not affecting move when a new request fails (path doesn't exist or already at destination)

  • Fixed a bug in the AI Move To Blueprint node that resulted in not updating paths automatically if the destination actor moved.

  • Fixed a bug in the navigation system that resulted in navmesh not being generated on BSPs if NavMeshBoundsVolume was created in a navigation-less level

  • Fixed broken NavMesh debug collision data rendering

  • Fixed a bug where the navigation system would ignore the first navmesh generation request in levels containing broken navigation data

  • Fixed a crash on loading maps with navigation data saved while navigation system creation was disabled in World Settings

  • Fixed AI agent's radius being used incorrectly when determining if the move goal has been reached, which resulted in AI stopping prematurely.

  • Fixed AI Controller's MoveToLocation misusing "Stop on Overlap" while testing if AI is already at the goal location

  • Fixed AI Perception System hijacking the engine's MakeNoise implementation, even if the perception system is not being used, effectively blocking Pawn Sensing Component's hearing

  • Fixed AI Perception System ignoring registration requests of stimulus sources when no one was listening to a given sense.

  • Fixed behavior tree decorators and services remaining active after looped execution

  • Fixed Blackboard asset editor not displaying user-defined enum values properly

  • Fixed Blackboard icons being tinted incorrectly

  • Fixed Blueprint-implemented Environment Query System generators erroneously complaining about storing wrong item types

  • Fixed broken navigation mesh generation (multiple overlapping polygons) for very small tiles

  • Fixed broken navmesh generation creating a lot of overlapping zones

  • Fixed bug in the Rotate To Face Blackboard Entry task where values set in the Behavior Tree Editor were not being used

  • Fixed crash when generating the cluster map for navmesh

  • Fixed crash when updating a crowd's path queue for agents using custom link filters

  • Fixed creating dynamic navigation obstacles from static meshes without cooked collision data (Gather Convex Geometry flag)

  • Fixed crowd simulation skipping some custom navigation links

  • Fixed disappearing navigation mesh on map load when automatic navigation rebuilds are disabled

  • Fixed doubled collision data for brush geometry

  • Fixed doubled collision data in the navigation system after dragging an actor from the class viewer window

  • Fixed doubled collision data in the navigation system after loading a sublevel containing geometry brushes (BSP)

  • Fixed editor crashes resulting from using very large values for navmesh generation properties

  • Fixed execution of the Simple Parallel behavior tree node when the main task is blocked by decorators

  • Fixed full restart of a behavior tree checking only the first branch of the root node

  • Fixed generating navmesh polys from complicated contours by adding a separate code path with dynamic allocations

  • Fixed movement requests that don't require navmesh (like not using pathfinding) not working in absence of any navmesh in the level

  • Fixed navmesh generation crashing when the Recast Nav Mesh instance gets removed to be replaced by one created for a Navigation System's Supported Agent

  • Fixed pawn actions not communicating failure when resuming which could result in a behavior tree task waiting for action finish to hang indefinitely

  • Fixed random reordering of decorators after rapid clicking on behavior tree nodes

  • Fixed updating the navigation mesh when moving an actor with other actors attached to it

  • Made abstract EnvQueryContext_BlueprintBase not show up in the Environment Query System editor's menus

  • Made the Character Movement Component "Set Avoidance Enabled" method unavailable in construction scripts since it was never intended to be used outside of actual game scenarios

  • Major fix to Blueprint-implemented Behavior Tree decorators

    • Fixed blackboard key observing not working at all

    • Now it is possible to have Receive Condition Check called every frame for continuous condition checking

  • Fixed verbosity information collected by visual logger. Visual Logger tool shows it correctly too.

  • Fixed behavior tree's decorators remaining active after selecting a task with higher priority.

  • Fixed jittering of slow AI agents following a path on a slope (by increasing thresholds of the 2D reach test).

  • Fixed usage of direct navigation paths (straight lines) in path following.

  • Fixed a crash on accessing filters for direct navigation paths.


  • New: Added ability to set amount of loops on Looping Sound Node


  • New: Added support for the creation of surround sounds from single files at a time

    • This uses a special file naming convention, where the suffix of each file specifies the surround channel

    • Imported sound files must be mono and each channel should end with one of the following tags: fl, fr, fc, lf, sl, sr, bl, br

    • A Sound Wave asset will be created with the name of the file minus the tag

    • Imported files that match the name of an existing asset will be added as an additional channel for that asset.

  • New: Updated Audio Volumes so that their Ambient zone settings can be changed in real-time via blueprints


  • New: Added Blueprint node to modify audio listener location and rotation

    • Can be used once to attach the listener to a component (with an optional offset), or every frame to set a specific location and rotation

  • Made audio components that are generated for the purposes of voice chat belong to the VOICE sound group

  • Fixed crash that could occur when streaming very short sounds

  • Fixed incorrect interpolation of volumes when moving in and out of Interior Volumes

  • Fixed issue with Sound Cue Editor not showing execution path


  • New: Added a new Visualization Mode for landscape which renders a wireframe on top of the regular texturing.

  • New: Added an option to require the Ctrl key to be held during landscape and foliage painting

    • This is found under Edit->Editor Preferences->Viewport

  • New: Landscape now duplicates less data when entering Play in Editor (PIE), reducing total the PIE startup time and memory usage

  • New: Landscape now uses the Derived Data Cache (DDC) for collision data. This significantly improves loading time of landscape maps in the Editor

  • New: Improved the Landscape Smoothing tool's to product same amount of smoothing regardless of the brush size

  • New: Significantly optimized performance during landscape editing

  • New: The landscape visualization mode that renders each LOD in a different color now also works in wireframe mode.

  • Fixed a bug causing many duplicate shader compilation jobs to be queued when iterating on a Landscape material that was applied across multiple streaming levels.

  • Fixed a bug that caused a small amount of memory to leak while performing landscape editing actions

  • Fixed a crash using the erosion tool with no landscape layers

  • Fixed a crash when moving two or more Landscape actors to another streaming level.

  • Fixed an issue where the Landscape Layer Sample node caused shader compile errors when a layer is not painted on a landscape component. This caused some areas of the landscape to be rendered with the checkerboard material.

  • Fixed cracks visible on a landscape caused by inconsistent calculations between neighbouring components

  • Fixed crash when duplicating the currently open landscape level using the content browser and then opening the duplicate

  • Fixed crash when pasting landscape copy/paste gizmo data to another landscape that did not have the exact same layer setup

  • Fixed crash when undoing pasting a landscape spline

  • Fixed crash when using the landscape component resize tool in resample mode on a landscape with deleted/missing components

  • Fixed crash with landscape ramp tool (and potentially other tools) when undoing the creation of a landscape

  • Fixed incorrect static lighting on landscape when the landscape was rotated

  • Fixed issues with texture streaming for mirrored landscapes

  • Fixed Landscape "Copy" tool to correctly copy the selected area rather than a circle when using Ctrl+C

  • Fixed Landscape Component brush to be properly centered on the cursor when using an odd brush size

  • Fixed landscape copy/paste gizmo bounds being calculated incorrectly, which was causing it to disappear at some camera angles

  • Fixed landscape copy/paste gizmo not being selected in many situations, which resulted in not being able to move it.

  • Fixed landscape copy/paste tool in "all layers" mode

  • Fixed moving splines to another level potentially adding a large offset

  • Fixed shader compile error when using a translucent material on landscape and using the editor OpenGL ES2 preview mode

  • Fixed slow start of play-in-editor / simulate of level containing a landscape

  • Fixed slowdown when selecting a landscape gizmo actor

  • Fixed some landscapes having erratic editing cursor behaviour, caused by the Section Base values being invalid

  • Fixed the Landscape "Add Component" tool not working when using a component brush size of 2 or more and the cursor is over the landscape (but part of the brush is off the landscape)

  • Fixed various crashes with the Landscape Copy/Paste tools

  • Fixed visual issues with landscape LOD in release builds when LOD Falloff is set to Square Root

  • In the landscape editor using the "clear gizmo data" button now also removes any copied gizmo data from the clipboard.

    • This fixes previous gizmo content appearing again when entering the copy/paste tool even if it had previously been cleared


  • Fixed existing duplicate matinee groups not being overridden when importing new tracks over the top


  • New: Added a color property for Vector / Vector Random parameter types in particle instance parameters.

  • Fixed a crash when converting a particle module to seeded, and undoing.

Project Browser

  • New: Improved the look and feel of the text displayed in the New Project wizard

  • New: After creating a new C++ project, Visual Studio or Xcode will be opened automatically (alongside the editor)

World Outliner

  • New: Actors based on game-specific classes now show a hyperlink in the World Outliner to open the source code

  • Changed the color of dynamically-spawned actors from Blue to Yellow, so they're not confused with Blueprints

  • Transient actors are now visible in Play-In-Editor, but still invisible when not playing.

  • Fixed AI controllers (and other transient actors) always hidden from the outliner

  • Fixed excess memory consumption during PIE when changing worlds.

Static Mesh Editor

  • Continuous mouse wheel zoom is now allowed in the static mesh editor.

Source Control

  • New: Source Control Submit window can now be resized.

  • Fixed Subversion URLs being truncated to "http:" when reloading the editor.

  • The 'checking for assets to check in' step with Subversion is now faster.

  • Updated revision display to display strings rather than revision indices

World Browser

  • New: Added more options for LOD map generation

    • Support for exporting Metallic/Roughness/Specular textures for the landscape mesh proxy material

    • Optional baking of foliage into the landscape mesh proxy texture

    • Option to save generated assets into separated packages

    • Option to select which landscape LOD level to use when generating the landscape mesh proxy

  • New: Improvements to the Tiled Landscape Import dialog box

    • The material property now accepts Material Instances

    • Tiled weightmap import now supports PNG images

    • Error messages now describe any errors with input data

  • New: When World Composition cannot be enabled (e.g. the map has not yet been saved), the user will now see a message explaining why it can't enabled, instead of silently failing

  • New: World Composition now also draws the current camera location on the minimap when in editor mode.

  • World origin rebasing is disabled by default when user creates new world composition map

  • The LOD map generator now exports landscape base color textures in the correct color space


  • New: Made significant optimizations to the Foliage tool performance when working with large numbers of instances.

  • New: Reduced the time to enter Play in Editor mode for maps with a lot of foliage by preventing duplication of editor-only data.

  • Fixed an issue where the foliage UI showed outdated settings after changing the Static Mesh on a foliage type.

  • Fixed issue applying changes made to shared foliage settings objects to instances already existing in levels

    • After making changes to a shared foliage settings object, such as modifying collision or lighting properties, those changes were not applied to levels that were not open when the property was changed.

    • Changes to shared foliage settings will now be applied to instances in levels that were not open at the time the change was made.

  • Fixed rendering corruption such as yellow lines seen when using the foliage selection tools on foliage instances using a World Position Offset material.

  • Fixed the ability to disable static lighting on foliage

    • It is no longer necessary to override the "Light Map Resolution" to 0, which didn't work correctly

    • This is now a separate "Enable Static Lighting" checkbox

  • Foliage painted on BSP is now associated with the Brush actor rather than the generated BSP mesh.

    • Instances will now move when you move the BSP brush.

    • This also fixes an issue where instances painted on BSP would disappear after a rebuild.

    • Note that this applies only to newly-painted foliage and existing instances could still be associated with the BSP mesh instead of the brush actor. You can fix existing instances by selecting them with the Lasso tool, moving them above the BSP and then pressing the End key to snap them to the floor again.

  • The foliage "Light Map Resolution" override now defaults to 8, as the previous default of 32 was impractical for both memory usage and build time


  • New: Added a Paper2D plugin setting that analyzes the texture when you create a new sprite to choose the best blending mode (Opaque, Masked, or Translucent)

    OpaqueMaskedTranslucent.png The above sprites are to Opaque, Masked, and Translucent respectively

  • New: Added a tile index preview for the top-left selected tile in the Tile Set viewer

    • This can be useful to make literal tile info structures when constructing tile maps from code or blueprints

  • New: The tile map editor background color can now be modified and saved on a per-asset basis

  • New: The Tile Map Editor now visualizes the current tool (including selected tile ink) directly in the viewport

  • New: The Tile Set Editor and viewer background color can now be modified and saved on a per-asset basis

  • New: Tile Map Components now derive from Mesh Component, allowing per-instance material overrides

  • New: Tile maps now fully support the Isometric Diamond projection mode

  • New: Tile maps with Isometric Staggered or Hexagonal projection modes can be imported from Tiled, but are not supported for editing yet

  • New: Tile Set assets can now be created from Texture assets using a command in the Content Browser context menu

  • New: Added draw call batching support to tile map rendering, significantly speeding up rendering performance of large tile maps

  • New: Added support for merging tile map layers down on to lower layers (the command is in the context-menu on layer items in the layer browser)

  • New: Allow adding additional vertices on top of an existing edge in the sprite editor (Shift+click always adds rather than preferentially selecting existing proxies)

  • New: Improved sprite extraction behavior by generating a much better ordering for sprite sheets (it now sorts rectangles by row and names each with an explicit desired number suffix)

  • New: Improved comments and exposed various properties from tile map assets and components to Blueprints

  • New: The tile map editor now keeps track of the last selected tile set for a tile map and defaults the tile set viewer to that asset when it is reopened

  • New: The tile map editor now switches to paint brush mode if we were in the eraser mode when a new tile selection is made

  • New: Tile map assets can now be created directly, rather than being listed under data assets, and they will always contain a new empty layer when created

  • New: Added a search bar to the details panel in the sprite and flipbook editors

  • Grid rendering in the Sprite, Flipbook, and Tile Map editors is now off by default, but can be enabled from the toolbar

  • Importing a Tile Map now remembers the first imported Tile Set as the selected set, so it is immediately ready for editing

  • Removed the 'Beta preview' watermark from the sprite editor

  • Tile maps and associated assets can now be created in any project without having to enable a setting

  • Added support for the DoesSocketExist interface to flipbook and sprite components

  • Made the flipbook asset type color green instead of cyan, so it is distinct from sprite assets

  • Added a property restriction to prevent sprite collision geometry type from being set to Diced, which is an ignored value for collision geometry

  • Adding a new layer to a tile map now inserts the layer above/below the selection, instead of always adding it at the end of the layer list

  • Change asset type colors for tile maps to gold and tile sets to orange so they don't conflict with sprite assets

  • Fixed an issue that prevented smooth panning of tile set preview viewports

  • Fixed an issue when rendering orthogonal tile maps that was causing them to appear in the wrong place (off by one full tile)

  • Fixed bounding volume on tile map components to properly account for layer depth, preventing the components from being accidentally culled

  • Fixed flipbook thumbnail preview bounds zooming in/out from frame to frame (now uses the union render bounds for all frames)

  • Fixed incorrect math in tile map editing intersection code that caused editing to feel inconsistent

  • Fixed tile map layer visibility toggles not taking effect immediately

  • Fixed z-fighting on tile map edit mode cursor preview

  • Improved display message when no ink is selected in tile map edit mode

  • Prevented drawing the grid lines for the selected layer in a tile map when there are no layers

  • Prevented pivot cross from being drawn in tile map edit mode

  • Selecting a tile from a tile set now takes effect immediately on mouse down, allowing click-and-release without dragging to work as expected, selecting a single tile

  • Significant optimization to sprite importing speed when there are many sprite instances already in the level (from 10 minutes to 18 seconds in some test cases)

  • Tile map layer edits now cause placed tile map components using the layer to reinstance, reflecting changes immediately

  • Tile selection improvements

    • Tile selection now works on the right and bottom edges of a tile set

    • Changing the active tile set now updates the selection preview appropriately

  • Tile map editing mode is now activated only when pressing "Enter Edit Mode" on a tile map, and can be left by selecting a different actor or switching to another mode. It no longer shows up in the always-visible modes list of the editor since it is selection-dependent.

Gameplay Framework

  • New: Input Components and Actors can now specify an Input Priority value. This gives more fine-grained control over the order in which they get to handle input.

    • For C++ this is generally handled by setting the priority value directly on the Input Component prior to pushing it on the Player Controller's input stack.

    • For Blueprints this is set in its defaults.

    • Note that this only applies to Actors/Components that have their input Enabled dynamically, it does not affect the order in which the automatically enabled Pawn, Controller, and Level Script Blueprint inputs are processed.

  • New: Actor "Is Tick Enabled" is now callable from Blueprints.

  • New: Actor tick properties 'Start with Tick Enabled', 'Tick Even When Paused', and 'Allow Tick On Dedicated Server' now available to control via Blueprint defaults.

  • New: Added a loading spinner to the Web Browser widget that will be shown until the page is first rendered

  • New: Added a new Project Setting that allow you to configure what the desktop window title displays for your game

  • New: You can place Spline Mesh Actors directly in your level, which allows you to extrude a mesh along a 3D curve that you can edit in the viewport!

  • New: Added finer control for when AI Pawns (with an AI Controller Class set) are automatically possessed. This is done with a new "Auto Possess AI" enum: possess on level startup, when spawned at run-time, both, or neither.

    • Previously the default (and only) behavior was to possess on level startup.

    • Renamed existing "Auto Possess" to "Auto Possess Player" for clarity and to distinguish from the new AI flag.

  • New: Added Get Materials function for SkeletalMeshComponent and StaticMeshComponent so that it works consistently with the Get Material function on components.

  • New: Added option to Camera Spring Arm Component for Camera Lag Max Distance. If non-zero, the target may not lag any further than this distance.

    • Added "Draw Debug Lag Markers" flag to enable debug visualization of the lag target and current location. The visualization changes color when the distance is being clamped.

    • Example video: Camera Spring Arm Component Improvements

  • New: Added substepping to camera Spring Arm Component to address variance at different frame rates.

  • New: Added support for multi-line text using actual newline characters in Text Render Components, which can be entered in the Text field using Ctrl+Enter

  • New: Added Win32 libraries for CEF3, allowing use of the Web Browser project in Win32 builds

  • New: Display name in UI of some Gamepad controls changed to improve clarity.

  • New: Display All Location and Display All Rotation now support components in addition to actors

  • New: Exposed "Disable Movement" node on Character Movement Component to Blueprints.

  • New: Exposed "Spline Up Dir" property on Spline Mesh Component to Blueprints.

  • New: Improved comments for overlap and hit events to give more information, such as any required flags.

  • New: Improved information available in the New Project dialog. Projects now details what types and assets are in a given template type.

  • New: Inline documentation for many framework classes has been improved.

  • New: Movement Components now work with Scene Components, rather than being restricted to updating a Primitive Component.

    • Existing Blueprints that are referencing 'Updated Component' will be converted on load to use 'Updated Primitive' if the variable link is connected to a pin that requires a Primitive Component or child.

    • Added Updated Primitive function to Movement Component, which is a version of Updated Component cast as a Primitive Component.

  • New: Native components attached to Blueprint constructed components will now maintain attachment across reconstruction

  • New: Added nodes for Spline Component to get or set the spline point type and set editor colors for selected/unselected spline segments.

  • New: Exposed "Client Set HUD" on Player Controller to Blueprints

  • New: The default console key for German, French, and Spanish keyboard layouts have been made ^, 2, and 0 respectively.

  • New: Added support to tutorials to allow focus on content browser asset.

  • "Always Loaded" sub-levels will be fully loaded before gameplay code attempts to locate a "Player Start" point.

  • "Possess" button during Simulate now attempts to use any pawn placed in the world with "Auto Possess Player" set to index 0.

    • If not set, "Possess" spawns a pawn as normal, and if there was no Player Start, it spawns at the camera location.

  • New: The "Set Scale 3D" function on Actors is now available to Blueprint scripts

  • Added support for transparency to the Viewport Controls popup

  • Automatic World Origin Rebasing based on distance from local player now shifts the origin only in the XY plane

  • Blueprint created components are no longer referenced by the Undo buffer, which prevented them from being garbage collected.

  • "Owner No See" and "Only Owner See" are now editable in instances, not just defaults.

  • Changed HUD drawing functions now use a default alpha of 1 (meaning opaque) instead of 0 (meaning transparent).

  • Changed "Player State Class" variable in Game Mode to no longer be 'Advanced'.

  • Characters placed in a level without an AI Controller Class but with "Run Physics With No Controller" set to true in their Character Movement Component will now initialize the default movement mode.

    • Previously those Characters would float in the air because movement mode was initialized to "None".

  • End Overlap is now called not just when an Actor is Destroyed, but also when it is Removed from World by streaming out the Level it belongs to.

  • Fixed major stall when moving from one tutorial stage to the next

  • Fixed a divide by zero crash when setting field of view to zero on a camera

  • Fixed a case where sub-levels were not always fully loaded before the player spawns

  • Fixed an edge case where loading with a movie could cause a crash due to a frame without a viewport.

  • Fixed an issue where collision profile isn't showing correctly when checking out the config file the first time

  • Fixed character movement when standing on a non-root component that is destroyed. Previously it would teleport the player near the origin.

  • Fixed character movement incorrectly changing the location of a simulated network Character's mesh that is simulating physics.

  • Fixed crash caused by Actors with a Lifespan being removed from the World via streaming before the expiration of their Lifespan counter.

  • Fixed crash when a matinee sequence calls an event which stops the sequence prematurely.

  • Fixed crash when calling Set Game Paused on clients.

  • Fixed crash when Default Touch Interface is set to None in the project's Input Settings and a touch interface is activated.

  • Fixed crash when making a previously hidden streaming level that contains an emitter visible.

  • Fixed crash when passing an invalid class to the Create Canvas Render Target 2D function.

  • Fixed crash when spawning a decal attached to a Scene Component that isn't a Primitive Component.

  • Fixed crash when using Restart level during Play In Editor when using seamless travel.

  • Fixed focus issues when bringing up the console when Playing in Editor.

  • Fixed issue with viewport controls popup where it would not toggle correctly

  • Fixed issue with Web Browser not responding to keyboard input on Mac

  • Fixed network clients moving incorrectly when they have "Run Physics With No Controller" enabled and they are possessed by a player.

    • The server was running the movement code locally as well as when receiving the client's move, so would send a correction to the client causing jittery client updates.

  • Fixed occasional crash after traveling from a standalone map into to a world composition map during PIE

  • Fixed tutorial nodes not safely checking for focus

  • Fixed tutorial welcome bubble constantly reappearing due to a bug with the close handler

  • Fixed bug with the "Collision" Show mode where newly-spawned actors would not show their collision

  • Fixed tooltips for "expose on spawn" properties only working for some types of classes.

  • Made force feedback behaviors consistent across platforms.

    • PS4 now uses the max of the Large and Small motor instead of an average.

    • XInput (Xbox One, PC) now uses the max of the Large and Small motor instead of ignoring Right Large and Left Small

  • Pawn's Auto Possess AI option is now correctly ignored if Auto Possess Player set on the Pawn, as the tooltip stated.

  • Play in Editor world name prefix is now correctly stripped when testing whether a map name is valid.

  • Removed "Weapon" channel usage from the "UI" Collision Profile.

  • The engine should now fully load all sub-levels that depend on the player's spawn location before gameplay begins

  • When trying to move components with static mobility in-game, a warning is added to the message log, visible after PIE ends.


  • New: Exposed Physical Constraint angles to be readable from Blueprint scripts

  • New: Added 'Ignore Owning Actor' option to Radial Force Component, to allow force/impulse to ignore all components of the owning Actor.

  • New: Added new 'Lock Translation' and 'Lock Rotation' flags for physics bodies that are using the 'Locked Axis' option.

    • This allows you to control independently whether translation and/or rotation are locked.

  • New: Added optimization so PhysX will automatically use 'aggregates' for ragdolls. The threshold for aggregation is available in the Physics section of the Project Settings.

  • New: Added Set Mass Scale and Set All Mass Scale functions to Primitive Component (both Blueprint and C++), to allow changing the mass scale used by physics.

  • New: Added the ability to filter scene queries for individual components!

  • New: Added the ability to register per sub-step simulation callbacks for more accurate application of custom forces.

  • New: Allow the ID column in the Collision Analyzer to be sorted ascending/descending.

  • New: Destructible components can now enable and disable gravity at runtime

  • New: Static Meshes set to 'Use Complex As Simple' will now draw a wireframe mesh overlay when using 'show collision'.


  • New: When choosing a collision profile via combo box, tooltip will now show description of each profile.

  • Collision settings now only displays Game Collision Channels, not Engine Collision Channels, since you cannot edit them.

  • Disabled constraint drawing outside the editor (limit materials were not loaded, so it didn't work anyway).

  • Editing the height or radius of a Capsule Component will now clamp the value you edit, rather than always clamping height.

    • Also improved the comment to make it more clear that Capsule Half Height must be more than Capsule Radius.

  • Fixed several bugs with collision drawing not updating correctly when editing static mesh collision.

  • Fixed the physics collision drawing code so that it properly applies the supplied scale factor when rendering solid boxes, fixing flickering assets in the Player Collision View mode.

  • Fixed a bug when root body of the physics asset did not match the root bone of the mesh, and the scale was less than 1, which caused mesh to fall through the ground.

  • Fixed a bug where cloth asset values reset to 0 when reopening a project after a save

  • Fixed a crash in releasing clothing assets when closing the editor or undoing after changing clothing properties.

  • Fixed a crash inside unwelding code that would happen when a welded object was garbage collected

  • Fixed a crash when the number of materials used by the vehicle manager were too large.

  • Fixed a crash which would occur when an Actor with Continuous Collision Detection enabled is made non-simulating.

  • Fixed crash when locking degrees of freedom with ragdolls that have enough bodies to create an aggregate.

  • Fixed deferred physics commands not being run until after their scene is released, causing crashes.


  • New: Windows XP support for code and content projects

    • Enable this through the "Minimum OS Version" in the Windows Project Settings.

  • New: Cook in editor now invalidates cooked content based on related ini setting changes.

  • New: Housekeeping - Moved some intermediate config files used for file processing to the intermediate directory

  • New: Improved editor performance when using cook on the side.

  • New: "Cook on the Side" (where the editor acts as a Cook on the Fly server instead of a separate commandlet) is now used when using Launch On if the experimental option is enabled.

  • Fixed full-screen resolution changes not working when using DirectX on Windows

  • Available resolutions on OpenGL desktop platforms are now sorted.

  • Fixed an issue where projects would crash if they did not have an intro movie.

  • Fixed an issue with the building of the Android and iOS target platform modules in the GitHUB release when the SDK is not yet installed.

  • Fixed cook on the fly being unable to compile shaders in some cases.

  • Fixed missing XboxOne/Playstation 4 targets when generating project files after unzipping platform source. UnrealBuildTool was not rebuilding to reflect presence of new files.

  • Fixed some rare issues with devices not being detected properly. This issue was generic but likely only affected PS4 and XboxOne in practice due to timing of how they are detected.

  • Fixed some split screen rendering errors where geometry leaked between across the split.

  • Fixed the Windows DualShock input plugin for users that only had PS4 SDK 2.00 installed.

  • Fixes two cooking bugs which could cause default materials to show in cooked non-editor builds.

  • Improved editor performance when caching textures.

  • Merged cook code path is now enabled by default. Old cook code path is still available via commandline options "-oldcook"

  • Performance improvements for cooker startup time.

  • New: Android now supports non streaming mode for cook on the fly. Android now supports cook on the side experimental option from editor.

  • New: Application lifecycle events now work for Android OS. You can now use the Application Lifecycle component to observe the application in Blueprints.

  • New: Improved Android in app purchasing support has been added. Same Blueprint framework as iOS, user can now Begin purchase on a product and it will return a delegate of success/failure with a receipt, if applicable.

  • New: Improved startup loading times on some Android devices.

  • New: We now control Android packaging entirely by Project Settings (AndroidManifest.xml and SigningConfig.xml are no longer used). Androidpackaging.png

    • Please review your Android Project Settings and make changes as needed.

    • AndroidManifest.xml is re-generated every time you package (your original file stored in your project is safe, we just don't use it).

    • All of the relevant settings are now saved in .ini files, which you would check in to share with your team.

    • The settings that were read from SigningConfig.xml are now stored in your .ini file as well (and are stripped out during packaging).

    • The setting for "Package .pak in APK" has been moved to ProjectSettings, and is now called "Package game data inside .apk".

  • Corrected some issues with force feedback feature with Java Native Interface and AndroidManifest.xml changes

  • In the Launch On menu, texture types have been removed, and it will use the best type based on the device connected. If you want to force a texture format without full packaging, use the Game Launcher tab (which is no longer experimental).

  • Added device serial number to the menus so that if you have multiple devices of the same type, they will both show up.

  • You can now specify what Android SDK and NDK versions you want to target using Project Settings. We recommend "latest" for SDK, and "19" for NDK.

  • Fixed potential freeze with GooglePlay Games during initialization and login, and corrected an issue with return code for early touch events

  • Fixed some international characters not getting rendered.

  • Fixed various issues with Java Native Interface (JNI) calls and compatibility with the ART Android Runtime.

  • Fixed a crash when using the editor to launch a level containing a landscape on a mobile device

  • Fixed a typo in BaseEditorUserSettings.ini specifying an incorrect landscape orientation screen resolution for the HTC One.

  • Fixed attempt to delete nonexistent directory during packaging for Android.

  • Install batch files correctly use proper ADB path and optional device serial number for discovering external storage path.

  • Now only caches the window resolution on Android if valid (greater than 8x8)

  • New: Relaxed HTML5 SDK requirements. HTML5 will compile with any SDK version above the minimum required SDK version

  • New: Added support for HTML5 SDK paths to be read from ini files. This avoids the need to use any environment variables to setup the HTML5 SDK

  • New: Enabled GamePad support for HTML5

  • New: Enabled SDL2 in HTML5

  • HTML5 now enforces packaging via .pak files, and are compressed.

  • Fixed cook on the fly issues with HTML5 on Mac

  • Fixed error in GLSL string handling in HTML5.

  • Fixed Slate cursor hit detection not being re-scaled correctly in HTML5

  • Fixed Floating-Point rendering issues in HTML5

  • Fixed re-sizing issues with HTML5

  • Fixed HTML5 incorrectly linking libraries when compiling plugins.

  • New: iOS Project Settings are now all set via Project Settings. These settings are then used during project packaging to generate the .plist. iOSprojectsettings.png

    • Please review your iOS Project Settings and make changes as needed. Any customized .plist settings will not be brought over.

    • Any special settings you may need can be added to the "Extra PList Data" section.

  • New: Iteration times have been improved when utilizing the Launch On feature. Launch On now uses Cook in the Editor and Incremental Deploy to decrease iteration times after the first deploy. This can decrease deploy times to devices down to 10-15 seconds depending on the amount of content changes that have been made since the last use of Launch On.

  • New: Addition of Provision and Certificate viewer in the iOS Project Settings. This view shows users what provision and certificates are currently and installed, which ones are valid (in green) or expired and which provision and certificate will be selected for code signing.

    • The expiration date of the certificate is displayed for convenience.

    • The status message for provisions shows the current state of the provision as well as why it was not selected for code signing.

  • New: Added support for compiling compute shaders for Metal-enabled devices.

  • New: Added ASTC texture support for Metal on iOS (Android coming soon). Enable via an iOS project setting (you can cook one or both PVRTC and ASTC).

  • New: Added very early implementation of the deferred (desktop) renderer to Metal (for A8X devices). It is known in the code as MetalMRT. It can be enabled in iOS project settings (for GitHub/Perforce users).

  • New: Devices that use Metal now render static instanced meshes using hardware acceleration

  • New: Project compile settings can now be specified in IOSEngine.ini. This feature is experimental and can only be used by creating and editing the file manually. This file has no effect on content-only projects in the binary release.

  • Added a DeviceProfile for iPad Air 2 to BaseDeviceProfiles.ini

  • iOS games now overwrite the game log every time instead of creating a new log for each run.

  • Removed the generate dsym button from the project launcher until it can be properly fixed.

  • The default minimum iOS version supported by the engine is now iOS 6.1 (which you can change to fit your needs in the iOS Project Settings).

  • Added support for stripping out certain lines of .ini files when packaging. Used to remove lines that may have passwords used during packaging. Currently need to modify UAT code to add more keys to strip.

  • Architecture selection is disabled in the binary release as Content-Only projects are not buildable in binary release.

  • Debug symbols are no longer in the redistribution libraries for the binary release. This reduces the overall size of the libraries for the binary release.

  • Fixed a crash in audio on iOS 8 when locking the screen.

  • Fixed an issue where the executable sizes were not being updated during a code sign on PC. This fixes a problem when uploading IPAs to the App Store for release.

  • Fixed an occasional crash when importing a certificate or mobile provision while another import is occurring.

  • Fixed issue with the orientation of the launch image on iOS 6 and for all landscape images on any iOS device.

  • Fixed a crash when importing a provision or certificate.

  • Fixed a crash when removing and then plugging headphones on iOS 6.

  • Fixed a rendering issue when Landscape Right orientation was selected without Landscape Left.

  • Fixed a crash launching a level containing a landscape on a mobile device from within the editor

  • Fixed a crash when setting the mobile content scale factor to 0 on devices using iOS 6 or iOS 7.

  • Fixed a crash when the game would enter the background when utilizing Metal. A null drawable was being returned by the OS which would then lead to a crash.

  • Fixed a crash when utilizing a second keyboard widget on iOS devices.

  • Fixed an error message occurring when utilizing Launch On on a Mac and then closing the game on the device. The automation tool now utilizes a different (and faster) mechanism for launching the application on device.

  • Fixed an infinite loop in the automation tool when utilizing a Cook on the Fly server with an iOS device.

  • Fixed an issue when importing certificates and provisions from the editor where any additional dialog would show up behind the editor window.

  • Fixed signing "fat binaries" (32-bit and 64-bit architectures in a single executable) on Windows.

  • Fixed an issue where a double message could be displayed when trying to package code-based IOS project on PC.

  • Fixed an issue where the password dialog would not be provided when trying to import a signing certificate from the editor.

  • Fixed an issue where the provision would get deleted if a user tried to import it over itself.

  • Fixed an issue with building on Mac where an improper SDK would be passed by default to the build command. We now explicitly pass the SDK we wish to use.

  • Fixed an issue with the staging process where filenames on PCs installed with some cultures (e.g. Turkish) would not provide a culture independent lower case name.

  • Fixed an issue with the Xcode project generation where duplicate scheme names could be created.

  • Fixed an issue with Xcode project generation where the name of the folder containing the project file was required to be the same as the name of the game. The folder name can now be anything the user desires.

  • Fixed distorted success/failure images in the iOS Project Settings dialog.

  • Fixed issues with the implementation of orientation on iOS. A single orientation can now be specified and the upside down portrait orientation is properly supported.

  • Fixed order of provision testing to find the correct provision for use. We now use the following: bundle identifier match, company name match with wild card identifier, then wild card company.

  • Fixed problem with splash screen being distorted on iPhone 4.

  • Improved signing certificate detection on Mac.

  • Rendering artifact fixed with mesh emitters in Metal

  • Startup movies now play properly when utilizing the Metal graphics option.

  • Switched Metal shaders to a precise version of clamp/saturate to handle NaN the same way other platforms do

  • Updated IPhonePackager to work with iTunes 12.1 as well as previous versions.

  • New: Engine will now use XDG documents directory as a default project path.

  • New: Cooking is now supported using Unreal Automation Tool's "Build Cook Run" under Linux.

  • New: Improved stability of the Linux editor!

  • We no longer switch display modes on Linux (too much trouble) and use windowed fullscreen only.

  • Cooking on Linux should no longer fail due to limit on number of file handles.

  • Crash reporting on Linux should now work more reliably (if Crash Report Client is built).

  • Fixed a minor performance issue caused by traversing /proc multiple times per frame to determine CPU topology.

  • Fixed an intermittent crash on editor startup (a threading issue).

  • Fixed issues with LAN play (inability to join servers running on Debian and derivatives).

  • Fixed moving objects in the editor.

  • Fixed splash screen persisting sometimes after the editor startup.

  • Fixed UBT locking up when audio is being played (mono's process module enumeration blocks if /dev/snd/pcmC0D0p is busy).

  • Menus should no longer flicker.

  • Toggling between windowed and fullscreen modes and switching window resolutions is now more robust.

  • Asset editor windows such as the Blueprint editor should no longer be improperly obscured by the main window.

  • New: Added support for PlayStation 4 controller and fixed DPad handling on controllers that actually report a hatswitch instead of treating it as a set of buttons

  • New: Double clicking the title bar will now minimize or zoom the window depending on Dock settings and OS X version

  • New: Optimized Mac shadow rendering by adding support for depth bounds testing when the GL_EXT_depth_bounds_test extension is present

  • Greatly reduced hitching when adding components in the Blueprint Editor by optimized Mac text input method change noitifications

  • Fixed an editor crash caused by processing deferred events during menu bar update

  • On Macs with Retina displays only offer the resolutions we will actually render at, rather than the Retina resolutions we don't yet support.

  • Fixed a deadlock risk in the low-level event handling on Mac OS X.

    • Accessing -[NSEvent window] is mutexed internally, so cache our event's window pointer on the main thread to avoid calling this function on any other thread.

  • Fixed explicit renderer selection when using the Mac Graphics Switching plugin settings on a dual-GPU laptop so that it doesn't cause crashes.

  • Fixed going into fullscreen mode in the Editor using the system titlebar button on Mac OS X.

  • Fixed rendering on the ATi 4000 series of GPUs under Mac OS X.

    • These GPUs don't support combined depth/stencil clears in glClearBuffer, so perform separate depth then stencil clears instead.

    • Disable Depth-Fetch-During-Depth-Test as it doesn't work on these GPUs.

  • Fixed the Editor on OpenGL 3.3 GPUs under Mac OS X by disabling translucent volume lighting as they cannot perform volume rendering.

  • Fixed the rendering of point-lights on Intel HD GPUs under Mac OS X.

    • On Mac OS X we have to use more branches and constant index values to avoid a bug in the Intel GLSL compiler that leads to reading the wrong value from the shader's uniform array.

  • Fixed a bug in Mac OpenGL initialization code that was setting incorrect height for some windows

  • Fixed a bug that caused context menu stay open, but invisible, when the editor was deactivated

  • Fixed a crash in UnrealFrontend caused by GPU switching on MacBook Pros with dual GPUs

  • Fixed a problem with miniaturized windows being activated on mouse up if no visible window was present

  • Fixed a problem with notification windows not accepting input on Mac in some cases

  • Fixed activation of editor window on clicking menu bar on inactive screen

  • Fixed crashes related to closing windows in the editor

  • Fixed dragging of windows with "drag anywhere" enabled

  • Fixed highlighting of items in editor viewport that are under mouse cursor while the view is manipulated using trackpad gestures

  • Fixed rendering of tabs dragged while the editor is inactive

  • Improved saving and restoring of windows order on Mac when app activates and deactivates

Playstation 4
  • New: Deployed applications are now sandboxed on the device. The deploy process is now iterative. The Launch On workflow for PS4 is now much faster!

  • New: Companion App support is now controlled by a Project Setting. The default is no Companion App support.

  • New: First draft of experimental parallel rhi execution! Disabled by default. Should only be enabled for testing if curious as big optimizations will be coming in the next release!

  • New: Frame management has been modified to improve Morpheus headtracking accuracy.

  • New: Logs and Screenshots are now always written to the PS4's local hadrdrive in Debug and Development builds. Installed packages of these build types now properly write out logs and screenshots.

  • New: TestKits now support keyboard input.

  • Fixed a crash when capturing reflections in levels with large numbers of reflection capture actors.

  • Fixed Follow HMD Rotation for Morpheus builds. The behavior is now consistent with other HMD plug-ins

  • Fixed bug causing Launch from editor to read from the hostpc rather than the deployed files.

  • Fixed crashes caused by using a fileserver when the working directory is set to a staged directory.

Xbox One
  • New: Improvements to Xbox One file system.

    • Added pathing support for local drive letters on Xbox One.

    • Xbox One logs now store to the developer scratch partition by default for easier retrieval.

  • New: Projects deployed to Xbox One from the editor use the project name instead of UE4Game allowing multiple projects to be installed in parallel.

  • New: Xbox One titles will now use the 7th CPU core by default for better CPU performance

  • Fixed a crash when Suspending and Resuming the application


  • New: We have fixed various network demo playback time dilation issues.

    • We don't override time dilation with cvar unless it's > -1 (so game code can control dilation as well)

    • We now support pausing

    • Better handling of spectator time dilation cancelling (use Ignore Time Dilation on movement component)

  • The Game Session instance set in Game Mode is preserved through seamless travel to prevent crashes if a new player joins during this period

  • Added the ability to detect when we are re-opening an actor channel that was previously closed but we were still processing queued bunches. This fixes issues where property replication could end up out of order.

  • Cleaned up network demo file format, which will help with adding future options (checkpoints, streaming, etc)

  • Implemented a more robust way to reset references to objects over the network during multiplayer gameplay. This should fix issues where you would see the server or client warn that references couldn't be resolved soon after a seamless travel.

  • We no longer assert/crash when an actor fails to create. This will however leave the actor channel as invalid (the actor will be missing on the client).

  • We no longer disconnect a client from the server when the server sends the client an invalid sub-object

    • We instead try to recover, and warn in the output logs instead.

    • However a server will disconnect clients that send the server an invalid sub-object. This is due to security concerns.

  • Fixed crash that could occur when replicating a blank Text struct

  • Fixed a bug that was causing actor components to not replicate properly during Play In Editor sessions.

  • Fixed a bug that was causing the client/server to report their connection was still active when it no longer was

  • Fixed a crash and other issues that could occur on the client when the server references an actor that the client has deleted

  • Fixed a crash that could occur on clients when processing and updating unmapped properties on connections that were just closed

  • Fixed a crash that could occur when replicating properties to clients

  • Fixed an issue that could occur when shutting down actor channels

  • Fixed an issue that could occur when tracking unmapped object references for native struct

  • Fixed an issue where certain networking packets could get dropped due to incorrect sequencing logic

  • Fixed an issue where object references in multicast RPC parameters could be NULL on the client (even if valid on the server)


  • New: Added a new material function that interpolates through 3-4 colors based off of a 0-1 alpha value.

  • New: Added a material attribute output to the world aligned texture_complex function.

  • New: Added a material node that will retrieve the screen and buffer resolution.

  • New: Material Function RotateVector: Rotates an input vector to point toward a given direction.

  • New: Material Function SkyboxImage: Projects an image onto an infinite sphere, useful for putting images in the skybox

  • New: Material Function TriPlanarCameraVector: Applies a texture to the background, similar to a cubemap but uses the same 2d texture for all sides

  • New: The Time material expression now supports a Period for wrapping around time; it will also evaluate this on the CPU for better precision on mobile projects.

  • Deprecated the "Const A Equals B" material expression which was causing lines to appear down the middle of certain materials.

  • Fixed focusing on the Preview Shape ('F' key) not correctly fitting the shape to the viewport

  • The list of visible material instance parameters is now populated correctly when a material Blueprint contains functions within functions.

  • Fixed: Material instances using base property overrides now correctly inherit their parent's overrides rather than always using the base material's settings.

  • New: Added a "Transform to Clip Space" material function

  • The materials required for high resolution screenshot functionality are now only loaded when in the editor

  • Fixed a bug that prevented user from double clicking on a shader compilation error for Materials.

  • Fixed a crash bug that occurred when exporting materials. In doing so, refactored some code to allow material resources to create their own shader map IDs.

  • Fixed deferred decal materials not appearing in game with the decal blend mode set to DBM_DBuffer_ColorNormalRoughness


  • New: Added the SimpleHMD plugin to the experimental plugins. This plugin can be used as a template for adding support for a new VR HMD device type. It renders in stereo with a fixed IPD and emulates a simple mesh based distortion if post-processing is enabled.

  • New: Added an editor setting (Viewport Gets HMD Control) to allow users to use the Head Mounted Display orientation when in play-in-viewport mode

  • New: Android builds can now target GearVR by enabling the GearVR plugin, and selecting the GearVR in the Android packaging project settings.

  • Fixed camera behavior to be consistent across VR devices when Follow HMD Rotation is used. This setting should be used when attaching a player using a VR device to a moving platform or vehicle.

  • Fixes a cooker crash if Morpheus is enabled for the project you are cooking.


  • New: Crash Report Client has been given a huge upgrade for better user experience after a crash!

  • New: Crash Report data is now compressed to save bandwidth

  • New: "-UserDir" command-line argument makes it easy to run multiple game instances from the same directory with different config files

  • Improved the performance of duplicating Landscape-related objects.

  • Fixed copying and pasting of properties of Actors with non-fully qualified paths

  • Default config files no longer save over the file on disk twice after making changes in the "Project Settings"

  • Duplicate data for the ICU internationalization library has been removed from the WorkingWithContent/Localization directory. The data remains in WorkingWithContent/Internationalization.

  • Fixed issue where async loading a tightly connected web of assets would be extremely slow

  • Fixed an issue with hot-reload not updating modified property values on default subobject properties in the constructor.

  • Fixed an issue with the async io thread being starved when running on devices with only one core available.

  • Fixed Crash Report Client not working in Windows 8.x

  • Fixed issue on iOS where the OS language/region settings where not being properly used to set the engine's language/region.

  • Fixed runnable threads overwriting the main thread's CPU core affinities. Runnable threads will now set their own core affinities properly.

  • Fixed Unreal Swarm sometimes reporting an error that it can't access modules of a 64 bit process from a 32 bit process.

  • Fixed a bug when Crash Report Client does not send all crash related files

  • Fixed crash on shutdown. During the final garbage collection pass the classes (and their subobjects) are destroyed after all regular objects.

  • Fixed a bug in the garbage collector where it would not call destructors on objects residing in permanent pool while performing exit purge.

  • Fixed copy and paste of objects and actors not working when the property name contains a space.

In-Editor Help

  • New: Added a new in-editor tutorial that covers working with Components on Actors (in level component editing).

  • New: Added a back button to tutorial dialog!

  • Added information on the Q and E keys to the Viewport in-editor tutorial.

  • Added links to the Android and iOS Quick Starts in their respective in-editor tutorials.

  • Improved the look and feel of tutorial bubbles that appear inside the editor

  • Fixed the Content Browser Overview Tutorial to correctly highlight the Sources Panel button (when collapsed and expanded).

  • Fixed tutorial beacons never reappearing after being opened once, even if the user never completed the tutorial

  • Updated in-editor tutorials to account for new interface anchors

Sample Games

  • New: Changed new project templates to have the relevant game object (Pawn, Character etc) placed directly in the level, instead of using player starts.

    • Player Starts still exist, but are now mainly for network clients.

  • New: Moved template content into a subfolder within Content.

    • This helps avoid it getting confused with the rest of the content in your project.

  • Revised all templates to use Static Meshes instead of BSP

  • Strategy Game was failing to launch on or package and this is fixed now.

  • Fixed and invalid component accessor in the security button in Blueprint Office sample


  • New: Unreal Engine 4 Terminology page, which provides short descriptions of commonly used terms when working with Unreal Engine 4.

  • New: Added Environment Query System documentation.

  • New: Basic How-To guides - Get started with the engine and learn how to...

    • Create/Open Projects

    • Place Actors

    • Manipulate Actors

    • Edit Actors

    • Test Your Game with Play & Simulate

    • Find Help

  • New: Blueprint How-Tos - Do more with our visual scripting system and learn how to...

    • Debug Your Blueprints.

    • Work with Variables

    • Make a Macro

    • Work with Arrays

  • New: Networking How-Tos - Making a multiplayer game? Learn how to...

    • Replicate Actors

    • Replicate Functions

    • Replicate Variables

    • Test Multiplayer

  • New: Gameplay How-To: Use OnHit

  • New: Animation How-Tos - Use these quick guides to learn how to...

    • Use Re-targeted Animations

    • Blend with Additive Animations - Blend a shooting animation with walking/running/crouching using an AnimMontage/Slots and Blend Nodes.

    • Create a Blend Space - Blend from a walking animation set to a jogging animation set with the press of a button.

    • Create an Aim Offset - This page also shows how to extract poses from a range of motion sequence for use with the Aim Offset.

    • Preview Animations

  • New: Material How-Tos - Make your game really shine with these tutorials that teach you how to...

    • Animate UV Coordinates

    • Use Texture Masking

    • Use Fresnel

    • Create a Transparent Material

    • Use Refraction

    • Add Detail Textures

    • Create a Shiny Material

  • New: Simple Blueprint Multiplayer Example Overview

  • New: Components Directory

    • Learn more about what Components are in Unreal Engine 4, then check out this directory of different types of Components.

    • Each page linked from the Components page has additional information about a type of Component and a use case. New pages include:

      • AI

      • Audio

      • Camera

      • Lights

      • Movement

      • Navigation

      • Paper2D

      • Physics

      • Rendering

      • Shapes

      • SkeletalMesh

      • StaticMesh

      • Utility

      • Widget

  • New: Paper2D

    • Paper2D section has been updated to include the following new pages:

    • Paper2D Sprites (Overview, Sprite Editor Reference, Sprite Source Region and Render Geometry and Sprite Collision pages).

    • Paper2D Flipbooks (Overview, Flipbook Editor Reference, Flipbook Components pages).

    • Links to Paper2D Content Examples and Video Tutorials also provided on the main Paper2D page.

  • New: Learn how to use CameraAnims to layer animations onto your in-game camera with the CameraAnims page.

  • New: UMG UI Designer Updates

    • New page on working with Anchors added.

  • New: Updated Oculus Quick Start Guide with new SDK download steps

  • UMG HowTo - 3D Widgets

    • Updated content for better clarification.

  • Updated Pages:

    • Blueprint Class (included a section on Parent Classes).

    • Creating Blueprints (minor updates to content/images).

    • Level Blueprints (updated the overview text).

    • Blueprint Types (added an overview section).

  • Updated: Blueprint User Guide

    • New Layout.

    • Updated Content (removed duplicate information).

    • Updated descriptions for linked pages.

    • Updated images and added overview for each section.

  • Updated: Unreal Editor Quick Start

    • Revised and updated the Unreal Editor Quick Start guide.

  • Updates to Blueprint How To (Collapsing Graphs)

  • Updates to the "Launching to Devices" doc page.

  • Updates: Artist Quick Start Guide

    • Revised and updated the Artist Quick Start Guide.

  • Fixed the missing Layered Material page by resurrecting it then updating it to account for interface changes.

  • New: Updated Class Specifier page to reflect current macro keywords

Programming Release Notes


  • Behavior Tree functions taking a BehaviorTreeComponent have been refactored to take references instead

  • Added a little sanity check to make sure FEQSHelpers::FindNavMeshForQuery doesn't crash in the absence of any navmesh instances.

  • New: Added a Blueprint getter for NavigationSystem so that users can operate on the navigation system directly

  • New: Added a RecastNavMesh function for calculating the distance to "wall" for a given location on navmesh

  • New: Added functionality to navigation paths for querying the "direction" of a specified path segment

  • Added a new behavior tree task class for handling pawn actions (BTTask_PawnActionBase)

  • New: Added versions of UEnvQueryTest::GetItemActor that take the iterator rather then an integer to avoid silly mistakes of passing the Environment Query System item iterator without using the * operator, which used to result in always addressing the item at index 1

  • New: Bits of Recast navmesh generation had been made more flexible to allow expansion by inherited classes.

  • New: Virtual AIController::GetFocalPointOnActor has been added to allow game-specific AI controllers to modify the default behavior of focusing on the focus actor's location

  • New: Added an auto restore feature for behavior tree assets that have a valid tree structure but their graph data was corrupted.

  • New: Added ability to have a game-specific GameplayDebugger. It is now possible to add or modify keyboard bindings by deriving from UGameplayDebuggingControllerComponent and implementing BindAIDebugViewKeys.

  • New: Added ability to set default settings for Gameplay Debugger during Simulate in the editor.

  • New: Created an Environment Query System test for GameplayTags. This test requires an Item that derives from ActorBase; if no Actor is found or the Actor doesn't implement IGameplayTagAssetInterface, it will skip scoring for that item.

  • UNavigationSystem::NavDataClasses and UNavigationSystem::RequiredNavigationDataClassNames have been removed.

  • New: The navigation system now efficiently supports instanced static meshes and foliage

  • Expanded AIController's movement request logging with information on the navigation filter used for easier debugging via Visual Logger

  • Added a GetNavAgentLocation override to the Character class to have it return the feet's location rather than pelvis', which in the past was a source of subtle issues.

  • Changed navigation octree creation policy so that it doesn't use up a game's memory when dynamic navmesh generation is not enabled

  • Changed the signature of the FOnBlackboardChange delegate to require a reference to a BlackboardComponent rather than a pointer

  • Changed the UNavMovementComponent::UpdateNavAgent signature to take references rather than pointers.

  • Changed when Environment Query System queries' observers are being notified about a query finishing from inside the query processing loop to outside in a separate loop

  • Environment Query System Logging: Changed the default LogEQS level from Log to Warning to prevent unnecessary spamming of the log in game.

  • Environment Query System Logging: Generator "On Circle" no longer spams warnings if it has no center locations from which to generate items. Having no such candidates can be a valid case.

  • Fixed crash related to Toggle AI Logging cheat.

  • Fixed how Gameplay Debugger is drawing navigation-corridor-based AI paths.

  • Fixed Gameplay Debugger initialization for Simulate to work correctly with pure Blueprint projects again.

  • Gameplay Debugger no longer creates DebuggingReplicator in non-game worlds or in pending-kill worlds. It should fix a rare but possible crash.

  • Fixed a bug in AI System where it tried to load subsystems' classes without checking if relevant StringClassReferences are empty

  • Fixed a bug in the detour crowds wrapper that was resulting in a crash on the crowd's max size increasing

  • Fixed a bug in resuming movement Pawn Action when GoalActor is pending kill that was causing a crash

  • Fixed a bug in the AI perception system that allowed unsensed stimuli from being marked and registered as expired

  • Fixed a crash when reporting AI perception events that no one was listening to

  • Fixed compilation issues related to including CrowdAgentInterface.h in game-specific sources that 4.7 preview 2 users experienced.

  • Fixed Project Settings not using game-specific NavigationSystem class if one has been implemented instead always making changes to UNavigationSystem's default object.

  • Fixed UNavigationSystem::GetRandomPointInRadius always returning true if a NavigationData instance have been found, regardless of the actual result of the query

  • Made PawnAction aborting be treated just like any other action event, meaning it's processed in PawnActionsComponent's tick rather than instantly

  • Refactored INavAgentInterface::GetNavAgentProperties to return a reference rather than a pointer

  • New: Removed the navigation component, which was acting as a proxy between the navigation system and AI agents

    • Paths will now handle updating themselves on destination change (moving actor)

    • Direct movement without path following will use special navigation data (AbstractNavData) for consistency

  • Restricted Environment Query System queries from being added to the "current" queue while the queue is being processed. New queries are being accepted but won't be processed until the next tick.

  • Added auto scaling of heuristic weight for pathfinding to compensate for areas with travel cost lower than 1.


  • New: Added support for adding/reading 'AssetUserData' objects (via C++) to SkeletalMesh assets. This was already available for StaticMesh assets.

  • Deleted some obsolete/unused LOD code (FLODSettingsWindow, FLODUtilities::ImportMeshLOD, and FLODUtilities::CreateLODSettingsDialog)


  • New: Marked AudioVolume for export so it can be subclassed in other modules.

  • Removed FAudioDevice::SetClassVolume and console command ModifySoundClass.

  • Output from "ListSoundDurations" console command is now sent to the correct output location.

  • Reduced possibility of cases where multiple wave instances generated by a Sound Cue could have the same hash value.

  • Updated Audio Volume tests so that they use the listener location instead of the camera location.


  • New: Automation functionality has been added that allows for the testing of the LaunchOn feature in the editor, requiring a user to specify a map and a platform to LaunchOn to.

    • To enable this test, update either the Engine.ini or Launch on Settings under Automation preferences with an appropriate "Launch on Testmap" and the DeviceId

    • Execution of this test can also be run with the following Command Line Syntax Example: 'FLaunchOnTest /Game/Path/To/MapName.MapName Platform@DeviceName'

  • The individual open asset tests are now (only temporarily) simple tests.


  • New: Blueprint runtime optimization:

    • Execution Flow Stack is used only when necessary

    • Number of jumps and gotos is reduced. Statements are sorted. Adjacent statements are merged.

  • New: Mechanism to distinguish if instances of recompiled Blueprint Generated Class must be reinstanced. (BP compiler optimization)

  • New: Allow any Blueprint subclassed from Actor or Component to tick by default

    • Added a new project setting "Can Blueprints Tick By Default", which defaults to true

    • Added a new class metadata flag ChildCannotTick, which can be used to prevent Blueprint subclasses from ticking

    • Improved the warning messages when ticking isn't possible

    • Blueprint subclasses are now allowed to tick as long as any of the following are true of the most derived C++ parent class:

      • C++ parent has bCanEverTick = true on their primary tick function

      • C++ parent is AActor or UActorComponent

      • C++ parent does not have ChildCannotTick metadata and bCanBlueprintsTickByDefault is true

      • C++ parent does not have ChildCannotTick metadata but does have ChildCanTick metadata

  • Added utility methods to FBlueprintEditorUtils to get canonical display or root names for classes

    • GetClassNameWithoutSuffix removes the _C suffix on Blueprint generated classes, useful for generating roots of new names

    • GetFriendlyClassDisplayName looks for DisplayName metadata and potentially pulls a nice localized display name if one is available, falling back to removing _C when necessary

  • Improved localization/display process for the quick Blueprint Parent Class choices in the NewAssetDefaultClasses ini key, which now use GetDisplayNameText and short tooltips instead of the hardcoded list in C++New: Blueprint Skeleton classes will now inherit their parent's Skeleton class, instead of the generated class.

  • Component templates for AddComponent nodes in Blueprints are now created as RF_Public.

  • An Actor subclass that defines a native scene component without also explicitly setting the root component in C++ will no longer result in an invalid scene component hierarchy at construction time in a Blueprint that's based on that class.

  • Added check to ensure that assign nodes can now only be placed in Macro graphs.

  • Removed support for the Blueprint Save-On-Compile setting while running commandlets.

  • Fixed a bug that caused properties marked BlueprintReadWrite to not be accessible in Blueprints (unless marked EditAnywhere).

  • Fixed a bug where natively inherited interface functions were not shown in Blueprint node menus.

  • Fixed crash caused by unresolveable ClassGeneratedBy

  • Fixed stale skeleton generated class when compiling certain blueprints, resulted in TRASHCLASS compilation

  • New: For native C++ methods declared as 'const' and tagged as BlueprintImplementableEvent, the Blueprint Graph view in the editor will now enforce a read-only state (i.e. 'self' cannot be modified). This allows the programmer to exercise some additional control over the implementation side.

  • Made the implicitly created Blueprint Component variables non-transactional.

  • New compilation error: "Static array cannot be exposed to blueprint"

  • Added support for class metadata IgnoreCategoryKeywordsInSubclasses, which prevents inheritance of showCategories, hideCategories, AutoExpandCategories, and AutoCollapseCategories metadata when placed on the immediate parent of a Blueprint

  • Added a new UCLASS() specifier ComponentWrapperClass, which implies IgnoreCategoryKeywordsInSubclasses metadata

  • Demoted some IsValidLowLevel checks in pin watching code to once-per-session ensures to avoid crashing the editor in (still-)invalid cases where we can probably recover


  • New: Added a basic native Visual Studio visualizer for class FStatMessage, may be useful for debugging the stats system

  • New: Teams using the engine through Git submodules can now set the EngineAssociation field in .uproject files to a relative path. The default behavior for local builds is still to use GUID strings for local source builds, though this will likely change in a future release.

  • New: Faster engine compile times after reducing the number of includes in main engine global headers

  • New: Commandlets can now be authored to be run using a Game executable, not just Editor executables.

  • New: Generating new Visual Studio project files will collapse each project in the solution by default.

  • New: Parsing options with arguments now supports fully quoted strings, e.g. "-Option=Value"

  • New: Start-up stats (-LoadTimeStats) will dump the results after 240 frames, there is no need to stop it manually

  • New: Added several visual studio code snippets to the source release.

  • New: Added support for optional localizable short tooltip metadata

    • The short tooltip can be specified as metadata on the associated field macro (UCLASS, UPROPERTY, etc...) as meta=(ShortTooltip="The short tooltip")

    • UField::GetToolTipText now takes an optional parameter to indicate if the short tooltip is desired, but will fall back to the long tooltip if none was specified

  • New: Adding "GetSignVector" to FVector2D

  • New: Adding code to a Blueprint-only project will now automatically compile and load the new module without the need to restart the editor.

  • New: Allowed use of "explicit operator x" in Visual Studio 2013+

  • New: Assertion macros make debugger stop in current stack frame instead of Core internals.

  • CastChecked no longer checks in Shipping builds and assumes the cast is legal.

  • New: BuildPatchTool can now take a file path to a text file listing attributes. Currently supports readonly and compressed. See main cpp commenting.

  • New: ClosestPointOnSegment2D function into FMath

  • Deprecated 'operator new' for UObject-derived classes.

  • New: FArchive subclasses can now implement a ShouldSkipProperty function to do custom filtering on properties. This cannot avoid filtering properties that normally would have been filtered, but can filter additional properties that would not have.

  • New: Faster C++ iteration: UnrealHeaderTool no longer needs to run unless your change a source file with an Unreal class in it

  • This makes it much faster to iterate on source files that UCLASS's or USTRUCT's aren't declared in

  • New: GitDependencies now supports HTTP proxies via the -proxy=, -proxy-user=, and -proxy-password= command line options.

  • Added an additional optional param to OsExecute so that cmdline params can easily be passed to the ShellExecute function too.

  • Added cumulative stats of total time spent in FAsyncPackage::Tick(), FAsyncPackage::PostLoadObjects() and FlushAsyncLoading() functions.

  • Added a safeguard check to make sure the name of created package does not contain double slashes.

  • Added an Ini file cache to speed up loading parallel ini hierarchies (each platforms load and process most of the same .ini files when processing their final values)

  • Added documentation for MultiLine property metadata in ObjectBase.h

    • This metadata can be specified on FString and FText properties, indicating that editors should allow multiple lines of text to be entered

  • All runtime plugins now include static libraries for monolithic games, not just those which are enabled by default.

  • Delegate comparisons, and any functions which use delegates as a form of identification, have been deprecated and replaced with handle-based systems.

  • FAsyncPackage's PackageName has been changed from FString to FName to reduce the overhead of string comparisons in async loading code.

  • FCoreUObjectDelegates::OnObjectModified is now called only once per frame for each unique object that has Modify() called on it. This improves performance for some editor operations.

  • Improved FIntPoint's hash function. The old hash function (FMemCrc_Deprecated) was showing up in profiles of the landscape editing code.

  • Made sure some of the most frequently constructed FNames are static to avoid the overhead of looking up existing FName

  • Removed obsolete method QuantizeSize from memory allocator classes

  • Removed obsolete UEBuildConfiguration.bBuildDedicatedServer and replaced it with Target.Type.Value == TargetRules.TargetType.Server which is more accurate.

  • Removed stale GameName ini entries. [URL] GameName section in ini files is no longer used.

  • Track Icon in Interpolation Tracks classes will no longer be cooked or used in cooked builds as it is only required in the editor.

  • Call PollGameDeviceState during WaitForMovieToFinish so touch/controller events are processed, allowing MoviesAreSkippable to work.

  • Changed MinimumLoadingScreenDisplayTime default to -1 to allow wait for movie completion to work.

  • Config Ini Hierarchy cache respects the force reload hints.

  • CRCs in code generated by UnrealHeaderTool will now match across platforms for the same source code. This should fix native package GUID differences when playing multiplayer games across different platforms.

  • Fixed config file parsing issue that prevents urls of the form http:// from saving properly

  • Fix for TArray<>:RemoveSingle which would incorrectly reconstruct elements currently in the array after the element being removed. Could cause leak in elements are of type TSharedPtr/Ref..

  • Fixed a crash that may happen in the stats system as a result of Render Thread ID not being initialized early enough.

  • Fixed a misleading error message when objects have the same fully qualified name but different paths to no longer strip off the number suffix from a FName

  • Fixed a problem with FFileManagerGeneric::Copy corrupting files on Unix platforms if Source and Destination paths were the same

  • Fixed certain cases where exporting a non-fully qualified path Object path name could end up fully qualified.

  • Fixed check() when cvars are getting set in a certain order

  • Fixed crash caused by FLegacyTextHelper::Format mutating the static empty FText instance

  • Fixed FArchive::SerializeCompressed serializing wrong size of the compressed buffer

  • Fixed potential divide-by-zero in FindBounds function for splines.

  • Fixed Reserve/Empty methods in class TChunkedArray not reserving/emptying the correct number of items

  • Fixed UWorld::RemovePIEPrefix to not return uninitialized value in some cases.

  • Stopped the Crash Reporter always being staged when packaging via the editor

    • The crash reporter used to get packaged for all projects, but it is now only packaged for Blueprint based projects.

    • It can also be excluded on a per-project basis via the "Include Crash Reporter" project packaging setting.

  • The HTML output of the fpschart profiling command can now be used in a cooked build

  • Gathering text from assets will no longer access elements of a native fixed-sized FText array improperly.

  • Made more use of GET_MEMBER_NAME_CHECKED to catch code looking for removed/renamed variables by name.

  • Made sure that running UnrealAutomationTool while the editor is running does not trigger hot-reload path in UnrealBuildTool.

  • Method GetAllocatedSize in class TIndirectArray will return the correct size.

  • Restored InterpEaseInOut functionality, which was accidentally removed

  • SafeCopyFile's timestamp check now allows a variation of 2 seconds to prevent copy failure on exFAT.

  • Staging settings for packaging games now accept cultures to stage in both hyphenated and underscored forms. IE: en-US or en_US are valid.

  • Fixed a memory leak in the Stats system

  • Switched SQLite module to use UTF8 instead of UTF16 to make it more compatible with iOS.

  • TIndirectArray's Reserve and Empty functions will now reserve and empty the correct number of items.

  • Fixed a crash when performing hot-reload after removing code responsible for creating default subobject from class constructor without removing the subobject property.

  • Fixed a crash when performing hot-reload in a project that has deprecated UObject-derived classes.

  • Fixed an error related to environment variables which could prevent UnrealBuildTool from starting up

  • Fixed an infinite loop when performing hot-reload in some situations.

  • Fixed bug where Unreal Build Tool could generate bad reflection code when bEnableFastBuildIteration was enabled

  • Fixed hot reload not actually reloading game modules in some cases

  • Fixed hot-reload sometimes crashing after adding new properties to classes.

  • Fixed math numeric limits function for doubles returning the wrong value (TNumericLimits::Max)

  • Fixed splitting UHT generated CPP files.

  • Fixed two problems connected with FStringClassReference property in C++:

    • If the user set the property to some class and then set it back to None it would show up as a valid one (using IsValid() method).

    • If the user forgot to mention MetaClass in UPROPERTY macro in C++ the editor would crash.

  • Fixed UnrealBuildTool Clean not deleting all project-specific intermediate files

  • Fixed very slow compile times of some engine source files with Slate widgets

  • Fixed a bug where the Media Player would not render any imagery

  • New: Greatly improved the quality of C++ IDE code completion and error checking with Unreal Engine C++ projects

    • Xcode and Visual Studio projects will now have more reliable IntelliSense results

    • We now emit compiler definitions and include paths for editor targets (instead of runtime targets), which are much more inclusive

    • Fixed project targets "infecting" IntelliSense definitions of other target's project files

  • Fixed an issue where Hot-Reload was failing if UClassA::StaticClass() was used in constructor of UClassB, and UClassA and UClassB was in the same reloaded module.

  • New: If the user adds a reference in a class constructor using ConstructorHelpers namespace to an asset that doesn't exist, the resulting warning on startup will now also include the class name where it was referenced.

  • New: If the user changes property values in a constructor of an UObject-derived class, the properties will now be propagated to all existing instances of that class after hot-reload.

  • Improved compile times by no longer requiring Slate headers to be included in game modules

    • This nearly halves the time it takes to recompile small game projects!

    • Games that included EngineMinimal.h no longer get Slate header includes. You need to include those yourself.

    • Note that if your game previously used Slate features in C++, you may need to manually add includes for SlateCore.h or SlateBasics.h

  • Fixed LinkerLoad circular dependency issue by ensuring that any parent default subobjects have been loaded before trying to create a CDO.

    • Fixes components in derived Blueprints not inheriting default values from their parent Blueprint.

  • Made UBT generate a lot shorter command line for the compiler when compiling UELinkerFixups generated file to prevent the compiler from failing due to command line being too long.

  • Mark three-argument form of FPropertyChangedEvent as deprecated.

  • Modified FPaths::IsRelative to be more consistent with expectations and correct. No more prepending a slash just to make a path relative!

  • New: Performance: Cast flags can now be declared for non-intrinsic classes. Added cast flag support to a handful of the most commonly used classes in the engine.

    • AActor, USceneComponent, and some derived classes have been added. See "Casts.h" for more information.

  • PRAGMA(ENABLE/DISABLE)DEPRECATION_WARNINGS unified across all platforms.

  • New: Renamed ClampSize and SafeNormal vector functions to make their use clearer

  • The invariant culture for internationalization is now "en-US-POSIX" (English, United States, POSIX standard).

  • There are two new .ini locations of note.

    • One is in your /AppData (or ~Library/Application Support on Mac) directory, called Epic/Unreal Engine/Engine/Config/User*.ini.

    • The other is in your project dierctory, Config/User*.ini.

    • If either or both of these exist, these are applied in that order AFTER all other .ini files.

    • This is currently being used for saving Android SDK directory locations in the Android SDK section of the Project Settings. However, you may want to make use of them yourself.

  • New: BINARY: Unreal Build Tool will now use IncrediBuild (if available) when compiling game projects in the binary-only release

  • The UnrealBuildTool setting to force unity build will now take precedence over the setting to try and compile faster without using unity files so that it's actually possible to force a unity build on all modules.

  • New: UnrealHeaderTool will no longer automatically generate declarations for functions that the user has to manually implement (GetLifetimeReplicatedProps, all functions with Implementation and Validate suffixes).

  • UObject::GetArchetype when called on construction script created components will now find the component from the SimpleConstructionScript to reference as its Archetype, rather than using the class default object for the component class.

  • UObject::Modify has been prevented from doing anything during garbage collection.

  • struct/class mismatch in generated code fixed.

    • FInterval has been deprecated and should be replaced with FFloatInterval.

  • UnrealHeaderTool: Improved default-value parsing for things like FText::FromString, and corrected some places where it was treating C++ types as case-insensitive

Editor and Tools

  • New: Add accessor GetModeTools() to FEditorViewportClient

  • New: Added calls to PostEditMove when dragging an actor into the world.

  • New: Added -List option to UnrealPak to list all files in a PAK file with stored size.

  • New: Added additional checks in the New Class dialog to disallow creating classes whose generated headers would clash with existing engine headers.

    • This should prevent users creating new code classes through the editor which would break the build, e.g. a class named Platform (which would class with the engine header Platform.h).

  • New: Added UEditorEngine::ReplaceActors that allows a list of specified Actors to be replaced, not just those that are currently selected.

  • New: After adding a C++ Class using the editor, the code editing IDE will be opened automatically (we no longer prompt)

  • Fixed a failed C++ Hot Reload displaying a success notification in the editor

  • New: Improved warning message for properties with bogus clamp ranges to include the property name

  • Move some selection set references in mode tools to use the 'local' selection set (may still be the global one, depending on the instance)

  • New: Push stat display/toggle functionality up from SLevelViewport/FLevelEditorViewportClient to SEditorViewport/FEditorViewportClient, so it can be used in asset editors as well

Gameplay Framework

  • New: New starter C++ source files when adding new classes to your project

    • When creating new Actor or ActorComponent classes through the editor, you'll now get a nice example source to start with

    • The example source includes a constructor with useful defaults, a BeginPlay() and Tick() function

  • New: Added UWorld::GetNumPawns() to return the number of pawns in the world without having to loop through the pawn iterator.

  • New: AActor::GetComponents() can now support TArrays with different allocator types.

    • It is now recommended to use TArrays with a TInlineAllocator to potentially avoid memory allocation costs.

    • TInlineComponentArray is defined to make this easier.

  • New: Moved WebBrowser and CEF3Utils projects to Runtime folder so that they can be used in games

  • New: Optimized TimerManager performance when using TimerHandles.

  • New: Plugins can put pak files into PluginName/Content/Paks/, which will be mounted automatically in cooked builds

  • New: Add optional Thickness and DepthBias parameters to DrawOrientedWireBox

  • New: Added build option to avoid building Chromium Embedded Framework (CEF) libraries

  • New: Added FBoxSphereBounds::SpheresIntersect() and FBoxSphereBounds::BoxesIntersect() to test for intersection/overlap between two bounds.

  • New: Added FSphere::Intersects() to test for intersection between two spheres, with an optional tolerance.

  • New: Added new methods to UPrimitiveComponent API

    • Added UPrimitiveComponent::ComponentIsTouchingSelectionBox and UPrimitiveComponent::ComponentIsTouchingSelectionFrustum, used by the editor to determine whether the selection box (in ortho or perspective viewports respectively) is overlapping with the component.

  • New: Added reference bone pose overrides to FSkeletalMeshMerge.

    • An optional array of FRefPoseOverride structs can be passed to DoMerge().

    • This allows the merged reference skeleton to be composited from different source meshes independent of the order of the source meshes.

  • New: Added XML Parser function for anonymous discovery of XML node attributes (FXmlNode::GetAttributes)

  • New: Converted Engine and Sample projects to use Timer Handles instead of delegate based timer referencing.

  • New: CharacterMovement networking tweaks for bandwidth and accuracy.

    • Acceleration is rounded to the 1st decimal place in network games for more client/server consistency and less bandwidth usage. Exposed through RoundAcceleration() function.

    • CanCombineMove(): angle between acceleration vectors is tunable (and lowered from 8 to 5 degrees).

    • Custom classes can decide to avoid delaying a move if CanDelaySendingMove() returns false.

  • New: Made the following GameNetworkManager functions virtual: WithinUpdateDelayBounds(), ExceedsAllowablePositionError(), New: Added ToMatchingText() function to GameplayTagContainer for consistency and ease of use by various other classes that need to represent comparisons of GameplayTags in the Editor in translated text.

  • AActor::SerializedComponents has been renamed to BlueprintCreatedComponents

  • AActor::SetActorTickEnabled is no longer a virtual function

  • ActorComponents no longer must be active to keep their primary tick function enabled

  • Added a debug version of the Chromium Embedded Framework (CEF) DLL wrapper library to avoid problems when using debug C Runtime Library (CRT)

  • Avoid registering PhysicsVolumeChanged events for movement components when the UpdatedComponent is pending kill. Also avoid registering for overlap events in CharacterMovementComponent when UpdatedComponent is pending kill.

    • Fixes ensure triggered under these (rare) conditions.

  • Avoid using a potentially invalid faceIndex when retrieving the physical material from landscape collision data.

  • Changed Pawn::PostNetReceiveLocationAndRotation() to use SetActorLocationAndRotation() rather than TeleportTo(), for efficiency.

  • CharacterMovementComponent helper functions SafeNormalPrecise() and ClampMaxSizePrecise() renamed with "Get" prepended to indicate that they don't mutate but return a value instead.

  • Definition of FTimerDynamicDelegate has been moved from TimerManager.h to EngineTypes.h to allow FBlueprintTimerDynamicDelegate to be removed and FTimerDynamicDelegate used directly instead.

  • Don't assert in UCharacterMovementComponent::CapsuleTouched() if bEnablePhysicsInteraction is disabled, since it can be changed dynamically after the function is registered. Also don't gate removal of the delegate on this variable for the same reason.

  • Changed EGameplayContainerMatchType from a namespace enum to an enum class. Removed all TEnumAsByte<> and ::Type parts from variables and parameters using the enum.

  • Marked the proxy mesh created by camera components as NotForClient and NotForServer, as it isn't constructed in non-editor builds and is already invisible in-game

  • When changing levels using seamless travel, objects in old sub-levels will now also be marked pending kill.

  • When destroying components that create visualizer components, ensure the visualizer component is also destroyed.

  • GameMode.h has been removed from EnginePrivate.h

  • Fixed mismatches between WITH_EDITORONLY_DATA and WITH_EDITOR usage in UCameraComponent

  • Fixed a case where a non-normalized normal can get through collision result handling. Renamed 'TraceDir' and 'Direction' variables to be more explicit that they are not actually normalized.

  • Fixed CharacterMovementComponent::CalcVelocity() not actually clamping acceleration result of ApplyRequestedMove().

    • Was only an issue if someone had overridden ApplyRequestedMove() and not clamped it internally, since the engine's version still did.

  • Fixed possibility of hanging on to stale references to UpdatedComponent in MovementComponent.

    • Pending kill objects are now not allowed to be used by SetUpdatedComponent().

    • MovementComponent::TickComponent() now nulls out UpdatedComponent if it is pending kill.

  • NetworkVelocityNearZero().

  • Made FComponentInstanceDataBase::MatchesComponent non-virtual

  • Marked CharacterMovementComponent::PhysicsVolumeChanged() as an override.

  • Moved stat counter for UpdateOverlaps() to the "Game" group from "Quick", and added stat counter for UpdatePhysicsVolume().

  • Moved SWebBrowser into the WebBrowser module to reduce the amount of modules/projects that will include it automatically

  • MovementComponent and ProjectileMovementComponent auto-registration moved back to InitializeComponent to avoid registration order issues.

  • Networked simulated proxies now check the replicated server state when testing if a component had failed to resolve on client.

    • Previously it was checking the local version which could be incorrect on the client.

  • Optimized TArray::RemoveAt() and TArray::RemoveAtSwap() to only call CalculateSlack if they are allowed to shrink the array.

  • Optimized UpdatePhysicsVolume() performance using a new list of all PhysicsVolumes stored per game world.

    • 3 ms saving in test scene with many characters that have overlap events disabled (because usually we use those overlaps to do the physics volume tests).

  • Performance: Changed a few GetComponent() calls in critical paths to use the direct access instead of the array copy.

    • This is only possible where it's known that the components will not change ownership or be destroyed.

  • PlayerController SetPause is back to its original implementation. Pausing networked games will work as originally intended again.

  • Removed dummy StaticMeshComponent that was created by WorldSettings, that was used for character networking movement on BSPs before networking was switched to use component references.

  • Replaced some color literals with FColor / FColorList entries

  • Sockets that are children of FSkeletalMeshMerge bone overrides now also get overridden.

  • ULocalPlayer::ControllerId made private

  • UPrimitiveComponent::UpdateOverlaps() optimizations:

    • Avoids attempting any determination of old versus new overlaps if there are no current overlaps.

    • Avoids dynamic array allocation when determining old and new overlaps (RemoveSingleSwap changed to avoid shrinking array).

    • Uses TInlineAllocator presized a small amount to avoid dynamic allocation in cases with few overlaps.

  • EditReregisterContexts in UActorComponent is now properly handled when PostEditChangeChainProperty is invoked.

  • Instance and BlueprintCreated components arrays are now being cleaned up correctly when removing elements from OwnedComponents array

  • OnComponentCreated is now called for components after copy/pasting an Actor or the component is Duplicated

  • Fixed typo in description of ToggleFPS command

  • Fixed a performance problem in SSafeZone on Windows platforms.

  • Fixed CharacterMovementComponent never accepting a new UpdatedComponent if it was set during movement and movement mode was "None".

  • Fixed TimerManager bugs when using Timer Handles.


  • New: Added "RemoveLandscapeXYOffsets" console command to completely remove any XY offset data and restore the landscape to pure heightfield.

  • Fixed "FBodyInstance::UpdateBodyScale NegX does not exist" warning


  • We have greatly simplified how clients connect to servers, but we also allow you to override this functionality to suit your needs.

    • Out of the box, we use a combination of the engine version, project name, and project version string to compute a single checksum that is then used by the client and server to verify they are compatible.

    • If you want to override this functionality, we offer two new delegates in FNetworkVersion. GetLocalNetworkVersionOverride will allow you to override the version that is sent to the server, and IsNetworkCompatibleOverride will allow you to override the comparison used to see if the server and client are compatible.

  • New: Added the ability for game code to get demo recording and playback failures

  • New: Added the ability to get the demo playback position from game code, and added a demo playback timeline bar to ShooterGame to showcase this

  • New: Added the ability to record demos when loading a map with the "DemoRec=" URL option

  • New: When travel failure of type ETravelFailure::PackageMissing is invoked, the error string is now the redirect URL that was obtained from the server. This is the address the client can use to download the missing map.

  • New: Improved the verbosity of logs on various important networking issues

  • New: Added IOnlineFriends::QueryRecentPlayers, which gives you access to players you've recently encountered (which you may or may not be friends with)

  • We removed some unused networking properties from the Actor base class

  • We have lowered the verbosity on various benign network warnings

  • APlayerState::UpdatePing, APlayerState::RecalculateAvgPing and APlayerController::UpdatePing are now virtual functions so they can be overloaded

  • Removed obsolete seamless travel feature on AGameSession

  • Added some missing const qualifiers to networking functions that are logically const:

    • AActor::IsNetRelevantFor, UNetDriver::IsLevelInitializedForActor, UNetConnection::ClientHasInitializedLevelFor, and FNetGuidCache::SupportsObject

  • Exposed the UOnlineSession class variable on the ULocalPlayer to be able to access online features.

  • Fixed an issue where a local listen server host wasn't able to pass the same "user options" on the login URL as clients were. Now all players do the same work.

  • Reset name of last loaded client package mapname when server travelling between the same map. It is possible that the server can get to PostSeamlessTravel before the client has and it will think that the client is already there when it isn't.

  • The world net driver should now properly return that it is a client for the duration of the tick in which it would have been destroyed in preparation for server travel. Previously GetNetMode() would return that it was a server for the remainder of the tick with undefined behavior.


  • The logging category 'LogHttp' is now visible to anyone who includes http.h.

  • Fixed a rare crash when searching for sessions using the Null online subsystem.

  • A couple enumeration values in EOnJoinSessionCompleteResult have been renamed to be more consistent with the rest of the session code.

  • Fixed a GetLastError call being too late to be helpful in the HTTP WinInet implementation

  • Fix for shutdown issue in BuildPatchServices

  • Fixed an issue where online subsystem modules were not being unloaded in the reverse order in which they were loaded relative to other modules.

    • This ensures safety while unloading modules in case there is a dependency between an online subsystem module and another module.

  • Some of the online subsystem classes were not destroying their interface objects in the reverse order in which they were constructed. These cases have been fixed.

    • This ensures safety in the case where one interface object holds a pointer or reference to another interface of the same online subsystem.


  • New: Added a ContainsSprite method to UPaperFlipbook, indicating if a specific sprite asset is being used by the flipbook asset

  • New: Added a method to determine if a tile map render component is instanced or referencing an asset (UPaperTileMapRenderComponent::OwnsTileMap)

  • New: Added FPaperTileInfo::IsValid to determine if a single tile is valid or not

  • New: Renamed UPaperTileMapRenderComponent to UPaperTileMapComponent

  • New: Added DLL export to various actor classes, allowing them to be derived from in other modules

  • Changed the default value for UPaperTileMap::SeparationPerLayer to 4 (from 64)

  • Changed UPaperTileLayer::ResizeMap to avoid doing unnecessary work if the size didn't change

  • Optimized UPaperTileMap::PostEditChangeProperty to only reregister components actually using this particular tile map

  • Prevented a rare crash at startup by moving SmartSnapping module to load post-engine-init, preventing it from loading the level editor module at pre-init


  • New: Add new API to do collision traces using a Collision Profile instead of a trace channel and response params.

    • The UWorld trace functions are the same except they end with "ByProfile" (ex. SweepSingleByProfile).

    • There is a BlueprintType structure called 'CollisionProfileName' that can be used to specify collision profiles in Blueprints. It uses the collision profiles setup for your project and creates a custom combo box.


  • There is also a graph pin widget that supports expose on spawn.


  • New: Added ENGINE_API to UTireType class to allow subclassing in C++ outside the Engine module.

  • Added some utility functions that are useful when working with collision profiles, channels, and responses.

    • Added function 'UCollisionProfile::GetChannelAndResponseParams'. It returns the collision channel and the response params from a collision profile.

    • Added function 'FCollisionResponseContainer::ReplaceChannels()'. It will replace response channels that match a specific response with another response.

    • Added function 'FBodyInstance::ReplaceResponseToChannels()'. It will replace the body's response channels that match a specific response with another response.

  • Optimized Vehicle UpdateDrag function to do nothing when vehicle is not moving.

  • Remove triangles with very small area when cooking collision trimesh (BSP) data (area is controlled by physics settings "TriangleMeshTriangleMinAreaThreshold").

    • Fixes various issues caused by having degenerate triangles in PhysX trimesh collision data.

    • Geometry must be cooked for this to have an effect. Cooked physics data version has been bumped to force geometry rebuild.

  • Setting scale when updating an instance transform on an instanced mesh component now correctly updates the physics state for the instance.

  • Updated the WheeledVehicleMovementComponent class to allow for game-side inheritance.

  • Fixed the results of OverlapMulti queries so that the overlapping object is not returned as overlapping itself.

  • Fixed convex mesh not yielding useful penetration distances for "zero distance" hits (hits right next to something).

    • Fallback is now simulated for convex meshes (since we can't inflate them) by trying a distance pushed in the direction of trace, or back away from that direction, and then in axial directions (only against the shape the hit was reported for).

  • Fixed BSP collision issues with initial overlaps (distance = 0 or less) when minimum translation direction fails.

    • The previous fallback of FindOverlappedTriangleNormal() could return no triangles when exactly against the point of contact, so if that test fails then use a slightly inflated query geometry.


  • New: When a GitHub/Perforce user attempts to Package a Content Only game without the relevant UE4 binary, they are notified, with details, during the packaging.

  • New: Message boxes are now displayed when appropriate when user input is required. Programmers can use the FMessageDialog interface to show them.

  • We now enforce separate APKs if multiple CPU or GPU types are selected in the Android project settings, which causes the .apk to have -es2 (or -es31) in the filename.

  • Added debug logging for screen resolution selection

  • Cleaned up some of the Java Native Interface code for Android.

  • Added a timeout for GooglePlay Game login wait and corrected missing forwarding of onActivityResult to GPG

  • Cleaned up Android shader overrides and disabled caching after failed shader compiles so overrides are actually tested

  • GL_OES_standard_derivatives extension is now detected for ES2 and works around missing dFdx, dFdy, fwidth functions by patching shader for Android. Be aware this does not properly implement these functions, but provides a workaround for some cases like distance-field fonts.

  • Disabled OS crash handler on Android (getting better stack traces from system logcat for now.) May be enabled by uncommenting FPlatformMisc::SetCrashHandler(EngineCrashHandler) in JNI_OnLoad in AndroidJNI.cpp.

  • Touch events no longer call GetScreenRect before OpenGL initialized. This would cause initialization from the event thread leading to later crashes

  • Now caches FAndroidWindow::GetScreenRect results for performance.

  • Changed default render target handling to Load/Store instead of NoAction (fixes some rendering errors at minor speed cost)

  • Replaced an incorrect int32 usage in iOS which was causing issues in arm64 build.

  • Fixed an error that could cause the compiler to fail to find header files in third-party frameworks when compiling plugins for iOS.

  • Fixed usage of the deprecated handleOpenURL method in the iOS app delegate, it now implements openURL instead.

  • New: Added size constraints for windows on Mac

  • New: BINARY: Added handling of negative UBT exit codes to Mac RocketBuild.sh

  • New: Disabled warning about unsupported OpenGL debug output extensions

  • New: Added support for DrawIndirect rendering when the GL_ARB_draw_indirect extension is present.

  • New: Mac now checks for the 'UE4_FORCE_MALLOC_ANSI' environment variable to use FMallocAnsi for memory allocation. This is required when attaching Apple's 'OpenGL Profiler' or it will crash.

  • Disabled the call stack symbolisation on Mac OS X in everything but Crash Report Client & other helper programs to avoid a crash in Apple's code.

  • Simplified dylib search paths with wider use of RPATHs

  • The meaning of control and command keys are no longer swapped at the Platform level on Mac.

  • Increased the default thread stack size on Mac to 2 MB

  • Fixed a crash in MacToolChain caused by empty custom resource path

  • Fixed a problem with Server targets missing from Xcode project

  • Fixed linking with debug version of ICU libraries

  • Fixed setting of rpaths on Mac when building remotely from PC

  • Fixed syncing Git dependencies on non-Unix drives.

  • Fixed a potential crash bug by using a static function to access SmallLayoutFont.

    • Were this value to be constructed before the UObject system was initialised it would trigger an assert, which can happen on Mac OS X depending on module load order.

    • Using a static function ensures that the value is only constructed when first needed which will always be after the UObject system is initialised.

  • Fixed the incorrect usage of GL_UNPACK_CLIENT_STORAGE_APPLE that was causing texture creation to fail on Mac OS X, notably affecting the precomputed atmospheric fog texture data.

  • Fixed UnrealBuildTool crash when launched with Mono 3.12.0

  • Fixed using ApiTrace to record Unreal's OpenGL usage under Mac OS X by disabling the GL_APPLE_texture_range and GL_APPLE_client_storage extensions that ApiTrace doesn't implement correctly.

  • From Mac OS X 10.10.1 onward we no longer need to flush OpenGL after creating a texture, which improves performance.

    • Add code to flush OpenGL before resuming the render thread after suspending it to ensure that we correctly share resources across OpenGL contexts.

  • On Mac OS X 10.10.1 and upward use glBufferSubData with Multi-Threaded OpenGL as it works in Unreal from this release of Mac OS X.

  • Prevent crashes on Mac OS X when using Apple's Multi-Threaded OpenGL option (the default).

    • Fixed FOpenGL3::MapBufferRange to use the proper flags for the RLM_Write mapping type.

    • Added FOpenGL3::BufferSubData which is used in place of glBufferSubData so that on Mac OS X we can avoid calling glBufferSubData to prevent an MTGL synchronisation bug.

  • New: Added a plugin for interoperability with KDevelop when browsing/editing sources - experimental.

  • New: Added case-insensitive reading of files independent from the file system (the engine will try to map a missing filename to one of existing files) - experimental.

  • New: QMake project generator added to UBT.

  • New: Switched to SDL text input API for handling input.

  • New: UBT will now look for names of co-installable clang versions if clang++ cannot be found in $PATH.

  • Unsuppressed many warnings - this can make Linux projects created with previous versions cease to build.

  • Fixed a name collision between OpenGL functions and engine symbols.

  • Compiling mono projects should no longer fail due to incorrect tool version (provided that an up to date mono supporting tools version 4.0 is used).

  • GitDependencies.exe will now be restarted in case of mono crash.

  • Fixed Linux not using SIMD math on x86-64 (mistakenly disabled when adding Linux ARM support in 4.6).

  • Fixed Vehicle and Vehicle Advanced template code projects so they can be compiled on a case-sensitive file system.

Playstation 4
  • New: Added function level optimization control. Use DISABLE_FUNCTION_OPTIMIZATION when declaring a function, eg: DISABLE_FUNCTION_OPTIMIZATION void TestFunc();

  • New: Added LCUE to the UE4 codebase to allow future modifications and toggling of asserts and validations

  • New: Added support for clearing the CMASK of a kRenderTargetFormat8 render target

  • New: Added support for TPri_Highest thread priority

  • New: Draw events are now automatically enabled when performing a ProfileGPU console command

  • New: Fixed missing asset errors when running from a staged directory with directory hierarchies deeper than 7 deep.

  • New: Upgraded to SDK 2.000. Due to a bug in the Atomic Library, at least SDK Patch 2.000.081 must be used when submitting an application built using SDK 2.000

  • Removed use of managed code (used with PS4 target management) from the main engine by shelling out to orbis-ctrl and new PS4DevKitUtil tool

  • Fixed a crash when PAK files are in the GameSavedDir() when reading data from the device.

  • Fixed detection of PS4 SDK installation as VSI v2.3.0.5 has changed from a Visual Studio Add-in to a Visual Studio Extension

  • Fixed duplicate output in debug log when executing the ProfileGPU console command

  • Fixed some issues that caused Development builds to fail on TestKits. TestKits should now work with all builds.

  • Fixed SV_Position not getting mapped to S_POSITION. This was causing some shaders to behave incorrectly.

  • Fixed the current depth target not getting restored after an HTILE resolve

  • Fixed the guard band being incorrect for non backbuffer sized render targets and DBRenderControl now initialized correctly

  • Fixed unsafe uniform buffer allocations that could cause graphical corruption when using RHI Thread.

  • Fixed UpdateTexture2D not working with sRGB textures.

  • Fixed a bug where GetHostByName would return the Host in incorrect byte order.

  • Fixed a null pixel shader warning when validating submitted commandlists.

  • Fixed FUniqueNetIds not updating state properly when users change login status.

  • Fixed matching2 contexts to retry creation properly on failure.

  • Fixed potential compiler reordering around a MemoryBarrier call.

  • Fixed the enable flag when setting a scissor rect to work as expected.

  • PS4's thread affinity interface is now fully implemented.

Xbox One
  • New: Added a new Xbox One occlusion query system that uses the WriteQuery API which is more robust with parallel rendering.

  • Xbox One builds now require the November 2014 QFE1 XDK.

  • Fixed Xbox One package name utility to be called with the full engine path, which clears up build issues with particular pathing setups.

  • Fixed OVERRIDE macro compilation warnings in Xbox One code.

  • New: Xbox One debug symbols are now processed and cached for the runtime. This will enable future runtime debug improvements.


  • Updated the Oculus SDK to 0.4.4.

  • Updated the Oculus Mobile SDK to 0.4.2.


  • New: Extended functions for debug drawing (API from SceneManagement.h file). It's useful for debug rendering.

    • Added "Thickness" parameter to some functions for wired shapes rendering. It's set to 0 by default.

    • Added GetHalfSphereMesh, GetConeMesh and GetCapsuleMesh functions.

  • New: The "r.FullScreenMode" console variable has been updated to be more clear as to it's purpose

    • The value "2" (windowed at native resolution) has been removed as it was just a special case of "1" windowed

    • The engine now always obeys the requested resolution (from "r.setres") when in windowed mode

  • New: Added r.SkySpecularOcclusionStrength to tweak Distance Field Ambient Occlusion influence on sky specular

  • New: Changed parent class of SplineComponent from SceneComponent to PrimitiveComponent so that subclasses can add rendering functionality.

  • New: Export Decal Component for sub classing

  • New: Removed InstanceInverseTransform matrix from the InstancedStaticMesh per-instance render data, saving significant memory. This matrix was never used by the rendering code.

  • Fixed OpenGL rendering after switching the shaders to use SV_Position wherever possible.

    • In the shader compiler correct for OpenGL's gl_FragCoord.w value being different to SV_Position's.

  • Replaced uses of glBufferSubData with FOpenGL::BufferSubData allowing platforms to override the implementation.

  • Fixed a bug that caused materials drawn with DrawMaterial/DrawMaterialSimple on Canvas to be drawn upside-down on iOS and Android.

  • Fixed an issue on Metal where SVPosition.w should contain the distance to the camera.

  • Recompile Renderer Module now backs up and restores global shader map for all available feature levels.

  • Added support for all operations in the Vector Virtual Machine. Currently most are not vectorized and so are slow. Added a vectorized implementation of Sin and Cos.

  • Fixed dynamic directional shadows not showing on some mobile platforms

  • Fixes a ref counting crash in resource binding when using parallel rendering.

  • Light shaft render targets are now properly released when the light component is deregistered, this fixes a memory leak


  • New: Added support for custom notifications in Slate. With these, a notification can display arbitrary widget content.

    • See new FNotificationInfo constructors for examples

  • Fixed incorrect tooltips on some menu items. Localizable text gathered from the UI_COMMAND macro now uses the namespace defined by LOCTEXT_NAMESPACE, where applicable, and nests that namespace under the UICommands namespace.

  • Prevent log warnings about ranged numeric values if UIMin metadata is used without UIMax, as it is a valid case that constrains the slider widget on one end only


  • New: Added optimization to SCanvas::OnPaint to avoid painting children that are fully clipped

  • New: Improved the Slate atlas visualizers, and added a font atlas visualizer to let you view Slate font atlas pages

    • The font atlas visualizer can be opened via the Slate Widget Reflector, or via the "FontAtlasVisualizer" cheat.

    • The texture atlas visualizer can be opened via the Slate Widget Reflector, or via the "TextureAtlasVisualizer" cheat.

    • Added support for zooming and panning of the atlas pages, which helps greatly when viewing font atlases as they can be as large as 2048x2048.

  • New: Added button to trigger atlas debug view to the Widget Reflector

  • New: Slate's Core Style now includes a monospace font, which is useful for showing tabular data.

  • New: Locking the cursor to a widget now keeps the locking region's bounds up to date even if the widget's geometry changes.

  • New: Multiple SMenuAnchor improvements

    • SMenuAnchors now automatically figure out whether they should EPopupMethod::UserCurrentWindow or EPopupMethod::CreateNewWindow based on context.

    • The menus that utilize EPopupMethod::UseCurrentWindow will now properly respect the window boundaries and attempt to best fit within the window.

  • New: Slate now supports radial hittesting. This feature is still in active development and the API is likely to change.

  • New: Slate windows now support MinWidth, MinHeight, MaxWidth, MaxHeight.

  • New: The Widget Reflector can now visualize Slate performance metrics.

  • New: GetMousePositionScaledByDPI has been added, can convert raw mouse positions into the same space as widgets after being scaled by the current DPI scale value.

  • New: Added STableRow::OnCanAcceptDrop and STableRow::OnAcceptDrop. Implementing these delegates provides out of the box visualization and handling of drag and dropping in lists, trees, and tile views.

  • List view should not attempt to scroll if that would lead outside scroll range. This check is performed only if overscroll is not allowed.

  • Added debug-only warnings for missing float and vector constants in a style to match how the other Get methods work

  • Fixed the Slate Draw Prepass only being called on top-level windows (not their children).

  • SBoxPanel's InsertSlots function defaults to AddSlot if no index is specified.

  • SSearchBox can now be customized so that button can appear to the left of the text entry area.

  • Slate resources of a slot are now released after removing the slot from a panel. This fixes bugs users were experiencing as a crash on exit after adding and removing multiple items a panel, either through drag/drop or other means.

  • Slate Application now passes along motion detection events to fix a bug where focusing a Slate widget would stop motion input from being received by the game.

  • Fixed Slate inline editable text boxes not correctly restoring keyboard focus when they are closed

  • Fixed a bug where not having focus meant a viewport would not report it's desired cursor visualization correctly.

  • Fixed an issue in which menus were always causing the parent widget to lose focus, even if not requested.

  • Fixed an issue where some key input event didn't properly specify they were from a gamepad.

  • Fixed the ScrollView Bar Style not being used even if set.

  • SListView no longer emits a SelectionChanged event if the selection is cleared, but nothing was selected.

  • Fixed a bug in the element batcher where images were still being treated as a box if they had a margin, instead of it properly ignoring the field.

  • After a drag-drop ends, we now properly reset the widgets under cursor in order to ensure MouseEnter events are resent.

Sample Games

  • Fixed crash in UStrategyAIAction_AttackTarget::MoveCloser

  • Fixed spacebase not applying thrust in C++ Flying template.

  • StrategyGame: Removed an unneeded call to PlayMovie()

    • PlayMovie() is called by FCoreUObjectDelegates::PreLoadMap.Broadcast() in UEngine::LoadMap()

  • Fixed a potential crash in the Strategy Game sample

  • ShooterGame sample: Revised several spawn functions

    • Revised IsSpawnpointPreferred to use the character default object to access the capsule data required to determine if a spawn point is usable.

    • Revised IsSpawnpointPreferred to return false if the player character object is not available

    • Revised IsSpawnpointAllowed to return false if it is given a null pointer as the spawn to check


  • The UWidget and UWidgetTree now has a way to query the UWorld that they are currently part of, this fixes a crash in the MenuAnchor not having access to the current world when attempting to spawn a popup.

  • The Widget Component in C++ is now a fully exported symbol from the UMG module DLL.

  • UserWidgets now follow their outer chain looking for an outer that know what world they are in. This is necessary if you want to know what world a widget is in for player controller queries...etc from a nested UUserWidget that's defined statically.

  • Added safer handling for the case when a user explicitly attempts to destroy a UUserWidget. It can now force the removal of the widget reference from the SObjectWidget, or the parent UMG Widget.

  • Fixed a crash when FUMGEditorModule::PostCompile is called 2 times (without PreCompile)

  • Fixed a crash that occurs in the UMG editor when trying to insert a new node into the graph and encountering null nodes.

Upgrade Notes


  • The minimum engine version has been raised from version 108 to 214.

    • All content saved since April 2013 QA Build will still be loadable. All older content must be resaved before updating.

    • All backwards compatibility code for the removed versions has been removed, as have the deprecated properties, classes, functions, and all redirects that were in place as of P4 changelist #1563929.

    • More details in this forum thread: Old Sample Content in UE 4.7 [IMPORTANT]


  • Visual Studio 2013 is now required to build the editor on Windows. Visual Studio 2012 format project files are still supported for platforms that require it, but building editor targets will always invoke the 2013 toolchain.

C++ API Breaking Changes

  • ClampSize and SafeNormal functions have now been deprecated and will generate warnings if they are still in use. You should now use GetClampedToSize and GetSafeNormal etc.

  • Any titles that use Kinect will need to manually edit out the new sections in Deploy.appxmanifest.template and Package.appxmanifest.template for 4.7. This will be moved to project settings in a future release.

  • Removed GPixelCenterOffset, GSupportsVertexInstancing, GSupportsEmulatedVertexInstancing, GVertexElementsCanShareStreamOffset, and GSupportsVertexTextureFetch variables.

  • Removed FAudioDevice::SetClassVolume.

  • Property editor APIs that used to get or set using an FString for the property display name, filter string, or tool tip, now use FText instead. This will most likely affect any detail customizations you may have.

  • AActor::SetActorTickEnabled is no longer a virtual function

  • Direct uses of ULocalPlayer::ControllerId need to be changed to use GetControllerId()

  • The constructor signature for FEditorViewportClient has changed, so custom editors with subclasses of FEditorViewportClient will need to be updated to pass nullptr in as the first argument of the parent constructor (FEditorModeTools* InModeTools)

  • Removed UNavigationComponent.

  • Material instances using base property overrides now correctly inherit their parent's overrides rather than always using the base material's settings. If you were relying on the old behavior you will need to update the overrides on some materials.

  • Minor modifications to IHeadMountedDisplayInterface, which will need to be updated on other implementations of HMD devices if they want to take advantage of the extended functionality

  • INavAgentInterface::GetNavAgentProperties changed the return type so if you have overridden it you'll need to update your code.

  • If you created custom blackboard key observers you'll need to update your code. The compiler will generate warnings for you.

  • If you've implemented your own Behavior Tree nodes in C++ you may need to update their overrides of parent functions.

  • As part of the AIController::GetFocalPointOnActor change, FFocusKnowledge::FFocusItem has been removed and replaced with regular FVector.

  • AAIController::UseBlackboard has been unvirtualized. Override AAIController::InitializeBlackboard for once-per-blackboard-asset initialization.

  • If you override AActor::IsNetRelevantFor or UNetConnection::ClientHasInitializedLevelFor in your code, you will need to add const qualifiers to your function signatures.

  • A couple enumeration values in EOnJoinSessionCompleteResult have been renamed to be more consistent with the rest of the session code:

    • EOnJoinSessionCompleteResult::RoomIsFull has been renamed to EOnJoinSessionCompleteResult::SessionIsFull

    • EOnJoinSessionCompleteResult::RoomDoesNotExist has been renamed to EOnJoinSessionCompleteResult::SessionDoesNotExist

  • GetDynamicMeshElements path on scene proxies is enabled by default

    • PreRenderView / DrawDynamicElements are no longer used and have been removed

  • CharacterMovementComponent networking functions have had their acceleration parameter types changed from FVector_NetQuantize100 to FVector_NetQuantize10.

  • EGameplayContainerMatchType has been converted from namespace enum to enum class so instead of EGameplayContainerMatchType::Type, you should directly use EGameplayContainerMatchType.

  • Any scripts which invoke buildpatchtool.exe using the -touchonly switch should be altered to call it with -nopatchdelete instead

  • FLevelEditorViewportClient::ComponentIsTouchingSelectionBox was removed, as was FDragTool_ActorFrustumSelect::IntersectsVertices. Code which handled specific component types in these methods should be moved to the appropriate UPrimitiveComponent interface method in the component itself.

  • IContentBrowserSingleton::CreateOpenAssetDialog and CreateSaveAssetDialog now take a second delegate parameter: OnDialogCancelled.

  • UpdateLevelStreaming and FlushLevelStreaming no longer require view information

  • FAsyncPackage::GetPackageName() now returns an FName instead of an FString. In some situations may break existingcode.

  • USkeletalMeshComponent::UpdateKinematicBonesToPhysics now takes a reference parameter to the set of bones to update.

    • USkinnedMeshComponent::SpaceBases public transform array has been removed, replaced with a private SpaceBasesArray and accessor functions GetSpaceBases() and GetEditableSpaceBases()

  • Added a new pure virtual to IAssetEditorInstance; InvokeTab()

  • Added a number of new pure virtual functions to the source control API:

    • Added new pure virtual ISourceControlState::FindHistoryRevision(const FString&)

    • Added new pure virtual ISourceControlRevision::GetRevision()

    • Added new pure virtual ISourceControlProvider::UsesChangelists()

  • Any classes that inherit from ScriptComponent need to be updated to inherit from ScriptPluginComponent instead.

  • Delegates are no longer comparable with operator==. All delegates are now created with an FDelegateHandle, which can be retrieved with GetHandle().

    • Multicast delegate .Add* functions now return a handle, and removed by .Remove(FDelegateHandle). RemoveAll is still allowed.

    • Any system which was reliant on delegate identity has been replaced with a handle-based system, e.g. timers, tickers, etc. Any such usage should be replaced with the functions mentioned in the deprecation warning.

  • The return value of MovementComponent::UpdatedComponent has changed from UPrimitiveComponent to USceneComponent.

  • Added an early-out to AttachTo() for the case where a component was attaching with the same parameters as it is currently attached with

    • If you rely on the behaviour that calling AttachTo() with identical params would cause a detach and reattach, you will now need to explicitly detach first

  • FCoreUObjectDelegates::OnObjectModified is now called only once per frame for each unique object that has Modify() called on it.

  • SListView can no longer be instantiated on non-UObject pointer types; this has never been valid use of SListView, but was previously only enforced by way of documentation.

  • Adjusted the descriptions for Macros and Functions as well as added a section on Calling Functions.

  • Added a radius parameter to FHittestGrid::GetBubblePath for virtual cursors. This allows us to have cursors larger than a single point. You can leave it set to 0 if you do not require this behavior.

  • Rename MeshComponent::Materials to OverrideMaterials to more accurately describe their role as a per-instance override

    • Accordingly GetNumOverrideMaterials now returns number of overridden materials.

  • Exposed the owning mode tools on FEdMode as GetModeManager() and refactored GetWorld() code into a virtual on the mode tools (overridden in FAssetEditorModeTools to pull from the asset editor scene where possible)

  • Standalone asset editors can now host their own mode tools instance, allowing reuse of editor modes and associated machinery outside of the level editor

    • This feature is still a work in progress, as many pieces of state such as the selection set and path to the world instance are still typically accessed via globals like GEditor, but there is a proof-of-concept implementation in the standalone tile map editor in Paper2D

    • Most ModeTools interaction and support has been moved into FEditorViewportClient from the level editor

  • UEditorEngine::ReplaceSelectedActors no longer takes unused parameter NewActorClass

  • Remove some ancient references to RF_EdSelected and some unused selection methods

  • Replace some GLevelEditorModeTools() uses with ModeTools in editor viewport client subclasses

  • Split out FEdMode and FEditorModeTools into separate files

  • Split graph connection drawing policies out into individual files and moved ConnectionDrawingPolicy.h to a public folder, as it was already being used externally

  • Added DLL export to FWidget::SetUsesEditorModeTools, allowing it to be used in other modules

  • Some classes which are mirrored as UStructs, like FTransform, FMatrix, FVector etc. are now defined as structs instead of classes. Any forward declarations of these types will need to be changed from 'class' to 'struct'.

    • Some typedefs, like FFloatInterval, FInterpCurveFloat, FDateRange, etc. are now structs and may cause type deduction errors when used as TInterval etc. and should be updated if necessary, on a case-by-case basis.

  • The default visibility of the transform gizmo, when no editor mode tools are registered with it, is true (visible). If you do not wish to display the widget in a custom viewport, you should call SetDefaultVisibility(false) on the viewport client's FWidget.


  • Old branching points are now automatically converted to custom Anim Notifies.

  • If you used previous "adding looping interpolation", you'll have to undo that change and apply this change.

  • Double buffering is now on by default for all instances of Skinned Mesh Component. It can be turned off by calling SetSpaceBaseDoubleBuffering(false). Any custom derived classes that do use double buffering and do their own bone updating will need to call FlipEditableSpaceBases. USkeletalMeshComponent or UPosableMeshComponent can be used as examples.


  • If you are carefully managing which Blueprints are allowed to tick (e.g. for dedicated server performance), you will probably want to set Can Blueprints Tick By Default to false for your project and explicitly opt in for ticking via ChildCanTick on specific cosmetic classes.

  • Blueprints that contain Add Component nodes for non-Scene Component subclasses no longer need to specify a Transform, but existing nodes that have connections will be left intact with the pins visible.

  • We now user preference for legacy menuing system to be cleared. If you want to continue using the legacy Blueprint Editor context menu you will need to reselect it in the Editor Preferences. The Blueprints team would also love to hear about why you can't switch to the new system!

  • Some Actor functions have become 'pure', which means they no longer have 'execution' inputs and outputs. Blueprints should be fixed up automatically.

  • Blueprints searching functionality was moved to use the asset registry. To fully utilize this functionality, Blueprints are required to be resaved. The old Derived Data Cache (DDC) data will still be used, if available, for searching.

  • If you are using the FText AsDate node in any blueprints, confirm that the output still fits expectations.

  • If there happens to already be an implemented const function in a Blueprint that was in place prior to this change, the compiler will allow it to pass as an event. However, deleting the event and re-implementing the override will open as a function graph with a read-only 'self' context. For example, if you have a function declared in C++ like this:

    UFUNCTION(BlueprintImplementableEvent) int32 MyFunctionThatReturnsSomeValue() const;

  • If you implement that BlueprintImplementableEvent (BPIE) function in a Blueprint, it will now be flagged as 'const'. This makes any properties of 'self' read-only within the context of that graph, which means the compiler will emit an error if you try to set a property or otherwise call a non-const, non-static function with 'self' as the target.

  • If there happens to already be an implemented const function in a Blueprint that was in place prior to this change, the compiler will emit a warning instead of an error, in order to allow existing Blueprints that may currently be "violating" const within the context of a const BPIE function to still compile, while still alerting to issues that should probably be addressed.


  • Make sure to convert the result of FAsyncPackage::GetPackageName() to FString with ToString() method of an FName if code fails to compile as a result of this change.

  • All instances of using operator new for creating new UObject-derived class instances should be replaced with NewObject or NewNamedObject.

  • The syntax for FPropertyChangedEvent constructors has changed. Replace calls to the three argument form of FPropertyChangedEvent with the one argument or two argument form

Gameplay Framework

  • All SceneComponent subclasses that implement ApplyComponentInstanceData now must call Super::ApplyComponentInstanceData or else attachment to that type of component will not be maintained.

    • All SceneComponent's FComponentInstanceDataBase subclasses must be changed to subclass FSceneComponentInstanceData.

  • Ensure that the WebBrowser and CEF3Utils folders have been removed from the Developer folder otherwise you may get a conflict with the new versions

  • Some code that assumed a UPrimitiveComponent* type in MovementComponent will fail to compile. This should easily be fixed by using either the cached 'UpdatedPrimitive' or doing a manual cast in code that needs it.

  • If you need the "Weapon" collision channel in your "UI" collision profile, please use Project Settings -> Collision to re-enable it.

  • C++ references to UPaperTileMapRenderComponent will need to be updated to UPaperTileMapComponent to avoid a deprecation warning. Blueprint references will be automatically fixed up.

  • FComponentInstanceDataBase subclasses that used MatchesComponent to not apply changes due to state changes should now do this filtering in the UActorComponent::ApplyComponentInstanceData override.


  • If you would like to use the deprecated collision channels ECC_OverlapAllDynamic_Deprecated or ECC_OverlapAllStatic_Deprecated, please use FCollisionObjectQueryParams::AllDynamicObjects, FCollisionObjectQueryParams::AllStaticObjects.


  • Input Pre-Processor and Analog Cursor support

    • Slate now supports an input pre processor.

      • Extend and implement IInputProcessor then register it FSlateApplication::SetInputPreProcessor()

    • FAnalogCursor is an implementation of a pre processor that allows for control of the cursor with the left game pad stick.

  • Slate header files are no longer included in game projects automatically

    • If your game used Slate features in C++, please add #include "SlateCore.h" or #include "SlateBasics.h" to your game module source files

    • This change was made to greatly improve C++ rebuild times for projects that did not use Slate features directly

  • Widgets that are not drawn will no longer be ticked. Widgets that are visually clipped, collapsed, or have 0-size will no longer be ticked.

  • Prevented paint and tick methods from being called while GIsRoutingPostLoad is true. This can occur in editor builds when uncooked data needs to be streamed in. When this is occurring, slate can tick UMG Blueprint code which is unsafe to call while loading.


  • Changes you had made to AndroidManifest.xml or SigningConfig.xml will no longer be used. You will need to go into the Android section of Project Settings and enter your customizations there. If you had set "Package .pak in APK" you will need to set that as well in Project Settings.This is a one-time change for old projects. We have put some information on that screen to help with the transition.

  • If you had added Java function calls to AndroidJNI.cpp, you will need to be careful when merging your changes.

  • Known Issue: Due to a crash on some Lollipop 5.0.1 OpenGL drivers, we removed usage of ES 3.0 shaders on Android hardware supporting less than ES 3.1. The most visible side effect of this change may be seen on metallic materials (showing as highly reflective). Uncomment line 353 in AndroidOpenGL.cpp to return to previous behavior if you need this before a fix is ready in 4.7.1.

  • To use a Gear VR, see the Oculus set up notes for installing your osig signature file in the .apk in order to run on device.

  • Changes you have made to your Info.plist settings will no longer be used. You will need to go into the iOS section of Project Settings and make sure everything is set as desired. You may want to delete your Info.plist file when you are done to reduce confusion.

  • Companion App support is longer enabled by default, and must be enabled through the PS4 section of the Project Settings.

  • Users must clear their PS4's O: because the hashing algorithm on directory paths changed.

Xbox One
  • While the title is running, logs can be accessed from the scratch partition with Windows Explorer by going to the path \\RunningTitle\Drives\Scratch\Logs.

  • Xbox One builds now require the November 2014 QFE1 XDK.


  • We plan to add occlusion culling to the hierarchical foliage management system. Until then you may see decreased performance in situations where the camera is indoors but a large amount of foliage is in the view frustum.


  • We no longer support slash for command line switches (e.g. "UE4Editor /SomeOption"); only dash switches (e.g. "UE4Editor -SomeOption") are supported. If you have any scripts or other tools that have been using slashes, change them to dashes.

  • UnrealVS does not auto-update. The latest vsix must be executed to install the new version.


  • ReceiveConditionCheck has been changed to return a value (no longer requiring user to call FinishConditionCheck) which resulted in it no longer being possible to use it as a plain Blueprint event. Now users will need to re-implement this even like a function (there's an option to generate this implementation in Blueprint UI). Blueprint editor may have an issue with creating ReceiveConditionCheck implementation while the old ReceiveConditionCheck event is in the event graph, so we recommend deleting all old ReceiveConditionCheck occurrences, saving all Blueprints, restarting the editor and implementing the new ReceiveConditionCheck. Sorry for the hassle!

  • AIController class allows you to change how pathfinding requests are being created, executed and passed to path following. See following functions for more details: PreparePathfinding, RequestPathAndMove, RequestMove


  • Any existing tile maps that relied on the default layer separation being 64 will need to be updated to set the Separation Per Layer property back to 64, as the default was changed to 4

Help shape the future of Unreal Engine documentation! Tell us how we're doing so we can serve you better.
Take our survey