4.5 Release Notes
The 4.5 release includes eagerly-awaited features such as animation retargeting, automatic C++ hot reload, light map UV generation and streaming video textures. New real-time ray traced soft shadows allow for beautifully lit dynamic scenes, and screen-space subsurface scattering enables very realistic skin materials. Support for mobile platforms and consoles is better than ever, and hundreds of targeted improvements in release allow complex online games to pass console certification tests. Finally, creating user interfaces has never been easier now that Unreal Motion Graphics is ready to use!
release also contains a huge number of usability and learning enhancements, an all new tutorial system, and new game templates for Advanced Vehicles and Twin Stick Shooters.
In release, more than 40 features and improvements were contributed by The physics scenes our amazing community of developers. We would like to extend our gratitude the contributors below.
3dluvr, Alters, leobenaducci, Marenz, Hurricane86, moritz-wundke, EverNewJoy, , Salamanderrake, solid-angle, tommybear, timdonks, error454.
Epic has made recent account changes to provide an age-appropriate experience for players, developers, and creators of all ages. If you don’t see your name credited here for code that you have contributed, please log into your Epic account and ensure that you have updated your account information so that we can include you for future releases. If you need additional assistance, please reach out to Support.
We would also like to extend a special thanks to -Smith and Infinite Realities (http://ir-ltd.net) for providing the head model and assistance with Screen Space Subsurface Scattering.
Major New Features
Rendering
**
Ray Traced Distance Field Soft Shadows**
There is a new dynamic shadowing method which works by tracing a ray through mesh distance fields to the light. allows for soft area shadows with sharp contacts!
Here is a directional light with ray traced soft shadows. Long shadows get softer and self-shadowing in the distance is still detailed.
Ray Traced Shadows Comparison Video.](https://www…com/4249b94KtyA&feature=youtu.be)
Point and spot lights work too. ‘Source Radius’ is used to control how large the light source is and therefore how large the shadow penumbras are.
Video showing ray traced shadows in action.](https://www…com/watch?v=-xai0iBffUc)
Ray traced shadows can be efficiently computed for longer view distances than traditional cascaded shadow maps (CSM). Distant shadows can be ray traced while nearby shadows are computed with CSM to get the best of both approaches.
Ray traced shadows are generally 20-30% faster on the GPU than cascaded shadow maps.
These distance fields are the same data used by the Distance Field Ambient Occlusion feature. You can enable it with ‘Use RayTraced DistanceField Shadows’ on a light, in projects which have the ‘Generate Mesh Distance Fields’ project setting enabled.
For more information check out the documentation!
Distance Field Ambient Occlusion Improvements
The project rendering setting is now called bGenerateMeshDistanceFields, check that box and restart the editor to use any distance field lighting features.
**
Generation**
The distance field generation has been made asynchronous. It will use most of the CPU’s cores but leave a few available for using the editor in the meantime.
Meshes no longer need to be closed to support a distance field.
**
Specular Occlusion**
We now have some approximate specular occlusion for the sky. The Distance Field AO computation produces a bent normal, which is a cone indicating sky visibility at that point. Intersecting cone with the reflection cone gives a shadowing term for the sky specular. prevents leaking near occluders and works best on somewhat rough materials or wherever SSR is not valid due to screen space limitations.
Original
With Specular Occlusion
For more information check out the Distance Field AO documentation!
Screen-space Subsurface Scattering
A new “Subsurface Profile” shading model has been added! You can use subsurface scattering to create realistic skin materials and other awesome .
*
*Left: no subsurface scattering, Right: realistic settings
*
**Dynamic Shadows on Mobile **
Dynamic shadows for movable directional lights are now supported on mobile platforms! Shadows are rendered using cascaded shadow maps with up to two cascades.
Unreal Motion Graphics (GUI Designer)
Unreal Motion Graphics is now ready to use and available by default! Simply create a new “Widget Blueprint” and start designing your UI. Of course, new features and improvements are still being added daily.
UI Render Transforms
Widgets in UMG and Slate can now be translated, rotated, scaled, and sheared!
UI Styles
We now allow styling to be done completely inline for a widget’s definition. allows users a much greater control over how widgets look without needing to clutter up their project with several dozen style variations. Styles can now be changed in game, allowing dynamic material instances to be used on any UI!
UI Animation
UMG now includes more robust animation support.
-
Multiple animations can be created for each widget
-
Animations can be controlled at runtime in your widget’s blueprint graph
-
Keys can now be added to animations automatically via the details panel
UI animations can be controlled in the widget blueprint graph. is an example of playing an animation when a widget is hovered.
DPI Scaling
Unreal Motion Graphics now supports automatic scaling for resolution-independent UI. We now provide default DPI scaling rules for all games. You can configure in your project’s Rendering settings.
Programming
Automatic C++ Hot Reloading
Unreal Engine now automatically “hot reloads” your C++ gameplay code after you compile in Visual or Xcode!
No need to shutdown the editor while you’re working. Just compile your gameplay code normally from Visual or Xcode, and the engine will apply your C++ changes instantly.
Full Game C++ Hot Reload
You can now compile any type of game C++ code without even restarting the editor, and your changes will be applied live! Even adding whole new classes or properties is supported.
Sample Content
Advanced Vehicle Template
The new Advanced Vehicle template shows off a vehicle with double wishbone suspension, and a test track with terrain and many ramps and loops! It also works great with a VR headset.
Twin Stick Shooter Template
The new Twin Stick Shooter template is a perfect starting point for creating fast-paced, top-down shooter games!
It’s a simple template for a Twin Stick shooter where one joystick is used for movement and the other is used to fire in any direction.
**
Advanced Lighting Map**
A new map is available in the template starter content which provides artists a testing area to try out different lighting setups and see how their content is affected.
**Animation
**
Animation Retargeting System
The new Animation Retargeting System allows you to convert animations between **different skeletons **using the humanoid rig!
Example Video: shows animation starter pack converted for another skeleton.](https://drive.google.com/file/d/0B6tuVJjNBGX3U0VwWUl0dExHSWM/edit?usp=sharing)
Once you have set up, you’ll be able to convert animations between any skeleton that uses the same rig.
**Media Playback and Capture
**
Video Textures (Media Framework)
The new Media Framework allows you to play streaming video on UI widgets and textured objects in your levels!
Check out our forum post for more information about new feature.
OpenEXR Frame Capture
You can now save rich frame data including HDR colors and 16-bit pixel depth into an OpenEXR file. is really useful for offline compositing work.
**Project Creation
**
New Project Creation Window
The New Project window has been redesigned to simplify the process of creating new projects!
Target Hardware Selection
You can now select the type of hardware and devices you want to support, and the engine will choose optimal settings for the best player experience! can be set when creating your project in the New Project window or in the Project Settings under Target Hardware.
**Learning Resources
**
In addition to new videos and new written documentation, there are major updates to how you can learn about how to use the editor and access documentation right when you need it!
New Tutorial System
The tutorial system has been completely overhauled in order to provide a more immersive experience!
There are no more popup windows. (Yay!) Unobtrusive text bubbles overlaid on the editor now walk you through interface elements and various features. The editor will alert you about tutorials you haven’t tried, but it never forces you to view anything.
Once you have decided to take a tutorial, you can **right-click **to see other navigation options (or click the combo arrow in the top-right of the content bubble)
Tutorials Browser
There is a fancy new Tutorials Browser that provides easy access to all of the tutorials.
Tutorials can be accessed from either the Help menu or by clicking the new Tutorials icon in the top-right of the editor.
Tutorials Blueprints
Tutorials are actually now built as Blueprint assets. means you can create your own in-editor tutorials to include with content published to the Marketplace!
Tutorials you create will automatically be visible in the new Tutorial Browser UI.
Improved In-Editor Help
**
Instant Online Help**
You can type into the new Online Help box and the editor will gather as many helpful resources as we can find from the internet.
Tutorials, documentation, community wiki, and AnswerHub pages are now all accessible from here! Note: We’ve moved the in-editor debug console. You can now press the tilde (~) key to summon the console anywhere within the editor!.
New Help Buttons
With lots of new documentation anchors, it’s easier to jump directly to reference documentation as you need it in the editor!
**Documentation Actors
**
New documentation actors have been added to sample content that links you to helpful documentation pages. Check out the updated Content Examples project that includes lots of new help links!
**Documentation Nodes
**
Documentation nodes provide the ability to display documentation snippets in Blueprint graphs. means you can embed text and images in your graphs to provide information that goes above and beyond the usual comment blocks!
New Help Tool-tips
Lots of detailed tool-tips have been added all over the editor. Material nodes, placeable actors and blueprintable classes now all have rich help when you hover over them with Ctrl+Alt held down.
**Documentation
**
The Unreal Engine documentation now features an updated look which improves readability! In addition, we added search term suggestions to the front page to help you quickly find the topics you are looking for.
Video Tutorial System
The documentation now includes a video system for finding and viewing all of our video tutorial series! Everything is organized into categories and videos can easily be viewed as an entire series.
**New Additions **
Learning Resources
-
The Getting Started page has been overhauled to make the most important resources for those just starting out easily accessible.
-
We added a whole new section over developing for Virtual Reality platforms.
-
New How-Tos](.unrealengine.com/latest/INT/Gameplay/index.html) on the Gameplay page - These are overviews of common game components, and examples of how to do them in Blueprints. C++ examples will be rolling out soon, too!
-
We also updated the UMG User Guide](.unrealengine.com/latest/INT/Engine/UMG/UserGuide/index.html).
-
Blueprint Communications
-
Blueprint Communication Usage - Outlines the different methods of communication and sample use cases, with links in each section for further documentation.
-
Blueprint Communication Walkthrough - Blueprint Communication Project will show you several different ways in which you can pass information between Blueprints.
-
C++ API Documentation greatly improved - A great deal of work has gone into making sure the most common classes, including their properties and function, have good descriptions.
-
Video Series: Introduction to Paper2D - Learn about sprites & flipbooks while making a 2D game with an animated Character and lifts.
-
Video Series: Vehicle Time Attack - tutorial series covers the basics needed to create a simple Time Attack style race completely through Blueprints, using a Canvas HUD and showing how to save game data.
Editor and Tools
-
New: Unreal Editor can be now built and run on Linux (experimental, not supported yet.)
-
New: The editor no longer forces capitalization for asset and object names
-
New: Levels (.umap files) are now visible in the Content Browser, and you can perform many of the same actions that you would on other assets.
-
New: Documentation link (‘?’ icon) next to classes in Place mode.
-
New: Folder Rename can now be done in the Content Browser Path View.
-
New: Smaller allowable thumbnail size in the Content Browser.
-
New: Greatly improved the look and feel of the Message Log window.
-
New: Replaced UI for FBX importing with a simpler, more intuitive interface.
-
New: Project Launcher UI (still experimental, but can be quite useful for creating custom launch profiles)
-
New: Classes added via the C++ class dialog in user projects now apply the copyright notice specified in project settings, and the default notice string has been changed to ‘fill out in project settings’
-
New: UBlueprintFunctionLibrary is now listed in the short-list for the new C++ class dialog.
-
New: Added a new feature to support morph targets for clothing.
-
New: Target Hardware can now be picked when creating a new project, which controls the default values for various rendering and engine settings.
-
The target hardware choice can be changed at any time in Project Settings, and individual settings can be modified in their respective homes as well.
-
New: Improved the look and feel of splines in graph editors (Blueprints, Materials, Sound Cues, etc…)
-
New: Added support for mirrored meshes to a Mesh Merging tool.
-
Various parameters related to tangent calculations can now be adjusted in the Graph Editor section of Editor Settings.
-
New: Multi-line node titles are now padded to be a multiple of the graph snap grid taller than single-line nodes, allowing the pins to line up when connecting multiple nodes together.
-
Fix: “Delete assets” dialog no longer requires a force delete when the only remaining references are in the undo buffer.
-
Fix: Prevented a vertical layout pop in SSetingsEditorCheckoutNotice when the status query finishes.
-
Fix: Removed extra blank lines from some graph node titles (such as material nodes)
-
Improved section headings in the new asset menu.
-
Improved visual language of the ini checkout notice on the project settings dialog, which now lists the actual ini file to be edited and goes subdued when the file is already writeable.
-
Improved project settings dialog layout, reducing excess padding and hiding buttons that were only relevant for editor settings.
-
Added widget metadata - arbitrary data can now be attached to SWidgets.
-
Added a CamelCase break iterator for use by the content browser.
-
Added an editor notification for when texture streaming is taking a while.
-
Allowed undoing changes to the Landscape “New Landscape” panel.
-
Converted SOutputLog to use a multiline editable text control to show its log output.
-
Disallowed moving matinee actors to another level if their matinee is open.
-
Deleted and rename work in the Content Browser path (folder) view as expected. Hotkeys fixed as well.
-
Deleting an asset in the Content Browser no longer makes it appear as though “Show Folders” is turned off.
-
Deleting a folder from the Content Browser path view no longer disables “New” and “Import” – it returns focus to the “Game” directory.
-
Grouped Editor Preferences, Project Settings and Plugin Editor into same tab window.
-
Improved the validation for working out if a path is too long to cook.
-
Import textures and materials enabled by default in FBX import.
-
Many visual and functional upgrades to the stand alone curve asset editor including box select, snapping, and an expanded toolbar.
-
Message log now opens the correct page when popped up
-
More asset types feature ‘View Documentation’ in context menu.
-
Prevented CallHandleDisconnectForFailure from crashing on travel or network failure.
-
Prevented new collision initially overlapping existing collision in Static Mesh editor.
-
Source code access now works in SlateViewer and Launcher.
-
Shootergame now allows Play From Here from the editor, as Click Plane is now set when Click Location is.
-
Seperated out the New Project icon and overlay images into seperate brushes so they could easily be replaced.
-
Standalone Listen Server now works correctly.
-
Usernames with spaces in them no longer cause UAT command lines generated by the editor to fail.
-
Fixed BSP geometry disappearing after seamless travel.
-
Fixed lenght->length typos in FNavigationPath.
-
Fixed crash when non-uniform scaling actors.
-
Fixed stall when landing on Foliage Actors.
-
Fixed some IME activation/deactivation issues that could lead to a crash.
-
Fixed Several classes that didn’t make sense removed from All Classes list (Place mode).
-
Fixed “Build Failure” error after successfully deploying to Android.
-
Fixed undo transactions for “interactive” changes (e.g. sliding sliders) so they don’t flood the undo buffer with one transaction for every sub-step of the change
-
Fixed “reset to default” button on actor transform when multiple actors were selected
Unreal Motion Graphics
-
New Widget - Scale Box, allows content to be scaled to fit a space with aspect ratio preserving scaling options.
-
New Widget - Spin Box, allows direct numeric entry and click-and-drag to change the value.
-
New Widget - Grid, allows non-uniform gridded items to be laid out in the designer, with multiple row and column spans.
-
New Widget - Size Box, allows you to specify several size rules for the widget and its contents. Sometimes you just need something to be a certain size, widget enables that.
-
New Widget – String Combo Box, allows for a list of string values to be displayed in a combobox.
-
New: Scroll boxes now support horizontal scrolling in Slate and UMG.
-
The list of events, both multicast and function bindable events now appear in a single unified list when selecting a widget.
-
The designer has a new gizmo that can be used to configure anchor points when positioning content in the canvas panel.
-
All widgets now support Render Transforms, (Translate, 2D Rotation, Scale, Shear)
-
The designer now allows you to move widgets in Layout Transform or Render Transform mode.
-
A new SetInputMode() API on the player controller allows more control over how input is routed. Modal UI’s and so on will be easier to setup.
-
Added grid snapping to the translation layout mode.
-
When creating a widget you should use the new Create Widget node. It works similarly to the Spawn Actor node and allows variables marked as exposed on spawn to be set.
-
We now provide default DPI scaling rules for all Slate/UMG UI in games. They can be found in your projects Rendering settings, the default setup performs a linear scaling of the UI based on the shortest side’s resolution.
-
Drag & Drop now has some limited support, though there are still some issues to iron out so that it doesn’t create another window to house the dragged content.
In order to implement it you’ll need at least two different user widgets, a draggable widget and a widget that will act as the drop target.
-
“Aspect Ratio” menu in designer view renamed to “Resolutions.”
-
All resolutions that match the currently selected one are checked in the Resolutions menu. The current resolution is also displayed in bottom left of designer view.
-
Added GetText() to TextBlock.
-
Lots of stability improvements. Bindings are no longer run at design time to prevent many of the crashes witnessed in UMG.
-
Low level input handling is now possible in UMG widgets, you’ll need to override the mouse/controller/keyboard functions and handle the input there.
-
The game viewport now disables throttling when it contains focus so that Slate UI in the game doesn’t trigger throttling in the editor, meaning interacting with Slate or UMG UI in your game will no longer cause the editor to stop updating.
-
Changing all BlueprintImplementableEvents to BlupeprintNativeEvent on the UUserWidget so that native implementations can handle those events as well.
-
Palette now properly displays all other Widget Blueprints in the project.
-
The progress bar now has clean clipping lines when displaying the progress image. It no longer scales the paint geometry, it instead scales the clipping rect, it does for everything except for FillFromCenter, where the only reasonable thing to do is scale the paint geometry, otherwise a sphere image would be filled using a square. Additionally, I’ve added Fill directions for TopToBottom and BottomToTop.
-
Slate color details customization now has a way to toggle the ‘Use Foreground’ flag using the new ‘Iinherit’ checkbox.
-
TextBlocks now have text justification.
-
Improving the anchors drop down menu to show a preview of the effect it has.
-
Anchor points can now be animated.
-
Fixed a few cases where widget functions did not appear in the graph when “Context Sensitive” was enabled.
Paper 2D
-
New: Added debug rendering for pawn/visibility collision on sprites.
-
Added support for VMI_CollisionVisibility and VMI_CollisionPawn view modes to FPaperRenderSceneProxy
-
Changed sprite wireframe colors to match static mesh display (including differentation for mobility)
-
New: Sprites can now affect navmesh generation.
-
New: Support for defining or querying sockets on flipbook assets and components
-
Current implementation passes thru sockets defined on each source frame and does not allow authoring directly in the flipbook editor, but it is otherwise fully functional
-
New: Improved material support on UPaperFlipbook assets and components
-
Converted UPaperFlipbookComponent to derive from UMeshComponent, allowing materials to overridden at runtime or via Blueprints
-
Added a default material to UPaperFlipbook assets and changed the Material override in UPaperFlipbookComponent to default to null
-
should have no impact on existing content, but allows flipbooks to have a material set once and show up correctly inside of the flipbook editor, rather than requiring it to be set on each instance.
-
New: Added support for a negative play rate on flipbook components.
-
New: Added support for choosing project-wide default materials that will be applied to newly created sprites.
-
Combine various InitSprite variants into one function that takes an init parameters object.
-
New: Moved Paper2D plugin out of Experimental folder, as only a few parts of it are still experimental.
-
New: Expose RenderComponent to Blueprints in APaperFlipbookActor and APaperSpriteActor, and add ‘pass-thru’ metadata so various functions can be called on the component from an actor reference.
-
New: Added DLL export to UPaperSpriteComponent and APaperCharacter
-
New: Added support for manually creating sprites with holes in render geometry.
-
New: Added class comments to APaperSpriteActor and UPaperSpriteComponent, remove EarlyAccessPreview flag from UPaperSpriteComponent
-
New: Flipbooks are now created automatically by auto-detecting and grouping names from selection or sprite sheets.
-
New: Sprite source region edit mode workflow has been improved, slice up sprites quickly by ctrl-dragging rectangles.
-
New: Enable ‘two-sided’ and ‘cast shadows as masked’ on default Paper2D materials to improve shadow casting user experience
-
New: Add map check warning for sprite and flipbook components that use non two sided materials
-
New: Expose various flipbook asset methods to Blueprints
-
New: Add the ability to edit the default collision profile for new actor instances in the sprite asset editor. allows you to turn off collision by default, but still allow it for specific placed instances, or to make instances default to a different collision type like projectile.
-
Fixed: Removed incorrect bWillEverBeLit=false in 2D sprite render scene proxies.
-
Fixed: Sockets are now drawn at correct location in the sprite editor when pixels/uu is not 1.0
-
Fixed: Socket gizmo manipulation speed is now correct when pixels/uu is not 1.0
-
Fixed: Sprites no longer have swapped vertex color channels on iOS and Android devices.
-
Converted FPaperSpriteVertex and FMaterialSpriteVertex to use FColor instead of FLinearColor
-
Added check() in FLocalVertexFactory to enforce the assumption that the ColorComponent is VET_Color
-
Fixed: Contact filtering was not being correctly applied in Box2D prototype (also fixes a crash in debug when using Box2D)
-
Implemented Geometry editor usability improvements.
Behavior Trees
-
Autowire new Behavior Tree nodes when dragging off from input an pin.
-
Blackboard mode is now selectable after undoing a reset of the Blackboard property.
-
Correct ‘current’ Blackboard values are now displayed in Blackboard view
-
Duplicate-named Blackboard entries can no longer be created.
-
Right-click menu operations on Behavior Tree sub-nodes now work.
-
Updated Blackboard view when Blackboard is edited in Blackboard mode.
-
Undo & Redo now properly affect Blackboard entries
-
Fixed crash on shutdown when editing behavior trees.
-
Fixed Behavior Tree details was not scrolling when the details panel was larger than the tab.
-
Fixed crash selecting enum Blackboard key value when enum was invalid.
-
Fixed crash dragging off an input node & creating a task.
**FBX
**
-
Importing: Re-enabled animation only import in the new FBX import UI
-
Importing: Fixed the crash happening when there is multiple roots for the skeletalmesh and importing multiple times.
-
Importing: Fixed with importing lesser frame for animation.
-
Exporting: Mesh/Skeleton are not grouped any more under BaseNode.
-
Exporting: Animation now exports time correctly.
**Landscape
**
-
New: Added LightingLODBias to Compopnent to adjust Landscape LOD for Lightmass building.
-
New: Landscape Splines and Spline Mesh Components can now be used on OpenGL ES2
-
New: Added Landscape Layer Sample material expression to retrieve a layer weight value
-
New: Landscape and foliage painting no longer requires Ctrl to be held down
-
New: Improved landscape sculpting tool, it’s now continuous and framerate-independent
-
New: “Tutorial” button is now present in Foliage and Landscape tool panels.
-
Enabled simulation mode for XY Offseted Landscape.
-
Fixed save error after moving landscape components to streaming levels when there is foliage with non-shared settings placed.
-
Fixed foliage tool data internal data corruption when removing instances, possibly leading to infinite loop.
-
Fixed foliage erase density and reapply density features.
-
Fixed noise generated when using the landscape flatten tool with a strength greater than 1.0.
-
Fixed crash when trying to use the landscape painting tools with no paintable layers
-
Fixed crash when switching levels with the foliage mode open and foliage brush visible
-
Fixed lighting of landscapes with a negative x or y scale
-
Fixed crash when replacing material in the “New Landscape” panel with one with fewer material layers (or null)
-
Fixed Landscape Layer Painting Restriction showing up for sculpting tools
-
Fixed UE 4.4 generating thumbnails for landscape textures/materials (bloating map size and making saves slow)
-
Fixed id on landscape physics shapes so that ignoring landscape on traces works
-
Fixed for landscape export crashing when exporting a landscape with both multiple subsections per component and a visibility map
-
Fixed: Add Component regression for interpolation height.
-
Fixed: Play From Here couldn’t spawn Pawn.
-
Fixed: Tessellation index buffer problem for Game Mode.
Cascade
-
Fixed: Spawn rate for LODs with GPU particles.
-
Fixed: Crash when editing curves in Cascade
-
Fixed: Mesh data orientation had no effect when Camera Facing was enabled.
-
Fixed: Trail emitters didn’t work properly if their source was simulated in local space.
-
Fixed: Blueprint spawned particle emitters didn’t have the proper LOD set after spawning.
-
Mesh emitters with orbit modules now properly forward ParticleDirection to the material.
-
Fixed materials for birds to always use ParticleDirection instead of optionally a transformed worldspace unit vector (affects Zen Garden, LandscapeMountains).
-
Particle Velocity and RelativeTime are now available in the shader as constants on OpenGL ES and Metal.
-
UParticleModuleLocationPrimitiveCylinder now shows up in the spawn location module menu.
Blueprints
-
Improved graph rendering
-
We’ve polished up how connection lines are displayed in graph editors.
It’s now easy to have straight connections between nodes that are lined up, and the shape of the spline has been tweaked to be easier to follow.
-
New: Added CInterpTo for linear colors, exposed in Blueprints (https://github.com/EpicGames/UnrealEngine/pull/331, EverNewJoy)
-
New: Added a Blueprint ‘Ease’ node for interpolating a value using linear, step, sinusoidal, exponential, or circular modes.
-
Blueprint palette is now hidden by default.
-
Blank blueprint graphs now show passive instruction text to help guide new users to use the context menu.
-
New: Can now select World Settings game mode classes from Blueprints drop down on the main editor toolbar.
-
New: Camera actors can now be ticked, and can utilize the blueprint tick event.
-
Compiling Blueprints, PIE’ing, and SIE’ing no longer flush the undo buffer, so you can undo across PIE/SIE sessions.
-
Category sorting for components was enabled in My Blueprint panel and some information to track the user sorting was added to blueprints.
-
Script max loop iteration was exposed to the user through editor settings, located in Project->Engine->Blueprints – Maximum Loop Iteration Count.
-
Added a documentation node to the Blueprint interface. These Nodes have the ability to display UDN documentation inside the blueprint editor utilising the details panel to set the link and excerpt name.
-
Blueprint functions added to change input mode: SetInputMode_UIOnly(), SetInputMode_GameAndUI(), SetInputMode_GameOnly().
-
The Blueprint compiler was modified to identify and cull disconnected/inactive timeline nodes so actor instances do not have redundant timeline components that require resources to check if they require a tick.
-
DataTable/CurveTable Blueprint nodes: Drop down box for selecting row name.
-
GetActorsInSelectionRectangle now takes ‘bIncludeNonCollidingComponents’ option (https://github.com/EpicGames/UnrealEngine/pull/370, EverNewJoy)
-
New: DataTable can now use UserDefinedStructure.
-
New: Latent functions can now be added to macro graphs.
-
New: Moved warnings/error messages to the bottom of nodes, so that pin vertical positions don’t change if a node goes into an error state.
-
New: Member variables in UserDefinedStructure can be reordered.
-
Added ‘raycast’ and ‘sweep’ keywords to relevant Blueprint collision functions.
-
Blueprints loaded by the Blueprint Diff Tool no longer appear as reference-able in the Blueprint Editor.
-
Blueprint diff control now shows changes made to the Blueprint’s Components and Defaults.
-
Component picker UI improved, added links to component documentation.
-
‘const’ member functions can now be marked BlueprintPure (all ‘const’ member functions are still treated as BlueprintPure).
-
Duplicate Blueprint variables with Ctrl+W in the My Blueprints window.
-
Deleting local variables in Blueprints will not delete all local variables in the Blueprint of that name.
-
Enum inputs to Blueprint Macros can now be editing inline, no need to create another node to assign the pin to a constant value.
-
Events can no longer be created in Blueprint graphs that do not support events.
-
Holding Alt+RMB in the graph panel will zoom on the initial mouse position inseat of the corner of the panel.
-
Improved detection of Blueprints that are deadlocked invoking a recursive function.
-
Optimized blueprint menu reaction time.
-
Removed requirement for blueprint node name pins to be non-numeric values ( requirement seems to no longer be present in other areas of the engine).
-
Sub-graphs will display under their parent graph in the My Blueprint window.
-
We no longer prompt to reset the transaction buffer during package cleanup after an object is deleted.
-
Working to stave off circular Blueprint dependency issues (cutting down one destabilizes another)… working on a full-fledged solution now.
-
Array properties with external Blueprint dependencies were not being fully loaded prior to generating the Blueprint class on load; fixed.
-
Blueprint assets containing a native component attachment were incorrectly being marked as needing to be saved upon opening; fixed.
-
Compiling a Blueprint with external dependencies was unnecessarily marking the dependent Blueprints as needing to be saved; fixed.
-
“Compile Blueprints” automation test in the Session Frontend was marking all Blueprint assets as needing to be saved; fixed.
-
DataTable Blueprint nodes: fix for Get Data Table Row’s Out Row not updating as expected.
-
Deleting a parent Blueprint while its child Blueprint still exists was causing a crash; fixed.
-
Enums with redirects could lead to broken connections to Select nodes in a Blueprint graph on load; fixed.
-
The “Select” node in a Blueprint graph was not working correctly with array types; fixed.
-
Fixed Function Entry node title when function has a friendly name.
-
Fixed a crash on cut/delete Actor instance w/ components followed by undo.
-
Fixed a copy/paste crash in Components mode in the Blueprint editor.
-
Fixed a crash during garbage collection caused by an uninitialized actor instance name inside a ChildActorComponent.
-
Fixed VM crash on compile when a property was accessed externally by a variable node in a dependent BP’s construction script.
-
Fixed an that allowed variable drag-and-drop onto a graph when it would create an invalid self reference to an external object.
-
Fixed issues with “Text” pins stomping eachothers values after duplicating a Blueprint.
-
Fixed: Changed logic for hiding the target pin on a pure node to take into account the compatibility of the BP and the function
-
Made various node padding values adjustable to iterate on more compact nodes (WIP).
-
Removed some redundant code from SGraphNodeK2Event::AddPin, relying on the inherited behavior except for delegate pins
-
When class properties in Blueprints are missing their classes (because they were removed, etc), we replace those class references with an Object class reference, so they can be fixed up.
Rendering
-
New: Added auto lightmap UV generation.
-
Repacks existing UV charts. Will join charts in cases of tiling.
-
Added to a setting to the FBX import dialog to enable or disable feature.
-
Now part of the static mesh build process. Properties are exposed in mesh editor under Build Settings.
-
New: Added r.ProfileGPU.Pattern which allows you to filter the entries when using ProfileGPU. Renamed some other cvars to start with r.ProfileGPU
-
New: Added shading model SubsurfaceProfile, can specify new SubsurfaceProfile asset on the material or material instance uses SeparableSSS by Jorge Jimenez and Diego Gutierrez.
-
New: Added warning to renderer settings when a property is not found or set to read-only (read-only isn’t always an error since it still gets written to the ini file, it just won’t take effect until the next run)
-
Distance Field Ambient Occlusion Improvements
-
Asynchronous generation, meshes no longer have to be closed.
-
Resulting bent normal is also used to occlude skylight specular using an approximate cone-cone intersection.
-
Optimizations and quality improvements.
-
Meshes without a distance field representation now receive occlusion.
-
Added OcclusionMaxDistance and Contrast properties to Movable sky light.
-
Reflection captures now work with the movable skylight.
-
Added new show flag to visualize mesh distance fields, which ray traces through the distance fields and gives a sense of their shape.
-
New: Rendering project setting ‘bUseNormalMapsForStaticLighting’
-
Improves baked lighting quality on low poly meshes with normal maps containing more than just detail normal information.
-
New: Ray Traced Distance Field soft shadows.
-
Traces a ray through the scene’s distance fields to the light, approximating a cone trace to produce soft shadows.
-
Needs ‘bGenerateMeshDistanceFields’ project setting enabled. Same limitations as DFAO.
-
Supports point, spot and directional lights, once bUseRayTracedDistanceFieldShadows has been enabled.
-
Point and spot lights use SourceRadius to control penumbra size, DirectionalLight uses LightSourceAngle.
-
Ray traced shadows on a directional light cover up to DistanceFieldShadowDistance, and can complement CSM by handling the distant shadows.
-
New: SM4 feature level now supports reflection captures on translucency.
-
New: Added support for Sky Lights on Mobile.
-
Exposed project defaults to allow some postprocess settings to be enabled/disabled by default.
-
Added new material advanced flag bAutomaticallySetUsageInEditor, which is useful to disable on base materials to prevent usage flags accidentally getting set.
-
Altered buffer visualization assets to be before tonemapper (will make them AA with newer code)
-
Disable GPU skin passthrough vertex factories from compiling shaders when the feature is disabled.
-
Game console history works now like auto completion in editor, up to 50 elements are stored, no elements are removed if there is a duplicated
-
Improved specular handling in the shading model.
-
Now you can resolve a render target texture without clearing the buffer by simply calling UpdateResourceImmediate(false) on a UTextureRenderTarget2D.
-
Renamed function SetBrightness to SetIntensity for ULightComponent and USkyLightComponent.
-
Shadows cast by hidden actors now update/animate.
-
Binormals for destructible meshes are now correctly generated. should fix cases where vertex normals for destructible meshes were wrong.
-
Static meshes completely in shadow from a stationary light will toss their static shadowmap data and use a cheaper base pass permutation.
-
FPrimitiveSceneProxy::PreRenderView / DrawDynamicElements refactored into GetDynamicMeshElements.
-
Both paths still exist in code during transition. The GetDynamicMeshElements path is currently disabled, enable with ‘r.UseGetDynamicMeshElements 1’.
-
GetDynamicMeshElements is called once in InitViews, and the resulting meshes are used in various passes.
-
GetDynamicMeshElements is const and must not modify the proxy, update work should be pushed to the proxy from the game thread.
-
GetDynamicMeshElements can be called on views that are not in the view family, which allows a proper view for shadow depth passes.
-
Improved display names and tooltips for some rendering project settings.
-
Indirect Lighting Cache improvements (character indirect lighting)
-
Primitives default to interpolating a single point, overall indirect lighting cache update time is 4x less.
-
PrimitiveComponents have a new advanced lighting property - IndirectLightingCacheQuality. Set to Volume to get the previous behavior.
-
Added new Lightmass WorldSetting VolumeLightSamplePlacementScale which allows users to reduce IndirectLightingCache cost and memory in their level.
-
Fixed artifacts when more than 1728 movable components were present.
-
Lightmass kDOP preallocates less memory, supports Nodes array resize
-
LandscapeMountains Lightmass memory usage went from 19Gb -> 10.5Gb
-
Fixed LightFunctions getting disabled with low FOV.
-
Fixed CustomDepth BufferVisualization asset.
-
Fixed CustomDepth rendering.
-
Fixed some bufferVis materials - for some reasons the pins have been mixed up.
-
Fixed minor banding issues with bright image based lighting.
-
Fixed ScreenSpaceSubsurfaceScattering with LPV.
-
Fixed upside down rendering on Mobile projects when using Canvas.
-
Fixed specular intensity on mobile
-
Fixed SSR with clear coat.
-
Fixed responsive AA.
-
Fixed velocity rendering in stereo.
-
Fixed specular on movable skylights.
-
Fixed IndirectLightingCache show flag disabling direct lighting on dynamic objects.
-
Fixed stationary skylights not getting lightmap mixing.
Animation
-
New: Animation Retargeting between different spaces.
-
You can retarget animations between different skeletons using “Retarget” feature in engine via multiple options. feature allows you to create a copy of animation asset to retarget for different skeleton using copy and/or modifying animation itself. If the bone name matches, you don’t have to use rig system. If bone names don’t match, you’ll have to use new “rig” system. If it’s humanoid, please use engine Humanoid Rig. If it is not possible, you can create rig from any skeleton, and make sure both skeleton shares the same rig. Then you’ll be able to retarget correctly. Check more for documentation.
-
New: Added the ability to reimport animations in asset browser via right-click.
-
New: Added option to duplicate curves in animation assets.
-
New: Added Smart Names to skeleton.
-
Central dictionary of skeleton string metadata.
-
Curve names updated to use smart name system.
-
New: Added marquee selection to Persona notify panel.
-
New: Added filtering by skeleton for anim asset reference variables in anim blueprints.
-
New: Added support for blendspaces to play animations with a playrate of -1.
-
New: Added SkelControl Trail Node in Animation blueprint.
-
Import Curve support if it’s custom attribute of the skeleton node.
-
Improved undo in the retarget source manager.
-
AnimNotify: added duration for the Begin event
-
BlendSpace: fixed with not being able to select bone name for Per-Bone Blend
-
BoneSelection Widget : not property linked anymore
-
Changed retargeting logic to deal with AnimSequences that are referenced by other AnimSequences.
-
New sockets are created with the name of the parent bone instead of variations on “NewSocket”.
-
Persona viewport fitting when focusing on a mesh improved.
-
“Step” action in blueprint debugging mapped to F10 now. Possess/Unpossess moved from F10 to F8.
-
Stopped transition nodes being selected instead of the new state nodes when dragging from an existing state nodes.
-
Turned off notify processing when generating animation thumbnails.
-
Fixed intermittent realloc crash in Persona.
-
Fixed Anim Notifies ending up with end offsets when not a state notify.
-
Fixed Anim Notify States jumping around when dragged
-
Fixed begin and end snaps appearing on the wrong side of a notify when dragging.
-
Fixed smart name serialization issues.
-
Fixed discrepancies in socket assignment in animation assets.
-
Fixed notify sorting causing notify nodes to move around erratically in the panel.
-
Fixed undo not working correctly on notify objects.
-
Fixed crash in skeleton when copying animations with curves between them.
-
Fixed Montage debug display to correctly show weight information.
-
Fixed manually entered LOD screen sizes from snapping to invalid values.
-
Fixed “New Notify” menu not showing derived animation notifies.
-
Fixed crash with multithreaded animation evaluation.
-
Fixed erroneous references showing up on the delete asset dialog for Blendspaces/Montages after their thumbnails had been generated.
-
Fixed additional meshes display UI (previously added items were invisible on the UI)
-
Fix for GetCompletionHandle returning NULL.
-
Fixed crash when retargeting assets that have no skeleton.
-
Fixed bug where changing the initial time position of an animation on a skeletal mesh via the details panel didn’t cause the mesh to update.
-
Fixed with adding AnimComposite to World.
Gameplay and Framework
-
New: Added support for ticking ability tasks.
-
New: Added support for a negative play rate on timeline components.
-
Added support for an active GameplayAbility blocking other abilities from activating based on ability tags.
-
New: Added FGameplayTagCountContainer struct, which contains a counted set of GameplayTags.
-
New: Added target homing ability to the Projectile Movement Component.
-
New: Added conditional loop decorator.
-
New: Added CleanupMemory function to BTNode class.
-
New: Added csv parser.
-
New: Added ability to specify a font hinting algorithm to use when rendering fonts with slate.
-
New: Added setting to allow for ‘transparent’ box selection in perspective viewports.
-
Enabling setting will allow marquee box selections in perspective viewports to select actors even if they are fully occluded by other actors.
-
New: Added constant-velocity versions of various interpto functions.
-
New: Added AActor::UnitializeComponents and UActorComponent::UnitializeComponent to pair with the existing InitializeComponent(s) functions.
-
New: Added EQS Logging to Visual Logger.
-
New: Added editor option to draw/visualize NavOctree.
-
Behavior tree service notify moved from execution start to search start for better results with condition checking services.
-
New: Can now create a new blueprint directly from button next to class dropdowns for classes that are blueprintable.
-
New: Converting a TSubclassOf property to a TAssetSubclassOf property will now work automatically. Automatic conversion is also now supported for converting arrays of UObjects to arrays of TAssetPtr
-
Added code to UAT to support platforms that compile unique executables but use cooked data from a different platform. It is currently not accessible from the command line
-
Enabled EQS Debugging as part of Gameplay Debugger - it works with client-server games too. It’s disabled for projects without EQS.
-
Extended LogVisualizer tool. It’s possible to select and render specific EQS query data.
-
Extended GameplayDebugger to collect EQS data from Pawn and AIController simultaneously (some queries can be executed on pawn and some on controller)
-
Extended Visual Logger and UObjecs can log data directly. There is no need to log only from Actors any more but there is a catch - object has to redirect his logs to actor and actor will own logs.
-
Extended GameplayDebugger data view for Simulate in editor. Properties from GameplayDebuggingReplicator actor (actor visible only during Simulate) can be used to switch debug views.
-
Enhanced debug information for single item in EQS Debugger (GameplayDebugger feature).
-
New: GetGlobalTimeDilation blueprint node is now available.
-
GameplayDebugger can debug multiple EQS queries now and we can switch between them to view selected one.
-
New: IsGamePaused is now available as a blueprint node.
-
Added SetSupressViewportTransitionMessage to library functions.
-
Added some extra info to the check in RecompileBlueprintBytecode to indicate which blueprint has an invalid genrated class.
-
Added several string manipulation functions to blueprint string library.
-
Added metatags to many widgets for new tutorial system.
-
Changed viewport transition message to default to off.
-
Max agent step height can be defined per navmesh.
-
Many functions in the identity and session online subsystem interfaces now have overloads that take an FUniqueNetId instead of a LocalUserNum.
-
These overloads are useful on platforms that can have user-controller mappings that can change arbitrarily, or are not necessarily one-to-one, like Xbox One.
-
Removed RenderingSettings.h and AudioSettings.h from Engine.h, including them where actually used.
-
The “Read Leaderboard Integer” Blueprint node now works correctly for Google Play on Android.
-
Project settings can now be accessed quickly from the Settings menu on the editor toolbar. World settings moved in to the Settings menu instead of having its own button.
-
New: ToggleDebugCamera camera rotation now works with touch input (or when bUseMouseForTouch=true).
-
Removed MinimalAIP from UCurveBase and UCurveLinearColor to allow extending in another module (editor.)
-
Also made UCurveLinearColor::GetLinearColorValue() function virtual to override.
-
New: Split Pin for blueprint struct pins is now enabled for all users and is no longer an experimental feature.
-
Fix: Camera frustum visualization is now updated when camera component properties are modified.
-
Added check for level bounds while adding to NavOctree.
-
Added AActor::FinishSpawning to compartamentalize duplicated steps in numerous places. Ensure it only gets called once.
-
Added dynamic allocations for path finding, removed hardcoded limit of 128 polys in path corridor.
-
Added support for projecting multiple points on navmesh and raycast with known starting poly.
-
Added go to C++ file and documentation to right clicking on content browser assets.
-
Added localization gathering from native, fixed-size array properties.
-
Added Brazilian Portuguese and Spanish translations to UE4.
-
Added workaround for .NET framework with Chinese cultures in OneSky logic.
-
Added workaround for OneSky giving project names with an appended null-terminator.
-
Added IsUsingDefaultBounds to ALevelBounds to indicate that because there are no actors in the level that contribute to the bounds, the default bounds are being used.
-
Added a slow task for adding sublevels to a persistent map.
-
Added CulturePointer.h, which typedefs ThreadSafe TSharedRef and TSharePtr for FCulture. These should be used instead of the manual template instantiations for consistency.
-
Added a command line option (-nosharedpchs) to UBT to disable shared precompiled headers.
-
Added Cultures-to-Stage list to Project Packaging Settings. Default value includes only English. Packaging now only stages specified localization data as per the previous comment or by passing “-CookCultures=”.
-
APlayerController::DeprojectMousePositionToWorld and DeprojectScreenPositionToWorld both now return false when unable to deproject, due lack of mouse cursor, valid scene view, etc.
-
APlayerController::GetMousePosition now returns false when a mouse is not attached.
-
Attachment replication now takes into account RelativeScale3D.
-
SimulatedRootMotionPositionFixup: handle zero play rate, and better communicate “Server ahead of Client” pre-requisite.
-
Removed SkeletalMeshComponent dependency on Character.
-
Character controlling its Mesh TickPose(), so that only its mesh is affected by it, and not every SkeletalMesh attached to it.
-
Better NavMesh rendering performance when using GetDynamicMeshElements way.
-
bIgnoreForFlushing is now propogated from AudioComponent to ActiveSound and works when used for Play In Editor.
-
Culture fallback logic improved and made consistent - any locale can be used if its internationalization data is present and some parent of it has localization data.
-
Corrected with ICU internationalization data and UE4 localization data not being properly staged.
-
Consistent localization-related commandlet path-handling with regards to relative paths. From now on, please specify paths relative to to the project’s directory or the Engine directory.
-
Clear smoothing state when Time Dilation changes to avoid lagging sensitivity artifacts.
-
Clicking on source links in blueprint projects now works correctly.
-
Continued work on in-editor mobile preview. feature can be enabled from the experimental editor settings, and then selected from the “Quick Settings” menu.
-
Improvements and fixes to resolution switching functionality, and initialization precedence for all our various config files.
-
Datatable editor now refreshes correctly when the datatable is reimported.
-
DrawDebug* blueprint nodes now have a consistent API.
-
Dynamically bound nodes are now found in function graphs as well as the main event graph.
-
EdGraphSchema constant variables are now static variables.
-
Ensured that Actor’s in levels that have been unloaded do not get a tick if they were already scheduled.
-
EnableInput will always create an InputComponent if one doesn’t exist even if there are no BP bindings to add.
-
Enable Static Mesh Collision view, by default.
-
FKey is now a BlueprintType.
-
FEdGraphSchemaAction now uses FNames instead of FString for RTTI.
-
FAttenuationSettings properties now properly marked as BlueprintReadWrite.
-
Geometry edit mode now has a UI priority order.
-
Gathering from assets and metadata nows loads required modules before trying to load packages. Specify modules using ModulesToPreload in the commandlet config files.
-
Generating archives will now fail if the archives are of the wrong version. helps to avoid users losing data due to a resave with a different verison and not being able to repair the old data.
-
Input stack will no longer be cleared when initializing player input as other actors may have already pushed their input component on to the stack.
-
Improved messages regarding falling back to the base language of a culture when there is no localization data for the specified culture.
-
Launching PIE-V as Client, with a Dedicated Server no longer crashes.
-
Many places that were using FActorIterator now use optimized TActorIterator as appropriate
-
Moved the per-user DDC cache into a version-agnostic engine folder.
-
Modified TArray::FilterByPredicate to be const correct (passes const data to the predicate and is a const function itself)
-
Moved the Release/Development shaders button functionality to a CVar.
-
Modified reimport analytics to clarify exactly what file type was reimported.
-
Multiple clients are now spawned correctly when launching a listen server.
-
Newly spawned actors in the editor now have more correct unique names.
-
Optimizations for GameplayDebugger, both regular and related to network data replication and replication channel bandwidth.
-
Pawn’s move action won’t be paused by non-move actions.
-
*PIE prefix is now properly stripped when looking for GameMode based on map prefix.
-
PushInputComponent will put the input component in to the stack even if there are no bindings.
-
PinFriendlyName is now used consistently across the UI
-
Primitive component’s bCanEverAffectNavigation flag can be now changed in instances
-
Purge duplicate AxisConfig entries in cases where the ini files have gotten messed up.
-
PlatformApplication’s IsMouseAttached exposed to SlateApplication.
-
Rich tooltips added to brushes in Modes window.
-
Recompile-on-startup now shows the project name and file names for out of date modules.
-
Shaders are now included in projects for standalone games.
-
Sprite and GPU particles now support Custom UVs.
-
Switch Enum now uses a proper enum typed pin rather than a generic byte
-
Streaming strategy for textures calculated based only on primitive mobility settings.
-
Turning off Surface Snapping in the editor viewport now prevents surface alignment during placement.
-
Transforms for mesh particles are now passed into the vertex shader correctly. Still not available in pixel shaders.
-
Transition map for seamless travel correctly marked as Game or PIE world.
-
Types in blueprint pin tooltips and variable type pickers are now displayed in more readable format.
-
UAnimInstance::GetWorld() will no longer crash when called on the Class Default Object.
-
WidthScaleCurve property of trail anim notifies now searches and auto-fills bone names.
-
@param and @return portions of blueprint functions/events will no longer display in tooltips.
-
Renamed all localization data and code using the erroneous “zh-CN” locale instead of the correct “zh-Hans-CN” locale for China.
-
Reworked the new project dialog.
-
Categorized templates into Blueprint/C++ templates and organized them into tabs.
-
New categories can be specified in the templatedefs.ini file of a template project using a Category tag: Category=NewCategory.
-
New category types can be registered with a proper description and icon in code through FGameProjectGenerationModule::RegisterTemplateCategory.
-
Added preview images to templates.
-
Generally tidied the UI.
-
Added hardware targting options to the dialog.
-
Replaced crude csv parsing (used for data table importing and the like) with FCsvParser use.
-
Removed deprecated editor mode API that was marked for deprecation in 4.3.
-
Removed the built in shaders option from the material editor.
-
Removed unnecessary game thread task from FRecastRenderingSceneProxy.
-
Removed circular dependency between AIModule and GameplayDebugger.
-
Removed logic in PO import/export that failed to read/write from culture directories if only one culture was specified.
-
Reduced UE_VLOG overhead when recording with disabled visual logs.
-
Refined text rendering on content browser thumbnails.
-
Switch Node Polish
-
Name and String have + Add Pin button.
-
Enum doesn’t display Remove Execution Pin on right click.
-
All types have proper default in selection box.
-
AActor::EndPlay fixes.
-
Add call to EndPlay for quit in standalone game.
-
Move logic for when to dispatch EndPlay in to a non-virtual RouteEndPlay function.
-
Only call EndPlay if the Actor has been initialized and the world has begun play.
-
The physics scenes for a world are now destroyed after cooking a package containing the world. If multiple worlds are in memory at cook time, too many scenes were being allocated and causing a deadlock when locking a scene for read/write
-
Moved asset thumbnail dirtying code out of ContentBrowserSingleton and into AssetThumbnail.cpp. Updating thumbnails is not the responsibility of the Content Browser since many systems use thumbnails now.
-
Path pickers that allow context menus will once again allow the creation of a new folder. also fixes the bug where pickers configured to the extend the menu actually never get a to extend anything.
-
Made the default level streaming class an editor user setting.
-
Reduced the number of GetTimeStamp calls when checking for DDC files by 1, which reduces I/O burden on the shared DDC a little bit.
-
Worlds with no actors in them no longer crash in PostLoad.
-
Added null checking for missing expressions and comments when fixing up materials on load.
-
Expanded the particle system audit commandlet to find particle systems with a high spawn rate or far lod distance.
-
Added FPackageName::ObjectPathToPackageName to match ObjectPathToObjectName
-
You can now configure which asset types cause a forced GC in the cook commandlet. By default, world assets cause to happen, which is the existing behavior.
-
Asset pickers no longer match an asset’s class name if there is a filter for exactly one class.
-
All path views are now affected by the “Show Engine Content” checkbox (and show developers and show plugins), not just path views found in content browsers.
-
SAssetPickers can now save their view settings. The SAssetDialog saves it’s asset picker view settings.
-
Deprecated ULevelStreaming::PackageName in favor of the new WorldAsset TAssetPtr. All existing usage of PackageName has been replaced with GetWorldAssetPackageName() and SetWorldAssetByPackageName().
-
If you have actors from multiple levels selected, you can now move them to the selected level via the level browser. It will only move actors that are not already in the destination level.
-
Added support for removing dynamic mount points. Added more information to the OnContentPathMounted delegate as well.
-
TAssetPtr UProperties now properly report string asset references when saving packages. Also, string asset references with empty values no longer include “None” in the list of references.
-
Clicking on a folder in any SPathView in the editor will now prioritize discovering assets in that folder.
-
Removed the “Show only assets in selected folders” editor preference for the Content Browser. is implied from “Show Folders” and should have been removed when folders were added.
-
Illegal characters in names are now only reported once, even if they show up in the illegal characters or test string list multiple times.
-
Fix for loading the mainframe module while in a commandlet. There are no key events when running in a commandlet.
-
Fixed a performance problem in the editor when discovering paths in the project initially.
-
Fixed Character and PaperCharacter not properly setting Mesh/Sprite tick pre-requisite to happen after MovementComponent tick.
-
Fixed uninitialized bounds in some circumstances for NavLinkRenderingComponent.
-
Fixed minor bug where referencing packages would show up multiple times when fixing up multiple redirectors referenced by the same package.
-
Fixed some problems that caused code bases that excluded code for certain platforms to generate projects correctly.
-
Fixed a bug where not all assets would be removed from the disk cache in the asset registry when deleting a package containing multiple assets.
-
Fixed a rare crash involving releasing the AdjacencyIndexBuffer on static meshes.
-
Fixed inertial scroll not being cancelled when entering overscroll.
-
Fixed not being able to import FBX animations into camera anims.
-
Fixed measure tool calculating the wrong size.
-
Fixed crash when hot-reloading the Level Editor.
-
Fixed resetting cooldown decorator memory on reentering the same subtree.
-
Fixed infinite loop decorator hang.
-
Fixed cycles in blackboard’s parent chain.
-
Fixed multiple nodes connected to special pins in behavior tree editor
-
Fixed box collision export for navmesh.
-
Fixed navigation path’s string pulling.
-
Fixed crash in UEditorEngine::TeardownPlaySession.
-
Fixes for Simulate mode in blueprint component view.
-
Fixes inside FRecastRenderingSceneProxy to work with GetDynamicMeshElements correctly.
-
Fixed bug where blueprint node warning/error banner did not display if the message had multiple object parameters and the last one isn’t a pin or node.
-
Fixed bug where sounds could be started by thumbnail worlds.
-
Fixed crash with ChildActor component due to renaming to an object name that is already used.
-
Fixed Doppler not working when showing debug information about playing sounds.
-
Fixed garbage collection issues with some playing sounds that are not referenced via an audio component.
-
Fixed crash in AGameMode::Restart if the Pawn is torn off (destroyed) during the call to PossessPawn.
-
Fixed crash in treeview with negative index.
-
Fixed null ptr crash in undoing camera group modification.
-
Fixed debug rendering for NavMesh collision geometry
-
Fixed freeze with AIMoveTo blueprint node.
-
Fixed compilation issues with disabled USE_EQS_DEBUGGER flag.
-
Fixed crash in EQSRenderingComponent.
-
Fixed EQS debug data for sorted EQS items (it’s slower method to sort items but only active with USE_EQS_DEBUGGER flag).
-
Fixed rendering for paths (from path finding) while using GameplayDebugger (client/server too).
-
Fix for null ptr crash that can occur if ending a PIE session when slate widgets are active (viewport gets cleaned up before the widget).
-
Fix for LogVisualizer, to get rid of duplicated actors on logs list.
-
Fixed order in which serializing text marks packages for requiring localization. Resolves where some text was not being gathered from assets for localization.
-
Fixed improper iteration over directories when trying to enumerate which cultures have localization data.
-
Fixed an with passing a gather text configuration file path featuring spaces when running the GatherText commandlet.
-
Fixed text test that was incorrectly comparing the number of code units in a string of one type to the number of code points in another type.
-
Fixed case insensitive source string comparison when checking if multiple UTextProperty are identical.
-
Fixed locales/cultures that don’t have base language localization data being omitted from region & language drop downs.
-
Fixed GatherTextFromSource commandlet gathering text in its escaped form - it now unescapes gathered text. Fixed escape/unescape handling in PO file import/export.
-
Fixed escaping of double quotes when storing manifest/archive strings from their data structures into a JSON object. The manifest/archive JSON serializers already properly escape text consistently before writing to file.
-
Fixed FUProjectDictionary incorrectly treating projects as foreign when non-foreign projects are specified with a relative path.
-
Fixed it so scalability settings are correctly written to the user config file when saving settings, and are properly reset to in memory values when reset.
-
Fixed several issues that occurred when reattaching components while changing graphics quality settings.
-
Fixed a bug where FText could become corrupted while editing assets.
Core
-
New: FName case preservation in the editor
-
Previously, built-in names would prevent users from using the same name with different case
-
FName is now case-preserving when WITH_CASE_PRESERVING_NAME is true.
-
You can no longer assume that sizeof(FName) is 8-bytes (you can use FMinimalName if you have code that requires an 8-byte name, however should only be used if the code cannot otherwise be updated).
-
FName no longer has GetIndex(), it has GetComparisonIndex() and GetDisplayIndex() instead.
-
Added “-WaitForDebugger” command-line option.
-
When specified, non-shipping UE4 programs will pause at startup until a debugger becomes attached.
-
Very useful for remote debugging code that executes at startup time (such as a plugin’s StartupModule function).
-
Added an ensure >0 to FBlueprintCoreDelegates::SetScriptMaximumLoopIterations
-
Added compiler version logging at engine startup.
-
Detects both Clang and Visual C++, prints version information to log.
-
Added ensure messages to the crashes.
-
Added functions to Actor and SceneComponent for adding to location and rotation in world space.
-
Added AActor methods: AddActorWorldRotation, AddActorWorldOffset, AddActorWorldTransform (ignores scale)
-
Added USceneComponent methods: AddWorldRotation, AddWorldOffset, AddWorldTransform (ignores scale)
-
Added new functions for reading the movement input vector from Pawn and PawnMovementComponent.
-
These functions make explicit whether the input being read has been consumed or is pending processing, so components can read the old values after input is consumed rather than the zeroed values for the next frame.
-
New functions added to get the pending input (input that has not yet caused movement).
-
New functions added to get the last processed input (input that last caused movement).
-
APawn::GetMovementInputVector() and UPawnMovementComponent::GetInputVector() have been deprecated in favor of the new functions.
-
Added support for custom sub-stepping behavior in ProjectileMovementComponent.
-
New variables: bForceSubStepping, MaxSimulationTimeStep, MaxSimulationIterations.
-
New functions: GetSimulationTimeStep(), ShouldUseSubStepping()
-
Added descriptive error messages when UHT fails to create .generated.h files.
-
Added automation tests opt-in for console.
-
Added UTF8 support in FOutputDeviceFile.
-
Added support for external content for plugins.
-
DataAgeThreshold=N can now optionally be supplied as a command line argument to BuildPatchTool.exe, where N is a number of days.
-
If specified during a patch generation operation, only existing data aged less than the supplied parameter (in days) will be considered for reuse
-
If specified during a compactify operation, only data aged more than the supplied parameter (in days) will be eligible for deletion
-
These changes have been made to allow for concurrent patch generation and compactify operations on the same cloud directory, during which patch generation should have a lower threshold than compactify.
-
Exposed UNavigationSystem::OnNavigationBoundsUpdated for BP use and changed the param to a more specific ANavMeshBoundsVolume type.
-
FName is now case-preserving in the editor and UHT.
-
addresses a number of issues where asset, actor, blueprint component, or variable names could not have mistyped names corrected when they differed only by case, or could cause UHT to generate code that would not compile.
-
Implemented a generic BTTask for making AI face given BB entry.
-
Improved error message when GGameName (derived from the .uproject name) mismatches the GameName key in the section of DefaultGame.ini
-
IGenericTeamAgentInterface can be used to query team’s attitude towards another team.
-
Made ARecastNavMesh::GetRecastNavMeshImpl protected to that it can be used by derived classes.
-
Made navmesh query filters virtual by default.
-
There’s still a way to have non-virtual filters, configurable via ARecastNavMesh::bUseVirtualFilters.
-
Can be controller per filter instance as well.
-
Made navigation generators public and expandable in external modules.
-
Made Build Patch Services and BuiltPatchTool public again.
-
Added BuildPatchTool command line options to add custom fields to the manifests it generates. These new options are: -custom=“field=value”, -customint=“field=value” & -customfloat=“field=value”
-
Minor fixes related to using the FCString.
-
ScriptPlugin: Added helper project and instructions how to set up LUA to work with UE4.
-
Fixed an with the FPSChart functionality.
-
Fixed missing property names in ‘obj refs’ output.
-
Fixed parsing enum default values in UHT.
-
Fixed crashes on long compilation command lines.
-
Fixed TMap move semantics.
-
Fixed failure when packaging for WindowsNoEditor in UnrealFrontend.
-
Added the OnlineFriendsInterface.h to Online.h so that UE4 code projects can access online social features.
-
Changed default label of BTDecorator_Blackboard to more explanatory “Blackboard Based Condition”
-
Compile time improvements - headers in Engine module include only what they need.
-
FDateTime and FTimespan can now be edited in the Property Editor and were also exposed to Blueprints.
-
Optimized invocation list compaction in multicast delegates.
-
Crash fixes to some NavigationSystem’s extreme use cases like enormous navmesh bounds or zero-extent bounds.
-
Fixed marking a FBlackboardKeySelector as accepting “None” as value breaking key ID caching.
-
Optimized TArray::RemoveAll<Predicate> to use the run-removal implementation from TArray::Remove
-
FMath::LineBoxIntersection() parameter simplification.
-
TOptional has been refactored, and is now suitable for use with non-POD classes
-
TOptional will now hit a check() if calling GetValue() on a TOptional that’s not set, if you hit replace your call to GetValue() with Get(DefaultValue) or check IsSet().
-
Fixed EQSTestingPawn crashing the engine if it got loaded with a level.
-
Fixed FunctionalTesting crashing when parsing invalid repro-string.
-
Fixed a bug in ARecastNavMesh::BatchRaycast causing NaN hit locations.
-
Fixed navmesh not generating for navigation bound volumes from levels added to a persistent level in the editor.
-
Fixed UNavigationPath.PathPoints not getting updated with changes to the actual observer navigation path.
-
Fixed ANavigationData::TickActor not calling Super::TickActor.
-
Fixed broken formatting tokens in FTimespan::ToString()
UnrealMath
-
Added RotationAboutPointMatrix
-
Added static Make() methods for the various derived FMatrix types.
-
Allows single expressions that return an FMatrix instead of derived type constructors that rely on implicit conversion…
-
Simplified the implementation of FQuat::MakeFromEuler.
-
Implemented GetTypeHash for FVector4 and FLinearColor.
TransformCalculus Framework
-
Provides a uniform set of operations for classes that can be used as a spatial transform.
-
Allows users to focus on intent and not math when working with spatial hierarchies like rigid bodies, etc.
-
See documentation in TransformCalculus.h
-
Provides a full suite of conforming transform types for 2D transformations:
-
FVector2D
-
FScale2D
-
FShear2D
-
FQuat2D
-
FMatrix2x2
-
FTransform2D
-
Provides adapters for existing 3D transform types in UE4:
-
FVector
-
FScale3D
-
FQuat
-
FMatrix
-
FRotator
Unreal Header Tool
-
UnrealHeaderTool now supports C++11 scoped enums, aka. ‘enum class’
-
Clarified a couple of error messages that sounded like keywords were limited to only multicast delegate properties (when they are also applicable to functions)
Unreal Build Tool
-
New: UnrealBuildTool now starts up more quickly (faster C++ iteration times).
-
New: Unreal Build Tool now display friendly action descriptions when compiling locally on Windows platform.
-
UnrealBuildTool macros are now consistent across configurations.
-
UnrealBuildTool now gets the cl.exe from the executable itself rather than the registry, for better compatibility with non-Professional editions of Visual .
-
Now it deletes old and unnecessary hot-reload PDBs.
-
RPC UFunctions will now generate virtual X_Validate() functions so they can be overloaded if the function itself is virtual.
-
Fixed detection of hot-reload compilation if other UE4Editor process was running in the system.
Project Versions
-
Solution files created for GitHub builds of the engine now set the game to as the active project by default.
-
New VS2012 projects now include default command line arguments for all projects.
-
UnrealVersionSelector now prompts to browse for an engine installation if an existing one is not found.
-
Registering shell extensions now fixes up any stale user overrides for file associations.
-
UnrealBuildTool now correctly handles user-supplied resource files, and will ignore PCLaunch.rc when they are present.
-
UnrealVersionSelector now warns when trying to generate projects for content-only games.
Stats
-
New: There is a new stats page for Cooker Statistics in StatsViewer
-
StatsViewer: Now shows hyperlinked arrays of objects
-
Added a command ‘stat display’ which may be used to change various stats display settings
-
Updated comment regarding stats commands exec.
-
Fixed minor memory leak.
Profiler
-
Fixed FPS Chart not working in the previous version.
Hot-Reload
-
Hot-Reload now supports structural changes to UObject-derived classes. It’s no longer disallowed to add/remove new properties and classes for hot-reload.
-
Hot-Reload from IDE: when compiling game target that’s currently open in the editor from Visual , the editor will automatically perform hot-reload after compilation has finished.
-
After hot-reload all default class object will be re-created to match the changes made to the default values.
-
When performing Hot-reload when the target project is up-to-date, no new DLLs will be produced, thus reducing iteration times.
Slate UI System
-
New: Multitouch is now supported for mouse capture in Slate and UMG. Actions like pressing and holding a button, while pressing a different button now functions correctly
-
New: 2D render transforms have been added to Slate. Render transforms allow short, transitional for a widget without affecting how it is laid out. They support a complete set of 2D affine transforms (translation, rotation, shear, scale, mirroring).
-
New: Added image support to rich text editing.
-
MultiLineEditableText can now be used to edit rich-text (there’s a demo in SlateViewer)
-
TextBlock and SpinBox now support a minimum desired width for layout.
-
Added a SerializeFromMismatchedTag to FSlateColor that can convert an FColor or FLinearColor property to an FSlateColor.
-
Implemented scrolling for SMultiLineEditableText.
-
STextBlock can now specify a justification, margin, and line height percentage.
-
SRichTextBlock now takes its text and highlight text as an attribute.
-
SEditableText, SEditableTextBox, SMultiLineEditableText, and SMultilineEditableTextBox now automatically work with virtual keyboards on mobile devices. Currently only single-line entry is supported.
-
SWindow changes
-
Added GetLocalToScreenTransform. (Screen space == Desktop space)
-
Added GetLocalToWindowTransform (Window space == Desktop space without the window offset)
-
Added GetClientRectInScreen
-
Added three texture atlasing padding styles:
-
NoPadding - don’t apply any padding (used to be Padding == 0).
-
DilateBorder - copy border edges to apply 1-pixel padding (used to be Padding == 1).
-
PadWithZero - expand 1-pixel border and fill it with zeros (new style).
-
Removed incomplete support for Padding > 1. It wasn’t useful as we don’t support mips or aniso filtering.
-
FontCache now uses PadWithZero padding to improve the appearance of zoomed text.
-
FSlateRect updates
-
Added support for the new transform calculus framework (TransformRect).
-
Added new members GetBottomRight() and OffsetBy().
-
Added FromPointAndExtent() factory function
-
Made the default/4-float ctor explicit.
-
Added FSlateRotatedRect
-
Supports FSlateRect-like functionality, but for parallelograms induced by render transforms (scale/shear/mirror).
-
Also added IsUnderLocation() and ToBoundingRect() for overlap testing.
-
Slate now uses Round instead of Trunc to snap to integer pixel coordinates. Snapping only occurs on final vertex creation now.
-
Added a ScissorRectBox widget that ensures child widgets are clipped even under render transforms by using hardware scissor rect.
-
Scissor Rects can be nested. A widget is clipped by scissor of the most recent predecessor.
-
Expect a performance impact beyond the hardware overhead as affects batching similar to painting to different layers.
-
Fixed SScrubWidget::OnPaint drawing the draggable bars with an incorrect offset.
-
Fixed crash when using SLATE_TEXT_ATTRIBUTE with a delegate that had become invalid.
-
Fixed crash when pressing return in a read-only text box.
-
Fixed some wrapping issues when using multi-line text with an STextBlock.
-
Fixed where the bar of a Slider widget did not appear on mobile devices.
-
Fixed crash when re-styling zero-length text runs
Audio
-
New: Sound Class for VOIP audio component can now be specified via the audio project settings.
-
Enabled Audio Streaming options behind a new setting in the ‘Experimental’ section of preferences
-
Added Audio setting to restrict the amount of streaming sounds that can play concurrently.
-
Ensured that additional channels for multichannel sounds can be imported correctly.
-
Ensured that new sounds started via ‘Play Sound Attached’ would be audible before playing.
-
Fixed problem with Parameter controlled Crossfade SoundNode.
-
Exposed Audio Component for the Buggy engine in the Vehicle sample.
-
Added search capability to key selection boxes.
-
Moved Streaming Manager update out of the expensive tasks section.
Platforms
Mac
-
Improved drag and drop between windows on Mac. Inactive window will not activate on mouse down if the cursor is over a draggable item.
-
Added pragma to treat deprecation attribute as warning, not error, on Mac.
-
For the benefit of OS X implement support for APPLE_client_storage & APPLE_texture_range and use them for non-renderable textures to eliminate the cost of Lock/Unlock and RHIAsyncReallocateTexture2D.
-
only works with uncompressed textures, but helps avoid very slow, synchronous calls to glGetTexImage despite using PBOs. does not increase memory overhead as client-storage textures use the backing store we provide for the GL engine copy.
-
Wrap OpenGL texture deletion calls so that on OS X DeleteTextures pools the texture names into one of three buffers so that textures are deleted at least two frames after their last use, amortises the cost of deleting the textures.
-
The texture deletion occurs after flushBuffer in BlitToViewport and the min/max number of textures to delete in a single invocation can be overidden by the r.Mac.MinTexturesToDeletePerFrame & r.Mac.MaxTexturesToDeletePerFrame.
-
Wrap glFlush so that on OS X we always call glFlushRenderAPPLE which is faster, while still sufficient for these calls.
-
Warn Mac users that attempt to run on Macs with OpenGL 3.3 GPUs as they aren’t fully supported also warn Mac users whose GPUs are below the recommended minimums that they may encounter low performance.
-
Added warnings for running with less than the recommended amount of memory or on a dual-core rather than quad-core processor as they also make a big difference.
-
Initial work to fix fullscreen mode on OS X properly - these changes make it possible to use ‘proper’ fullscreen mode which respects the chosen resolution for games where the mouse cursor is hidden.
-
The default remains as WindowedFullcreen as these changes don’t address the difference in mouse & display coordinate systems that results from using OS X’s scaled fullscreen mode.
-
Implemented support for saving open documents in Xcode via the XcodeSourceAccessor using Applescript & fixed the XcodeSourceAccessor’s display name.
-
Rewrote Mac OS X crash reporting to output the minidump information in Apple Crash Report format, which is then parsed by the new code in CrashDebugHelper into our diagnostic display format.
-
Symbolisation is now implemented using CoreSymbolication, atos is no longer required meaning we don’t require Xcode be installed.
-
Symbolisation now only happens within the CrashReportClient, not the crashed app, so the crash handling is async. handler safe.
-
More useful information is now provided in the logs.
-
Used a pre-configured malloc zone allocator instead of the current allocator once execution enters the async. signal handler on Mac OS X so that UE4 doesn’t become unkillable if it crashes.
-
Fixed various crashes and other Mac specific issues.
-
On OS X detach the game thread from the ‘blessed’ Cocoa main thread.
-
Cocoa isn’t an event-polling API as UE4 expects, so we separate the threads to emulate that behaviour.
-
means less spinning-beachball-of-doom when loading levels or cooking, etc. which made some windows unusable on OS X.
-
It also allows us to take steps to ensure the event ordering Slate demands, but OS X doesn’t always provide.
-
Implemented support for Distcc + DMUCs as an alternative to XGE on Mac OS X.
-
By either manually configuring distcc & DMUCS as per their documentation, or using the DistCode Xcode plugin compilation can be distributed amongst networked Macs.
-
All Macs must have the same developer tools installed & the same distcc/DMUCS/DistCode and be on the same local network.
-
works for compiling for Mac & iOS and it should be possible to configure distcc & DMUCS manually for use on build farms for remote building from Windows.
-
Implemented optional & off-by-default support for automatic graphics switching on OS X, rather than just relying on the OS, with a GUI plugin for the editor.
-
Adds DisplayMask for setting an explicit display mask, RendererID for the initially preferred rendering device, bUseMultipleRenderers to allow desktops to use multiple GPUs for blitting to the screen and bAllowAutomaticGraphicsSwitching to allow laptops with automatic graphics switching support to switch between discrete & integrated GPUs which provide the same OpenGL version.
-
The plugin provides an editor preferences panel & for laptops using bAllowAutomaticGraphicsSwitching a live drop-down in the LevelEditor window to select the current GPU.
Android
-
Experimental support for OpenGL ES 3.1 + Android Extension Pack as seen in the “Rivalry” demo at year’s Google I/O.
-
Added HTTP support for Android with libcurl with option to allow self-signed certificates in project settings network panel.
-
Added GetDefaultLocale to AndroidMisc.
-
Added force feedback support to Android to drive phone vibration.
-
Android now supports ADPCM audio, selectable via drop down in Project Settings for Android platform.
-
Android now supports procedural sound sources.
-
Implemented FPlatformMisc::Controlscreensaver for Android and added ControlScreensaver Blueprint node.
-
Added x86 Android support, but currently only for full source games, as we don’t supply x86 binaries for non-GitHub/Licensee builds yet. You can package separate or fat apks. If using separate, Launch On will query the connected device for the best match. is pretty early, so we are interested in feedback!
-
Added concept of r.MobileContentScaleFactor CVar (in DeviceProfiles) with a value of 0, meaning native resolution.
-
Added libgnustl_shared.so to APK during packaging (not on all Android devices).
-
Added cxa_demangle for x86 Android.
-
Changed GetCurrentThreadId on Android to use gettid() instead of pthread_self() to handle 64-bit.
-
Got rid of duplicate log messages on Android.
-
Updated x86 PhysX libs for Android.
-
Enabled ICU on Android. Added scripts for building ICU for Android.
-
Reduced the number of times the .apk has to be regenerated. If only content changes, Launch On will be much faster.
-
Support for loading system fonts added.
-
Updated SoundMod plugin to work with Android code projects
-
UE4 on Android now uses the GNUSTL_Shared shared object as the C++ runtime.
iOS
-
IPhone6/6+ support.
-
System Fonts now usable on IOS.
-
Added Texture Streaming for Metal on IOS.
-
Added support for iPhone6/6+ resolution.
-
Added concept of r.MobileContentScaleFactor CVar (in DeviceProfiles) with a value of 0, meaning native resolution.
-
New: iPhonePackager now filters out expired mobile provisions and signing certificates
-
Added checking of validity dates on mobile provisions and signing certificates, choosing only ones that are currently valid
-
Added extended logging for found mobile provisions and signing certificates, to help debug possible provisioning issues in the future
-
Removed duplicated Apple chain certificates from DotNET/IOS and switch to using the ones in Engine/Build/IOS
-
Various other output logging improvements and time stamps during code signing
-
Removed rotted -interactive option and associated code
-
Fixed unused variable warning on mono
-
Deleted UAT merged copy of iPhonePackager as it is currently unused and already out of date; it will be reintroduced once IPP standalone work is finished, probably as a shared assembly.
-
First pass of the media plugin for IOS and Mac.
-
Functionality added to Audio Device to check if background sound is playing. Implemented for IOS.
-
Platform Frame Pacer API added, IOS implementation added.
-
adds a delegate to the device which gets called when the frame has ticked.
-
Added “virtual file handles” for IOS to overcome the 700 file handle limitation
Xbox One
-
Added Xbox One implementation of RHICalcTexture2DPlatformSize(), for more accurate memory usage statistics.
-
Added a new delegate to to IOnlineIdentity, OnControllerPairingChanged, which fires when the Xbox event fires.
-
ShooterGame now handles controller disconnections to comply with XRs.
-
Shader PDB generation is now supported for better debugging in PIX. To activate , add the following text to your game’s DefaultEngine.ini file, substituting the path for where you want the shader PDB files to be placed. The directory must be one that can be written to from non-administrator level processes. You may need to change the GUID in ShaderVersion.usf to force a rebuild of the shaders.
[DevOptions.Shaders]
ShaderPDBRoot=D:\DirectoryOfChoice
-
SSE math functions added (from the Windows implementation).
-
Xbox now fires FCoreDelegates::OnControllerConnectionChange when a controller connection changes.
-
Xbox One MP4 movie player plugin has been added.
-
Added /ZW compiler option for libraries, so that plugins can use the entire XDK.
-
Changed thread affinities so that worker threads never share the core that the main game thread is on.
-
Log files are now flushed to disk when suspending the title.
-
Removed unnecessary SetRenderTarget() call from BeginRenderFrame() to fix incorrect timings.
-
Removed MEM_TITLE from any VirtualAlloc calls that use MEM_GRAPHICS, as is unnecessary.
-
Fixed the shader constant ring buffer using too much memory. fix also causes a minor performance increase.
-
Fixed multiple potential crashes in the Live online subsystem.
-
Devkit/TestKit detection to allow running of development builds on test kits.
-
Initial support for OnChip Geometry Shaders. Currently disabled due to an outstanding.
-
Optional buffered occlusion queries console variable to eliminate all occlusion query readback stalls on CPU. Adds latency to occlusion results.
-
PS4 flip management completely overhauled. No more explicit CPU stall at the end of the frame for a flip. Flip management now handled entirely by the GPU.
-
Added method to reset the controller orientation for DualShock4’s.
-
Check for volatile/single frame buffers being used over multiple frames. Disabled by default.
-
Correct locale now given to ICU internationalization library.
-
Correct NumberOfCores returned for threading system.
-
Enabled frame smoothing.
-
Geometry shader ring buffers now allocate the global resource table from the command buffer when required rather than using one large value for all shaders.
-
Initial support for rendering to specific slices of a cubemap. Replaces the Geomerty Shader method.
-
Make sure Shader Debug Info Root path is always passed correctly to the shader compilers.
-
Online Subsystem for PS4 filled out for Multiplayer certification pass. See ShooterGame for examples of Sessions, Matching, Online Parental Controls, and more.
-
Removed LCUE hacks. Missing reserve callback has been fixed in the SDK.
-
Fixed for possibility of Async Submit Dones between midframe submits which can cause a GPU crash.
-
Fixed for a particle system crash dealing with lights when using -emulatestereo
-
Fixed for Morpheus ScreenPercentage overrides.
-
Various fixes to make Development builds run on test kits.
-
Fixed a bug with append/consume buffer counter management that added extra GPU pipeline flushes. Users should see significant GPU gains.
Networking
-
Bandwidth reduction - We do not need to send the subobject class if it is stably named for networking (and more sanity checking).
-
Better logging when the client loads the wrong package version.
-
Fixed where PIE networking wasn’t doing package verification properly.
-
Cleaned up notification code relating to pending connection loss
-
Fixed: Offline mode in Shooter Game for consoles.
-
Added Online/Offline host modes.
-
Players are now warned when not online and trying to host a match.
-
Players that are not signed in are now allowed to play offline.
-
Removed LAN option for consoles.
-
Shootergame - Added dialog box management to make handling network errors easier
-
Shootergame - Shooter main menu now keeps track of game instances directly and uses weak object pointers so that we don’t hold on to deleted objects.
-
Shootergame - Fixed names when players aren’t signed in but playing offline.
-
Shootergame - Fixed joystick focus not applying to all joysticks in shootergame browser menu.
-
Shootergame - has many changes that were made to allow it to go through a certification pass on both XB1/PS4.
-
Fixes needed to get online splitscreen functional.
-
Fixed crash that can happen when splitscreen players leave.
-
Fixed where Controller property wasn’t replicating to non owners, but needs to when the value is NULL.
-
Fix for the network GUIDissue during seamless travel when we flush guids on the server. The quick fix is to not even send property to the server, since we don’t need to. has the added benefit of not only fixing the, but saves bandwidth. We still need to look into letting guids persist on the server for a bit longer to rully resolve any future conflicts that could happen.
-
Lower verbosity on rejected RPC’s. really isn’t an error, and more by design.
-
Fixed PIE crash when simulating with the “use dedicated server” option checked
-
Greatly simplified how component references are sent over network, and fixed issues when components are deleted mid game.
-
Fixed bug in ping calculations.
-
Removed code that handles out of order packets since at level, packets are never out of order.
Steam
-
Disabled Steam when use Play in Editor with multiple processes.
-
Modifications to Steam dll loading for better reliability
-
Improved Steam initialization failure messages.
-
Fixed crash related to Steam voice implementation.
Analytics
-
New: Added a Analytics Blueprint Library as a plugin.
-
allows Blueprint only projects access to the native Analytics APIs.
-
Blueprint Library uses the default Analytics provider registered for your project.
-
New: Added a file based analytics provider as a plugin.
-
provider writes analytics data to a file in json format.
-
Use to debug your analytic event capturing.
-
New: Added Apsalar analytics for iOS as a plugin.
-
analytics provider sends the data to Apsalar’s cloud service (see www.apsalar.com](http://www.apsalar.com) for more details).
-
plugin requires information from your Apsalar account to send the analytics events.
Physics
-
Fixed Use GetUnitAxis instead of GetScaledAxis inside FConstraintInstance::SetRefFrame
-
Fixed in FConstraintInstance::IsTerminated(), != should have been ==
**Samples
**
-
Added in car view to vehicle templates with ‘look’ support in vehicle templates.(Uses mouse or VR device).
-
Added audio in advanced vehicle template.
-
Tweaked some settings and sizes in the rolling template.
-
Tweaks to projectiles in twin stick templates.
-
Revised behavior of GenerateConfigFiles used in template creation so that it will extract the EditorStartupMap and GameDefaultMap from the ini files in the startercontent config folder if they exist.
Console Certification Improvements
-
Controller pairing implementation and fixes
-
Fixed where you might not have focus of the sign-in dialog in the welcome screen.
-
No longer store ULocalPlayer as owner, instead store GameInstance directly
-
Enable in-game menu during countdown
-
Show proper message when host quits gracefully vs times out
-
Fixed where we see splitscreen artifact while loading levels (don’t show splitscreen panes until in game).
-
Used dialog box which is more appropriate for showing a message when staying in the current menu, and fixes a bug where we can’t use the message menu to leave the welcome screen due to priorities.
-
Improved and consolidate checks that verify user is online.
-
Cleanuped and consolidate session shutdown code. is so we can call when we don’t yet have a GameState (haven’t fully connected to a server, but need to shut session down). fixes the where if you fail to join a server once, it will keep failing after that.
-
Detected and display generic errors from server (so we show full lobby when splitscreen player joins)
-
Added support for a load screen on the main thread. We can now call during seamless travel, and before the level starts loading to cover session calls, etc.
-
Made sure to disable load screen anytime we enter the main menu.
-
Show net version, date, and time on hud (non shipping only).
-
Handle users that sign in, but previously accepted “continue without saving” (punt them back to welcome screen in case).
-
Don’t show pairing changed dialog at welcome screen.
-
Send proper XBox LIVE events to set rich presence (RoundStart, RoundEnd, etc).
-
Special screen for invite so there is no input while waiting for it to process.
-
Fixed where sometimes second split screen player would show up as owner of game.
-
Fixes for adding splitscreen players to the Live session.
-
Make sure OwningUserId is set correctly when creating sessions.
-
Enable seamless travel for shootergame.
-
Fixed duplicate calls to CleanupSessionOnReturnToMenu on the client when the server leaves the game. Fixes crash from a check() on duplicate delegate adds.
-
Fixed bug where the ‘switch user’ feature could be used to have the wrong user control a LocalUser.
-
Fix for letting users through menu when network is disconnected.
-
ShooterLocalPlayer now passes in the FPlatformUserId to the ShooterPersistentUser
-
Send Xbox events on clients and when users quit mid-match to the main menu.
-
Only show the “invite players” in-game menu option if it’s an online game.
-
Set online mode when accepting invites so that party operations work correcty (fixes invites not working in some cases).
-
Don’t send incorrect pause/resume events during online games, since the game doesn’t actually pause
-
Load the main menu map in BeginPendingInviteState to force a reconnect when another local player accepts an invite.
-
Bots no longer appear in the recently met list
-
Removed LAN option from consoles
-
Fix for crash that occurs if a client attempts to join the server while the match is restarting (due to NULL GameSession)
-
Scoreboard no longer appears when the host disconnects
-
Local players are now killed when they are booted from the game, which cleans up their in-game presence
-
Fix for timing specific crash if killed whilst leaving game (null Pawn)
-
Fix for the number of teams in the HUD not updating correctly when there are no players left in a team.
-
Scoreboard is now more compact to fit in more players
-
Splitscreen Lobby now says ‘find match’ when not hosting
-
If either splitscreen player disconnects during on online game, kick back to the main menu
-
Fix for invalid index accessing userid when creating save data for player 2
-
If the user quits the match, either through the menu or by signing out of their profile, when they are winning - label them as a quiter so they don’t get rewarded with the win.
-
Rename players which share the login for offline play.
-
Fixed a bug where the second controller couldn’t join a game.
-
Fixed a bug where trying to search for LAN games would lock you out of searching for any games until you restarted.
-
Set up join game flow to handle/process arbitrary errors.
-
Cable pull handling.
-
Fixed where the map’s navmesh wasn’t being registered during seamless travel, because ANavigationData::PostInitializeComponents would MarkPendingKill itself if the world didn’t have a navigation system yet.
-
Fixed a case where two in-game menus could appear on top of each other.
-
Voice chat implementation/UI is now being displayed in the Scoreboard UI in-game. Also added speaker icon to display via slate.
-
Fix that allows local accounts to play offline matches.
-
Fixed where a player got into a bad state if the in-game menu was open when the round transitioned.
-
End of round scoreboard is now interactive and can be used to bring up players gamercards.
-
Don’t call HostGame when hosting a quick match, the session has already been created.
-
Added/removed local users to/from the party (required for Xbox One) in Shooter online games.
-
OSS - Introduced FPlatformUserId, which is similar to FUniqueNetID, but can live in core engine code.
-
OSS - Added an Identity interface function to get an FPlatformUserId from an FUniqueNetId.
-
OSS - Added new delegate for invites that takes a FUniqueNetId. No longer require you to register delegates for each user. Fixes several invite issues.
Xbox One
-
When switching profiles manually, don’t allow the cancel dialog to pop up.
-
Lower timeout on connection.
-
Handle profile switch when pressing Y, and the user previously selected “continue without saving.”
-
Live matchmaking and ShooterGame quick match improvements.
-
The user can now swap profiles on the main menu screen.
-
Fixed that was causing movie files to not be found.
-
Platform - Call XB1 suspend/resume delegates, fixed signout during suspend.
-
OSS - Now triggering TriggerOnConnectionStatusChangedDelegates properly.
-
OSS - Refresh the cached users when we resume from suspensions.
-
OSS - Make sure stable gamepads array is up to date after a resume from suspend.
-
OSS - Fixed controller mapping.
-
OSS - Added functions to add and remove local users to the OSS party interface.
-
OSS - Catch & warn when there’s an error getting Live achievements.
-
OSS - Catch more exception types in FOnlinePartyLive::AddLocalUsers and FOnlinePartyLive::RemoveLocalUsers.
-
OSS - Refresh the party view even if there was an exception in the async task.
-
OSS - Added RegisterLocalUser and UnregisterLocalUser functions to the session interface and improved Live OSS async tasks.
-
OSS - Added a new async task (SafeWriteSession) for writing Live sessions atomically, handles retries and SynchronizedUpdate automatically.
-
OSS - DestroySession, RegisterLocalUser, and UnregisterLocalUser use the new SafeWriteSession task.
-
OSS - DestroySession now removes all local users from the session instead of only the user with a corresponding XboxLiveContext in the cached MultiplayerSession
-
OSS - Move AddAvailablePlayers handling to a task based on SafeWriteSession for atomic session updates.
-
OSS - SafeWriteSession subclasses can now return false from UpdateSession to indicate they have no updates.
-
OSS - Clean up the NamedSession on Live join session failure.
-
OSS - Integrate ping query for Live OSS FindSessions.
-
OSS - Added logging for SecureDeviceAssociation state changes.
-
OSS - Implemented online multiplayer privilege checking for Xbox One.
-
OSS - The XboxOneInputInterface now tracks a list of stable users.
-
OSS - Send the MultiplayerCorrelationId with Xbox events
-
OSS - Fixed potential join session failures when accepting invites by adding the local SecureDeviceAddress to the join request.
-
OSS - Added delegates for adding/removing local players to the party.
-
OSS - Don’t remove a local player from the party if that player is the one who accepted an invite.
-
OSS - Added some more logging of party members when the party roster changes.
-
OSS - Canceling matchmaking now attempts to destroy the session as well, in case one was created.
-
OSS - Removed local and remote voice chat talkers when we destroy a Live session.
-
OSS - Always use the same unique id when sending Live voice packets. Fixes voice chat for splitscreen.
-
OSS - Live OSS properly reports that a session is full when trying to join a full session.
-
OSS - Always mark the host of a Live session as active so that the session doesn’t time out.
-
OSS - Session code no longer assumes player index 0
-
OSS - A client now correctly leaves the room when they leave the game, and can thus rejoin.
-
OSS - If joining a room fails, the user will now leave the session they just joined as well.
-
OSS - Fixing where sessions were incorrectly getting set as LobbySessions.
-
OSS - Implemented GetUserPrivilege.
-
OSS - General fix for Session Failure states where delegates weren’t getting cleared properly and thus asserted when the next attempt was made.
-
OSS - If a session fails to create, it will remove the NamedSession from the list.
-
OSS - Fix for crash if a player logs out while in-game.
-
OSS - Fixed where sessions were not getting removed from the internal list if the game ended via someone signing out.
-
OSS - Fixed where no network play could ever be done if the game was started while controller 0 was not signed into PSN.
-
OSS - Fixed where UserWebApiContext was erroneously getting created even if the user was not logged into PSN, which resulted in caching a bad value that would later destroy all the things.
-
OSS - Fixed bug where the wrong contextId was being used on PS4.
Networking
-
Allowed overriding max players via console command to allow testing full servers (net.MaxPlayersOverride).
-
Set the PlayerName in APlayerState::OverrideWith (Names can change between connects, prevents showing an old, incorrect name if an inactive player was found).
-
Compare unique net ids on console in AGameMode::FindInactivePlayers to eliminate false positives.
-
Added ChangeTeam() and SwapTeam() code to UPartyBeacon implementation
-
Added InactivePlayerStateLifeSpan variable to AGameMode to allow for game customization for the amount of time an inactive player is allowed to remain in the inactive players list
-
Added a null check against FUniqueNetId in Login debug output
-
Refactored Login() code to create a cleaner relationship between Login() and PostLogin()
-
InitNewPlayer() will register player, set name and other basic Login initialization, it shouldn’t be overloaded by the game as its still too early for game changes
-
Typically game code should start affecting the logged in player with PostLogin()
-
Fixed: False negative when comparing FUniqueNetId’s. fixes guests not working on XB1.
-
Overriding FUniqueNetId on ULocalPlayer is now allowed. is so we can decouple controller id, and OSS identity.
-
is necessary for platforms that need to allow overriding the controller while still maintaining the original user for achievements, etc.
-
Shootergame - Wrapped PlayerOwner pointers with TWeakObjectPtr’s.
Upgrade Notes
Editor and Tools
-
New: Clarified various UPrimitiveComponent shadow/lighting properties
-
Added EditCondition=CastShadow to various advanced shadowing flags
-
Added an edit condition on CastShadow dependent on having at least one lit material assigned to the component
-
Clarified that CastShadow is ignored on components that have no non-Unlit materials
-
Large refactor was done to the Project Launcher (formerly Game Launcher). Launch profiles will need to be recreated.
-
Cleaned up of WorldSettings, some properties are marked as ‘advanced’ and other are hidden.
-
C++ header links are no longer shown in SceneOutliner. as it was hard to read. Is still available via Details when Actor is selected.
-
The SlateApplicationBase::GetMouseCaptor() is now deprecated. Check if a specific widget has mouse capture using the SWidget::HasMouseCapture() method.
-
Renamed ‘Create Copy’ to ‘Duplicate’ in Content Browser.
-
The notion of category icons has been removed from the API. If you’re registering a settings category, you should remove the icon and update your code.
-
Fix: Corrected typo in MapCheck_Message_SimulatePhyNoSimpleCollision message
-
Fix: Add missing world->local conversion inside USplineComponent::SetWorldLocationAtSplinePoint.
Slate
-
SLATE_TEXT_ATTRIBUTE now uses an FText attribute rather than an FString attribute.
-
Note: SLATE_TEXT_ATTRIBUTE is legacy and should not be used in new code - if you’re using it, please consider using a normal FText attribute instead.
-
Slate Widget Render Transforms
-
FGeometry’s AbsoluteToLocal, LocalToAbsolute, and IsUnderLocation have been updated to use the render transform.
-
Added FSlateLayoutTransform (using new transform calculus framework) to store a 2D translation and uniform scale for FGeometry.
-
Slate slots now have a common base and stricter access to private members:
-
The .Widget property on Slots has been removed in favor of GetWidget()
-
Assign the slot content by invoking operator]();e.g. (*MySlotPtr)[ContentToSet ]
-
TPanelChildren and TSlotlessChildren now only support a subset of the Array API.
-
The AspectRatio() property in Slate has been deprecated.
-
SColorPicker and SWizard moved into new module AppFramework. Please update your Build.cs file if you’re using these widgets!
-
Replaced embossed 3D borders with flat borders. If you’re using borders as a padding mechanism, consider SBox instead.
-
Fixed an where FPointerEvent::CursorDelta was calculated backwards for touch events. Any user created widgets that use constructor and negated CursorDelta to get proper behavior will now scroll/slide backwards. Fix by removing the negation to FPointerEvent::CursorDelta where necessary.
-
FGeometry Breaking Changes
-
To support Render Transforms for widgets, some breaking changes were made to FGeometry:
-
Made all public members const to prevent mutating uses of them.
-
Instead of mutating FGeometry, prepare the necessary values in advance and call FGeometry::MakeChild().
-
Removed FGeometry::CenteredPaintGeometryBelow() and GetRect().
-
Direct member access to FGeometry will eventually be going away.
-
Replace direct member access with calls to appropriate member functions instead.
-
FPaintGeometry should no longer be constructed directly to properly support render transforms.
-
Instead call FGeometry::ToPaintGeometry().
-
Existing usages will not break, but they will not support render transforms.
-
Removed FPaintGeometry::ToSlateRect() and Identity().
Unreal Motion Graphics
-
Button Click Bindings from 4.4 won’t work out of the box in 4.5! Due to a design change, the UMG Button no longer uses a function binding to register the click events. It now uses a standard Blueprint Multicast Event for performing the click Broadcast. You’ll need to setup a new handler for event, then call your old function, or move the logic into the event graph. NOTE: There was another bug associated with function bindings, they were all accidentally generated as pure, so you’ll need to uncheck the pure checkbox in order to invoke your function.
-
We now provide a DPI Scaling system for all Slate Game UI. If you already have one you should remove it or configure one to have a scale of 1 so that they don’t both add to the scale of the UI. See New Features for more details on the system.
-
If you were using the low level overridable input functions that expected the FSReply (now called FEventReply), the way that structure is built has changed a lot to mirror much more closely what is possible with Slate. For example, if you want to have a widget that captured the mouse on mouse down, you could do it like so now:
-
The old Drag/Drop panels have been removed in favor of a different approach to drag/drop.
-
To create widgets in the past you had to use the “Create Widget” function. has been replaced by a new custom node with the same name, Create Widget has many more capabilities, and it always returns the type specified, so you no longer need to Cast a widget you just created! Your old usage should continue to work, but you’re encouraged to change over to new node.
-
Several unfinished experimental widgets have been hidden until their time comes. Viewport, List View, Tile View, ComboBox, ScrollBar are no longer creatable in the designer.
-
The Slate Widget Style assets no longer apply to UMG. You can use them in a few places in blueprint scripts, but they are no longer the means by which you style widgets. Existing styles will be copied over, however we now store a copy of all style data directly on the widgets. We do so that you can freely mutate the style of any widget at runtime, giving them dynamic material instances and just generally changing their look and feel based on user input.
-
Add To Viewport – Modal, Show Cursor and Absolute Layout flags have been removed! Absolute Layout is now automatically determined if you manually attempt to position/size it after placing it in the viewport. Cursor and Modal options are now controlled through the Player Controller with the new function “Set Input Mode”.
Rendering
-
The latest NVIDIA OpenGL drivers for Windows render incorrectly when using certain features such as Skylight. If you are using OpenGL on Windows make sure you install driver version 337.88.
-
DrawDynamicElements in subclasses of FPrimitiveSceneProxy will be deprecated soon and replaced with GetDynamicMeshElements.
-
Progress on parallel rendering, mostly focused on consoles. For non-consoles, r.RHICmdBypass 0 enables the parallel prototype. That also works on consoles, but togglerhithread enables the full set of parallel optimizations. remains experimental work in progress, but show promising gains.
-
Post processing lens flare defaults have been changed (off by default as project setting) and your existing projects might have lens flares that formerly have been switched off by post process settings. The post process setting can be fixed or the new project setting can be used.
-
Removed UI Blur (has issues and complicated the engine internals).
-
The r.MobileHDR console variable is now read-only during execution.
-
Fixed “ApplyDBufferData adding .5 to spec brightness?”, was affecting specular brightness if DBuffer is enabled.
-
Fixed navmesh rendering performance and issues when real time is disabled in editor’s view.
-
ERHIFeatureLevel::Type enumeration entry SM3 was removed, and ES3_1 was added
-
Any tests for ERHIFeatureLevel::SM3 should be changed to ERHIFeatureLevel::SM4
-
Any tests for ERHIFeatureLevel::ES2 should be changed to ERHIFeatureLevel::ES3_1
Blueprints
-
Evaluate Curve Table Row Blueprint node: Added a drop down box for selecting row name, but you may have to delete and recreate any existing nodes to see change. New nodes should work fine.
-
Kismet library headers are no longer globally included.
-
Prevented GetPlayerController, GetPlayerPawn, GetPlayerCharacter, GetPlayerCameraManager, CreatePlayer being called in ConstructionScript.
-
Users should port their own K2Node GetMenuEntries() implementations over into UK2Node::GetMenuActions() (in preparation for 4.6)
-
We’ve been refactoring the blueprint menuing system, which is slated to go live in 4.6. To circumvent hiccups when happens, please duplicate any GetMenuEntries() logic you may have, and move it over into a UK2Node::GetMenuActions() override.
-
The ui portion of these menu items will be almost exclusively defined through overrides to UK2Node’s GetNodeTitle(ENodeTitleType::MenuTitle)/GetMenuCategory()/GetTooltipText()/GetKeywords()/GetPaletteIcon() functions.
-
You can preview the experimental menu system by switching on the “Use New Blueprint Menuing System” option in the editor’s experimental preferences.
-
Deprecated the old UEdGraphNode::CanPasteHere(), the replacement version just takes a UEdGraph pointer (and utilizes the new UEdGraphNode ::IsCompatibleWithGraph() function)
-
Deprecated UEdGraphNode::GetTooltip(), now replaced with UEdGraphNode::GetTooltipText() (which returns a localized text string)
Animation
-
Refactored Montage API to support multi-montages.
Gameplay and Framework
-
Any code or Blueprints that were using USplineComponent::SetWorldLocationAtSplinePoint and passing in local locations to work around a bug in the method will need to be updated to pass in proper world locations, as the underlying bug has been fixed.
-
Added ENGINE_API to CurveFloat class to make it available outside of engine. (Required to access various vehicle parameters).
-
AActor::GetRootPrimitiveComponent deprecated. Use GetRootComponent and cast as appropriate.
-
Actor lifespan timers now started in BeginPlay not PostInitializeComponents
-
AGameMode::SetGameMode deprecated, use AGameMode::GetGameModeClass instead
-
AGameMode::GetGameModeClass and GetDefaultGameClassPath are now const and virtual
-
BlueprintCallable functions that require a WorldContext should now use the metadata WorldContext=<ParameterName> instead of DefaultToSelf=<ParameterName> and HidePin=<ParameterName>
-
ShowHiddenSelfPins class metadata has been changed to ShowWorldContextPin
-
Functions that require a WorldContext are no longer placeable in graphs for classes that do not implement GetWorld() and are not marked ShowWorldContextPin
-
Functions that would like a WorldContext, but can function without (for example PrintString) can also supply the CallableWithoutWorldContext metadata to allow placement in all contexts
-
Component/Actor mouse over updates will now fire while the game is paused.
-
Enabled virtual sticks for twin stick template.
-
FVector2D UGameViewport::GetMousePosition() deprecated and replaced by bool GetMousePosition(FVector2D&) which returns false when the mouse cursor is not over the viewport
-
Improved VR device support in vehicle templates.
-
Implemented some missing Linux specific platform functionality.
-
GameViewportClient::Tick is now virtual.
-
General improvements to vehicle templates.
-
General cleanup of template levels.
-
Navigation octree was refactored to simplify ownership of collision data. Actor.UpdateNavigationRelevancy() function is removed, please use Actor.IsComponentRelevantForNavigation() to disable collision export. All objects exporting navigation data should use INavRelevantInterface interface.
-
Placed sprites that use a non-‘Two Sided’ material will now generate a map check warning. These warnings can be fixed by checking ‘Two Sided’ in the associated material and hitting Apply.
-
Pawn interaction with physics objects has been improved.
-
Pawns are added to the simulated physics scene, preventing simulated physics objects from passing through them.
-
results in better symmetry of movement since Pawn movement was already blocked by physics objects.
-
Removed xbox only pause binding in engine ini file.
-
Revised FActorDetails::CustomizeDetails to respect some hidden categories.
-
Resized ball in rolling template.
-
Revised auto exposure settings on puzzle templates.
-
Running the Editor on Mobile preview mode (-FeatureLevelES2) is no longer allowed.
-
UCharacterMovementComponent::ApplyRequestedMove() has had parameters reordered and changed; it now includes Friction and Braking, and has all the “out” params at the end.
-
USoundNode::GetUniqueString removed.
-
The legacy UCodecMovie API for movie textures has been removed. It is being replaced with the new Media Framework (see the ‘Media’ section further up!)
-
Various revisions and improvements to Twin Stick template.
-
Fixed path following in CharacterMovementComponent, so that it turns more quickly and considers current velocity when trying to reach destination speed.
-
Restored “bRequestedMoveUseAcceleration” which can be set to false to disable acceleration and use requested pathfinding velocity directly (instant turning).
-
Fixed HUD clickboxes when aspect ratio is constrained.
-
Fixed inverted fire control in twin stick blueprint.
-
Fixed bug where actors would end up at the origin when undoing when an actor had a native root component certain classes of components added via blueprint.
-
Fixed const correctness on HUD::Project and HUD::Deproject
-
Fixed sub 1080 menus in Shooter Game menus
-
Fixed sub 1080 menus in Strategy Game menus
-
Fixed with keyboard in twin stick code template
-
Fixed gamma setting not being applied in Shooter Game.
-
Fixed crash in Shooter Game instance when running dedicated server.
-
Fixed an occasional problem with opening asset windows that resulted in “Failed to find object ‘Class None’.” message in editor output window. is fixed now.
-
Fixed UPrimitiveComponent MoveComponent() and UpdateOverlaps() not using the same criteria for what is a possible overlap. Attached components are now allowed to generate overlaps.
-
Previously, attached objects would get continuous Begin/End overlap events when the parent moved. Now those events only fire when the overlaps actually change.
-
Added new functions for managing the MoveIgnoreActors list in PrimitiveComponent in addition to IgnoreActorWhenMoving: GetMoveIgnoreActors, ClearMoveIgnoreActors.
-
Attaching and detaching components now updates overlap state immediately.
-
WalkableSlopeOverride now has an option to make a surface completely unwalkable to Characters (they will not step up on it and will “fall”/slide when on it).
-
Previously you could get close by setting it to decrease the walkable slope to zero, but then flat surfaces were still walkable.
Core
-
Couple of NavigationSystem’s bookkeeping functions have been hidden from public use.
-
Deprecated Character::DoJump() in favor of CharacterMovementComponent::DoJump().
-
Character::CheckJumpInput() now checks CanJump() and then calls the component’s function.
-
Added bool bReplayingMoves to CharacterMovementComponent::DoJump(), for network correction replays.
-
If you were overriding Character::DoJump() to do work not restricted by CanJump(), you may now need to override Character::CheckJumpInput() and run your code if bPressedJump is true.
-
See the PlatformerGame sample as an example of .
-
EQS generators and Tests has been refactored to use virtual functions rather then delegates to perform their work.
-
FPImplRecastNavMesh::ProjectPoints has been replaced with ANavigationData::BatchProjectPoints
-
More Info (three spaces indented from the previous line for wiki formatting)
-
Improved stat id creation times. Now stat ids are created and registered once a run.
-
Improved support for Clang C++ toolchain on Windows platform.
-
INavAgentInterface::ShouldPostponePathUpdates has been removed. Use APawn::ShouldPostponePathUpdates or AController::ShouldPostponePathUpdates instead.
-
Moved Base64 class from HTTP module for Core/Misc, to have better visibility from other modules (without any dependency to HTTP module).
-
NonPIETransient renamed as NonPIEDuplicateTransient to better reflect that it’s a variant of DuplicateTransient, not a variant of Transient.
-
If you use specifier in a UPROPERTY, or its associated CPF_ flag, you should rename them appropriately.
-
New experimental support for fast C++ dependency scanning (will be enabled in a future release).
-
Passing relative .uproject paths to UnrealBuildTool no longer results in bad generated code.
-
TMap::Emplace no longer gives a compile error if the key has an explicit constructor.
-
Sorting containers of pointers which contain nulls is now possible by dereferencing the reference and checking for nullptr.
-
UnrealHeaderTool no longer fails when it encounters a C++11 in-class member initializer.
-
New /Zo option supported on Visual C++ 2013 Update 3 and above.
-
Programming standards updated with supported C++11 features.
-
NonPIETransient (now NonPIEDuplicateTransient) fixed to enable serialization.
-
AutomationToolLauncher no longer crashes when UE4 is updated via GitHub patches.
-
LoadVector3* macros replaced with component-wise reads to prevent page faults when reading from unaligned memory at the end of a page.
-
TArray::RemoveSingle and TArray::RemoveSingleSwap reimplemented in terms of Find to reduce code and avoid an invalid check.
-
Const-correctness fixes.
-
Renamed CameraComponent.bUseControllerViewRotation to bUsePawnControlRotation, and change its default to false.
-
Also rename SpringArmComponent.bUseControllerViewRotation to bUsePawnControlRotation for consistency (default was already false).
-
IMPORTANT C++ UPGRADE NOTE: C++ projects using CameraComponents should ensure that they initialize bUsePawnControlRotation with the correct value if previously there was no initialization, since the default value has changed.
-
The correct way to be backwards-compatible for existing saved content using CameraComponents is:
-
Added “_DEPRECATED” to any constructor initialization of bUseControllerViewRotation (which becomes bUseControllerViewRotation_DEPRECATED).
-
Added initialization of bUsePawnControlRotation to your desired default value.
-
If there was no previous initialization of bUseControllerViewRotation in code, then you MUST add initialization of bUsePawnControlRotation to “true” if you wish to maintain the same behavior as before (since the default has changed).
-
Refactored PathFollowing’s MinAgentRadiusPct and MinAgentHeightPct use to be more clear and renamed MinAgentHeightPct to MinAgentHalfHeightPct.
-
Refactored Login() code to create a cleaner relationship between Login() and PostLogin()
-
InitNewPlayer()will register player, set name and other basic Login initialization, it shouldn’t be overloaded by the game as it’s still too early for game changes
-
Typically game code should start affecting the logged in player with PostLogin()
-
The Windows specific FCOMPtr type was renamed to TComPtr
-
Wide character modification functions ToUpper/ToLower/IsAlpha etc. are now implemented using native C++ functions.
-
Vastly improved memory usage from ICU file IO. Far less data will be redundantly allocated and read from file.
-
Changed AutomationTool.CommandUtils.PushDir_NoExceptions to better mirror PushDir.
-
The code in PushDir_NoExceptions is now consistent with the inline source code documentation.
-
Previously, PushDir_NoExceptions did not have the ability to pop the final directory and return to the original working directory before anything was pushed.
-
Fixed bug which prevented BuildPatchTool.exe from chunking empty directories in some situations
-
Fixed potentially unsafe code in FWordWrapper::ProcessLine() loops with addition bounds checks.
Platforms
Android
-
Updated AdBanner Blueprint nodes to reflect not just iOS support and renamed (removed experimental status).
-
In preparation for x86 support in Android, the standard .apk no longer has -armv7 in the name (the .so inside as the -armv7 name).
iOS
-
iOS deployment from PC now requires the machine date/time to be reasonably accurate
-
Date/time checks are now in place to filter out expired mobile provisions and signing certificates, which will prevent various deployment issues, but they rely on the local machine time being correct.
-
The project setting location for Metal support has moved - it’s now under the main iOS Project Settings section. Please re-enable Metal support.
-
Upgraded Facebook SDK to version 3.16, Now compatible with IOS 8.
-
Removed Facebook SDK 3.7
-
Fixed a rendering artifact in Metal with unlit games like (which is now set up to use Metal).
Mac
-
Addressed window ordering on Mac OS X to fix some windowing bugs & improve user experience.
-
Fixed several crash bugs & modified event handling code to avoid a deadlock bug.
Xbox One
-
The Live identity interface now triggers OnLoginStatusChanged instead of OnLoginChanged for sign-in changes.
-
OnLoginStatusChanged provides more information via its parameters.
-
See UShooterGameInstance for example usage.
-
Unreal Engine 4.5 has been updated to use the September 2014 QFE1 XDK. You will need to install XDK first, then update your devkit(s) to ensure correct installation.
-
Upgraded to SDK 1.750!
-
LCUE has been uplifted from the SDK into the Engine. will allow future UE4 specific modification of the files. Support for standard CUE has been removed.
HTML5
-
Updated HTML5 Emscripten SDK to 1.22.0
HTTP
-
Several improvements to HTTP Chunk Installer.
-
Assets assigned to Chunks for use by IPlatformChunkInstall classes automatically include dependent assets when cooked with –manifests.
-
UAT can automatically generate Chunk data for use by FHTTPChunkInstall with the command line option –createchunkinstall. option is experimental.
-
Fixed with HTML5 devices being claimed by other uses on the same network running UnrealEd.
**Linux:
**
-
New cross-toolchain for x86_64 (v4, uses clang 3.5.0) - old toolchain is still supported.
-
Simplified Linux build process for github users (auto-downloading external dependencies).
-
Better multi-monitor support in Linux.
-
Fixed HTTPS on non-Red Hat OS (libcurl module is now able to find certificate bundles on most popular distributions).
-
Shader compilation fixed (no more zombies) and sped up.
-
Packaging on content-only projects has been fixed to name the executable properly (name will match project name).
-
Multiple changes to UI code (both Slate and SDL).
Known Issues
iOS
-
Due to an OpenGL driver, StrategyGame now requires iOS7 or later. Users may encounter a similar crash in their projects.