Fixed crash when doing a pathfinding batch EQS Query Test when test items are not considered valid.

Fixed "On Circle" EQS generator crashing if its query owner is not an actor.

Blueprint compilation and loading are much more efficient.

Behavior Tree

New: Added dynamic subtree injection support for behavior trees.

New: Added new restart mode for behavior tree tasks, they can now ignore restart which leads back into running the same task again. Use case depends on task type and its parameters: some of them work better with restarting every time (e.g. movement), some should finish their action (e.g. animation).

Blueprint based behavior tree tasks will now ignore Finish Execute and Finish Abort calls depending on state of task, fixed latent blueprint actions not being cleared when task finishes execution.

Fixed Behavior Tree tag cooldown decorator testing the current value of the tag cooldown end time against its duration. (Duration in the Tag Cooldown decorator should only be applied when we deactivate, not used for comparison.)

EQS score for the winning item will no longer be set to 1 when picking a single item. That way, scores can be compared appropriately since none of the other scores have been normalized. They will all be on the same relative scale.

Tweaked description width for EQS debug display from 200 to 312 to allow for slightly longer descriptions without overlapping the next column. Item Description Width, Item Score Width, and Test Score Width can now be tweaked in code (they are now variables rather than in-line values).

Navigation

New: Added bUseNavAgentGoalLocation to pathfinding Reached tests for moving to Actors. (Sometimes it is useful to move towards / test against the actual actor's location, rather than its location projected into the navigation system.)

Navmesh's rendering component has been made transient and we made sure any navigation rendering component saved with old maps won't break anything.

Updated deprecation messages for Navigation System's "get random point" functions family to be more precise.

Animation

New: "Observe Bone" nodes for debugging animations.

These let you print out the current position of a bone (at that particular point in the animation tree) and have a couple of options for coordinate space and whether to display relative to the reference pose.

The observe bone nodes are meant for debugging. They don't cost much but are not currently compiled out of a shipping build, so you should probably remove them when you are done working with the graph.

New: Added turntable feature for Persona.

New: Added a "Remove this LOD" button to each LOD (after 0) in Persona's mesh mode.

New: Added an icon overlay to the 3D thumbnail for Animation Blueprint assets in the Content Browser.

New: Added new node "Bind Cloth To Master Pose Component" that makes cloth on a slaved skeletal mesh component to reuse the simulation data from the master component, rather than processing the cloth separately.

A montage can only have a single leader. A leader can have multiple followers.

Synchronization is performed once before any of the leader or followers are updated in a given frame.

Essentially, synchronization is performed one frame late, so tick order between montages is not an issue.

New: Allowed skeletal controls to specify the coordinate space that they would prefer the gizmo to be displayed in by implementing GetWidgetCoordinateSystem.

New: First pass of the dependency preloading system.

Uses asset information created during cooking to determine the dependencies for all packages and make them load BEFORE the requested package. When using pak files, the pak file will be ordered to match this load order, giving much reduced seek times.

Currently disabled by default, but can be enabled with "s.PreloadPackageDependencies 1" in the console.

New: Look At Control now supports look axis in local space.

New: Started moving animation nodes out of Engine into a new AnimGraphRuntime module.

New: Support Append Frames in the begin/end of the AnimSequence.

Also fixed to rearrange notifies and curve keys.

New: Wrapped re-entrancy checks during AnimationBlueprint node Update/Evaluate in DO_CHECK tests so that they are compiled out in shipping builds.

Animation and joint name now supports UTF-8 when importing.

Animation Record gives default path and available name.

Changed MasterPoseComponent serialization so that you can use it in a construction script.

Changed animation stat names to reflect whether they are running on the main game thread or a worker thread.

Changed new NativeNotify menu to display the localized class name.

Fix for crash in BlendSpaces when referenced AnimSequences have been deleted.

New: Particle system promotion tests are now contained in the Cascade module.

New: The geometry automation tests have been separated from the 'General Editor Tests' automation test. It is now: "System.Promotion.Editor.Geometry Validation".

New: UAT and UBT will no longer wait for the global mutex, and will fail immediately instead. Previously, each instance would wait in line serially, hiding the fact that the command was not actually running.

New: Added the ability to filter out library functions and macros from the Blueprint context menu.

New: Added various improvements related to Select node. The node doesn't return a copy of input parameter, it returns a reference to the input.

New: An "InternalUseParam" meta tag for UFUNCTION has been added to support hiding function parameters from Blueprints. The pin for that parameter will be hidden and not connectable.

New: Blueprint Timer API improvements.

Set Timer By Delegate now returns a Timer Handle to be used when interacting with the timer via other functions. Interacting with timers by handle is significantly more performant and enables the same timer delegate to be used for multiple timers simultaneously.

Set Timer By Name, and all timer manipulation functions, by name and delegate have been deprecated.

New: Blueprint Timeline UI updates:

Made individual tracks collapsable.

Added an option to turn off the view synchronization for an individual track.

General padding and layout tweaks.

New: Game/URL Options parsing nodes are now exposed to blueprints.

New: Can change a variable's type in the My Blueprint window by clicking on its type icon, or right-clicking to toggle whether or not it's an array.

New: Can drag and drop custom events from the My Blueprint window to add a call function for the event.

New: Can promote pins to local variables in Blueprint function graphs (or their child graphs).

New: Can set the Advanced Display flag on Blueprint member variables.

New: Made the boolean pin in Blueprints less subtle.

New: Fixed a crash that could occur with data-only Blueprints that explicitly called their parent's construction script.

Attaching a bool to the "Select" nodes index pin will force the node to update it's pin names even when there are only two options.

Axis mapping value getters can no longer be called from other blueprints.

Blueprint Diff Tool no longer has buttons to switch between the components, graph, and defaults views. Navigation is now done via the list of differences.

Blueprint Editor context menu filtering is much more efficient.

Blueprint member variables of type component that are not generated by SCS now have the details options normally available to exposed variables.

Breakpoint is triggered on Access None error.

C++ Functions that are tagged as BlueprintImplementableEvent and are overridden as a function graph in Blueprints will display an error when attempting to drag and drop into the graph to inform the user that the function is not Blueprint Callable.

Call Function nodes will no longer change the function reference when duplicating the node or duplicating the entire Blueprint.

Can no longer split pins on Blueprint nodes if the struct does not have any valid properties.

Can now Make and Break the DateTime struct in Blueprints.

Can right click in collapsed graphs to add local variables that are part of the outer function graph.

Can right click on any node to search for references of it. Does initial search only in current Blueprint.

Can use unicode characters in Math Expression nodes.

All unicode "letters" are now allowed for variable/input/output names.

This does not extend to symbols and only the underscore symbol is still allowed.

Cannot name Timeline tracks the same as any of the native pins on the node.

Any nodes previously broken by this functionality should work again.

Changing a pin type on a Select node will recombine all sub pins on the option and result pins before setting the new pin type.

Changing the Class of a "Spawn Actor from Class" node will no longer disconnect the result pin's links if they are still valid.

Child components in a Blueprint Class asset attached to a default scene root will no longer be lost after reparenting to a Blueprint Class that also has a default scene root.

Connecting function result node array pins to a reroute node will no longer prevent the node from compiling with all its output parameters.

Copying and pasting a K2Node_CallFunction with an interface pin for the self pin will no longer change the self pin into a normal Object Reference pin.

Deleting a custom event when there are no other events in the Blueprint will no longer disallow you to name other items placed in the Blueprint the same as the deleted custom event.

Drag and dropping a component from the SCS editor to a graph will no longer incorrectly report that the graph is outside of scope when it is a part of the same Blueprint.

Dragging and dropping variables from the My Blueprint tab will no longer default to assuming that the variable is read-only.

Duplicating function or macro graphs that contain nodes with Text pins will no longer incorrectly link the original and duplicated pins so that changes in one appear to affect the other.

Duplicating the "Add Scene Component" node while the transform pin is split will no longer make visible the transform pin on the duplicated node.

Editing a blueprint that is instanced in a hidden sub level no longer resets transforms on the hidden instances.

Ensure 'bExchangedRoles' is not set after serialization of an Actor-based Blueprint Class asset.

Examining the value of an enum array pin will show the enum value's display name.

Fixed a crash when compiling a Blueprint while intermediate graphs are open.

Fixed a crash while compiling a Blueprint with a validated Get node that is missing a property.

Fixed a crash when compiling a Blueprint while Find-in-Blueprints is searching all Blueprints.

Fixed a crash when vectors are compared in Math Expression using operator!=.

Fixed a potential crash during component registration when constructing instances of a Blueprint Class.

Fixed a bug that prevented new components from having the same name as a deleted one (prior to a compile).

Fixed a bug that was preventing copy, duplicate, and rename hotkeys from working in the Blueprint viewport.

Fixed a bug where certain keywords for Blueprint menu items were being ignored.

Fixed a bug where dirty Blueprints were not being compiled before you selected "Launch".

Fixed a bug where static functions were being hidden from Blueprints with Hide Categories metadata.

Fixed a bug with cyclic parent/child dependencies, where inherited components could be trashed when compiled.

Fixed a bug with parent/child cyclic dependencies, where the child's overridden property values would be cleared on load.

Fixed a crash after renaming local variables when other functions have local variables of the same name.

Fixed a crash that could occur when passing a default Blueprint Session Result object to the "Join Session" Blueprint node. Instead of crashing, the join will fail an execution will continue from the "On Failure" pin, as normal.

Fixed a crash that could occur when undoing, after compiling an Actor Blueprint with components.

Fixed a crash that would occur in specific cyclic dependency cases involving an Actor and Actor Component Blueprints.

Fixed a crash that would occur when hovering over the "Edit Blueprint" button, for Blueprint instances that had components added in their construction script.

Fixed a crash that would occur when loading a Blueprint that depended on a plugin that was disabled.

Fixed a crash that would occur when removing an event/function param in a Blueprint that was associated with the set GameMode.

Fixed a crash that would occur when removing a pin that had a debug watch applied to it.

Fixed a crash when deleting a map while it's level Blueprint was opened.

Fixed a crash when restarting level after streaming sublevels in.

Fixed a cyclical dependency bug involving macro libraries, where Blueprints could load with a false error.

Preventing in UK2Node::AutowireNode hidden pins from being auto-connected to passed in Wildcard pins.

This prevents issues with wildcards connecting to the "self" pin of functions when dragging off them.

Proper error is generated when incompatible Blueprint pins are connected.

Recompiling a Blueprint with a Component parent class now correctly re-registers any instances of the blueprinted component in the level. Previously existing instances could disappear.

Removed a check that was asserting when compiling a Blueprint with invalid Call Function or Call Parent Function nodes.

Renaming a component and then adding a new component of the same type in the Blueprint editor will no longer result in broken defaults editing.

Select nodes using enums with hidden values will no longer incorrectly match up the Option pin connections to the improper enum value.

Selecting a pin type for a Select node will not fail the first time.

Setting default values of Text properties in the User Defined Struct or for Local Variable properties in Blueprints will correctly assign the value and preserve the value between instances of the editor.

Splitting pins on the Function Result node will no longer attempt to compile the split pins as result pins.

The "Get" pin(s) on "Set" variable nodes will now display the name of the pin if the pin has been generated by splitting a struct pin.

The details view in Blueprints of non-member variables (either from a parent class or an external member reference) will no longer show various detail uneditable options as editable.

The eye icon appears now for marking a user created component variable as editable in the My Blueprints window.

Tooltips will display for sub-menu items in the Pin Type Selector.

Tweaked the tooltip for "Expand Nodes" menu option to better describe what the action will do.

When dragging off a pin in a function graph, local variable nodes will no longer be filtered out of the context menu for placement if they are valid for connection.

When indexing all Blueprints, hitting "No" will correctly skip checking out all un-indexed Blueprints.

When loading a blueprint pin types that don't match are no longer disconnected, instead we rely on compile errors to prevent the potentially broken blueprint from executing bad code.

When signature of a function is updated, its instances in the Event Graph are properly updated.

Core

New: A plugin with the same name but of different versions can be placed in multiple game projects. This allows studios with multiple projects to utilize the same plugin at different revisions as long as the plugin is part of the game project.

New: Added module path caching to improve editor startup times.

New: Added pre-allocated memory pool which is freed when the system runs out of memory to properly handle such crashes.

New: Added 'stat slow' console command.

Displays the game and render thread stats.

Can take two optional parameters -ms=x -depth=n that specify the minimum stat duration and the displayed hierarchy depth respectively.

Removed some redundant calls from FPaths::MakeStandardFilename to make it faster.

Rendering thread callstacks are once again correctly printed to the log for non-editor builds.

Save to default config no longer writes out duplicate entries.

Smoke test added to ensure platform consistency on opening files for append, and ability to seek said file handles.

The TAttribute no longer allows you to directly compare another TAttribute for equality.

They've been deprecated, and corrected to only allow comparison against literal values instead of comparison attributes, which was causing implicit construction of attributes when comparing against a literal.

There's a new IdenticalTo() function on TAttribute which can actually compare two attributes to see if they are really the same.

When bAutoCompleteWhenLoadingCompletes is false in the MoviePlayer, the movie correctly continues playing until prompted to stop after loading completes.

When queueing new async packages, async loading code will also look for existing packages in loaded packages to process to prevent infinite streaming times.

Editor and Tools

New: Added "Zip Up Project" button under File -> Package Project to grab necessary project files and package into a zip. For easily sending the project to other people excluding unnecessary files.

Smart Resizing for Transform Details UI:

​​

The vector and rotator widgets now support automatically rendering in a more compact mode as the details panel shrinks, making it possible to edit properties over a wider range of widths.

Rotator UI Consistency:

Rotators now display everywhere in a consistent order as XYZ, rather than being displayed as XYZ in the level editor but as Pitch, Yaw, Roll (YZX order) in Blueprints.

In a Blueprint:

In the level editor:

All existing content is automatically updated and will work as expected, but you may notice wires crossing that didn't cross before since the order has changed.

As a refresher (this information is also displayed in the tooltips):

X is the roll value (rotation about the X axis, typically the forward vector, e.g. tilting your head sideways).

Y is the pitch value (rotation about the Y axis, typically the right vector, e.g. looking up/down).

Z is the yaw value (rotation about the Z axis, typically the up vector, e.g. turning to face left/right).

New: "Add Auto Connect To Server" option to the advanced Play In Editor options, defaulting to old value of true. If set to false it will launch multiple clients but they won't connect to each other, which is useful for UI testing.

New: Added "No to All", "Yes to All" and "Cancel" options to the "Failed to Merge Bones" dialog when importing skeletal meshes to avoid having to dismiss large a large amount of windows.

New: Added "Save All" button to Visual Logger tool.

New: Added a check to determine whether plugins are compatible when opening a content only project. This is needed because a content only project will not attempt to build incompatible plugins later, users can now choose to disable them.

New: Added a support URL to plugins so that it is easy for users to know how to contact the creators of plugins for support.

New: Added support for multi-line text in the Note actor's text field.

New: Added support for positioning and always centering standalone play windows. Fields are added under Level Editor - Play advanced settings to position the standalone play window and turn always centering on and off.

New: Added the option to display the current Unreal Engine's version number in the project badge. This feature can be enabled in the Miscellaneous category inside of the Editor Preferences.

New: All integer property types are now supported in details panels instead of only int32 properties.

New: Allows play in editor windows to always be displayed on top of other windows, enabled/disabled under Level Editor - Play advanced settings.

New: Clarified the use of Server Game Options and Command Line Options in the tooltips for the Level Editor - Play settings.

Removed the map check warning "has simple collision but is being scaled non-uniformly - collision creation will fail" as a collision shape is created regardless of the fact that an object is non-uniformly scaled.

Renamed "Tick" category in UActorComponent to "Component Tick" and Actor tick to "Actor Tick" to differentiate between the two when they are both shown in a details panel.

Textures are no longer compressed for auto-saves to reduce the time it takes to save.

The color picker no longer assumes a straight inverse gamma conversion from colors sampled on the screen using the eye dropper. This change makes it so sRGB is the assumed space all colors are sampled in, making sampling colors from Photoshop bring in the identical version of the color converted into linear space, which when transformed back into sRGB space will be the same color you saw in photoshop.

FColor and FLinearColors can now default to sRGB space using a UPROPERTY meta tag of sRGB=true (or false), you can force a specific default checking of the sRGB checkbox.

Several places in UMG now force this default since sRGB is the space UMG will be rendered in (on PC). Additional work will be needed on Mac where the final rendering space is gamma 2.2.

The editor now properly saves out array elements to the ini files.

The Far View Plane setting for level editor viewports is now saved between sessions.

The Scalability state is now saved back to the same .ini file that it was loaded from, so that launching the editor doesn't reset Scalability settings set by the game.

There is now no longer a max limit to the number of static mesh sections that can be generated when importing meshes. The previous limit was 64 sections.

Updated Material Preview Mesh properties to include Adjacency Info.

Content Browser

New: Improved the behavior of Ctrl+B in the Content Browser and Persona.

Ctrl+B in the Content Browser will now invoke the "Show in Folder View" command to allow you to easily sync to the actual location of an asset in the cases where you're viewing it via a search or a collection.

Ctrl+B in the Persona animation sequence browser will now invoke the "Find in Content Browser" command.

Ctrl+B will no longer do anything when Persona has no asset available for a given edit mode.

New: The "Move Folder Here" operation can now be aborted if there are a large number of assets within.

Auto reimporter now uses MD5 hashing to ensure that benign reimporting does not happen when only the timestamp has changed.

Can now use the "Show Developers Folder" option in the save/load dialogs.

Fixed an issue in which cancelling the attempted delete of read only files would still remove the asset from the Content Browser.

Fixed being able to rename or delete some read-only types in the Content Browser.

Fixed Content Browser drag-and-drop so that it works in all views (it only used to work in tile view).

The user is now prevent from attempting to use the World Grid Material as a landscape hole material. Overriding blend mode on the default material will cause a crash.

Undo now works correctly with "Clear Region Selection".

Material Editor

New: Added Map Check warning after loading a level in the editor that uses a material that needs one of its Usage Flags set. Unless resaved, such materials will render as the default material in cooked builds.

New: Added World<->View transforms to the TransformPosition node in the material editor.

New: The Material Editor now saves the toggle state of nodes' comment bubbles, so they are preserved when reopening the material.

Fixed a crash placing a Custom Output material node in the material editor. That node type should have been excluded from the material node list.

Fixed a material compile error generating when using a Custom material node together with a TextureObject on OpenGL platforms.

Fixed a small error which was causing some Material Functions in the library to not appear in the right click menu, despite being exposed.

Fixed issue where editing a Material Parameter Collection results in marking an unnecessarily large number of materials as dirty.

Fixed titles on math nodes to update when the pin connections change.

TextureSample material nodes now fetch the correct tooltips.

Matinee

Fix bug that could cause sounds to start not quite at the beginning during playback.

Fix matinee crash when running without audio device.

Fixed matinee sound preview playback so that it respects the loop section and correctly restarts. Improved the quality of audio playback when scrubbing.

Launching movie capture once again works when using a DebugGame binary.

Matinee can no longer be opened while there is an active Play in Editor or Simulate session as it is unsafe to change matinees during play sessions.

Switching editor modes will now warn before closing Matinee mode.

Cascade

All particle modules now reset to their distribution properties to their correct defaults instead of "None".

Fixed crash when setting the particle system Initial Velocity to defaults when configured as a Distribution Vector Uniform Curve.

Fixed a crash in reinstancing of Persona preview instances after compiling blueprints that are referenced in the Animation Blueprint event graph.

Fixed a crash when switching between edit modes with wind source actors active.

Fixed an issue in the type-in UI for blendspace sample coordinates where the Y coordinate could not be set to the same as the X coordinate.

Fixed APEX clothing files failing to import when non-ANSI characters were present in the file path.

Fixed crash in anim compression when retargeting an animation with a single key.

Fixed crash in Persona accessing stale preview instances. Now we reinitialize the animation correctly when the blueprint changes.

Fixed crash in Persona when undoing deletion or duplication of state nodes.

Fixed crash when undoing a change in custom blending graphs for state machine transitions.

Fixed deleted names in smart name managers remaining after deletion.

Fixed ordering of source and target bones in the details panel for the copy bone node to make them more intuitive.

Fixed UI refresh being triggered for any property edit event fired from any UObject. Now filtered to refresh only when notify data is changed.

PhAT

Fixed issue where changing the mesh rendering mode in PhAT would not update in the viewport until the second click.

Fixed PhAT Editor crashing due to being able to select nonexistent bones.

World Outliner

New: Changed the level name tooltip in the Levels Browser to display the full package path name.

Static Mesh Editor

New: Added the ability to push the bounds for StaticMesh objects manually.

The bounds can be altered by changing the value of the PositiveBoundsExtension and NegativeBoundsExtension properties for a StaticMesh.

New: Static mesh adjacency buffer generation is now set per-mesh. Controlled either through the mesh editor or on import.

This was previously controlled by an internal fixed triangle limit but needs to be optional to allow PN tessellation on high-poly meshes.

The flag will be auto-set for old meshes preserving existing behavior.

Source Control

New: Added make file writable button for advanced project setting pages, which allows files to be edited when non-writable and not connected to source control.

New: Once an asset is made writable (if it cannot be checked out), it will no longer continue prompting the user for check out when it is modified.

Fixed not being able to use collections with SVN or Git set as your SCC provider.

Fixed Subversion source control plugin to recognize the correct line terminator sequence depending on the platform. This was previously breaking the log output on Mac.

Subversion source control provider can now use the system default svn binary where it exists.

This addresses issues where users have repositories and checkouts that were made with different versions of SVN to the client binary we ship. We now attempt to detect a system-level svn binary, and only use the shipped binary as a fallback.

Foliage

It can directly use the Instances array passed into the new FoliageInstancedStaticMeshComponent OnInstanceTakeRadialDamage event to remove all damaged instances.

New: Added Blueprint support for Foliage instances.

The foliage component class can now be overridden in the Foliage Type.

Users can create a Blueprint subclass of FoliageInstancedStaticMeshComponent to respond to Hit or Damage events and hide or remove instances, spawn effects, spawn real Actors in place of an instance etc.

The default class is FoliageInstancedStaticMeshComponent which is a subclass of HierarchicalInstancedStaticMeshComponent but has added support for Point and Radial Damage.

Fixed various issues that were only showing up during the process of packaging a project from the editor.

Gameplay Framework

New: Actor transforms when spawning.

The process of spawning actors has changed slightly. If an actor is spawned and its template's root component has a transform (for example, a RelativeRotation), that transform, including scale, will now be respected by the spawning code.

For certain cases where you are sure you want to spawn at the exact transform given and ignore any transform on the template's root component, we have added the SpawnActorAbsolute() function.

Check out DecalActor for an example of how this works in practice.

Notes when upgrading:

If you have custom actors or blueprints with transform data on the root component that was previously ignored, you will see different results when spawning them with 4.9. In this case the best fix is likely to be simply zeroing out the transform data, since it was ignored before anyway.

If you have added code somewhere to take this transform data into account before spawning, you will likely want to remove it, or else you will end up applying the transform twice.

New: A Remove Player analogue to Create Player is now available for use in Blueprints.

New: AActor::bPendingKillPending renamed to bActorIsBeingDestroyed and made private.

Previously GroundFriction was also used as the braking friction. This new setting allows separate control from the GroundFriction that affects turning control.

Added "BrakingFrictionFactor" which controls how friction is used in ApplyVelocityBraking(). (Note: this is 2 by default for historical reasons, but a value of 1 more closely matches the actual drag equation).

Different values are easily used in different movement modes by hooking in to OnMovementModeChanged and modifying BrakingFriction.

New: Added AbilityEndedCallbacks delegate to AbilitySystemComponent that broadcasts when an ability ends.

New: Added an automated test that will attempt to all variations of a new project. (IE C++ and blueprint and target platform for both mobile and desktop).

New: Added an automated test will parse and validate all available feature packs.

New: Added debug command ("p.VisualizeMovement") for showing in-world debug drawing of CharacterMovementComponent state including current velocity and acceleration.

virtual UCharacterMovementComponent::VisualizeMovement() can be overridden in child classes to add project-specific debug drawing.

New: Added GetServerWorldTimeSeconds() to return the simulated time in seconds of the server. This is safe to call on either the server or the client.

New: Added MaxRange and a Tag (FName) to noise parameters for AI hearing.

MaxRange is only used if > 0. It is modified (multiplied) by the loudness. Sensors must still pass their own range checks as well.

New: Added new Math functions to KismetMathLibrary:

RandomUnitVectorInConeWithYawAndPitch, creates an uniformly distributed random Vector within a cone defined by the given Yaw and Pitch values.

CreateVectorFromYawPitch, creates a Vector from the given Yaw and Pitch rotation values.

GetYawPitchFromVector, retrieves the Yaw and Pitch rotation values in degrees from the given vector.

New: Added optional interpolation curve to the MoveToLocation AbilityTask to support per-axis interpolation.

This was used to implement the feature packs used for the shared resources now used in templates.

New: Smooth rotation for network corrections of simulated proxies in character movement.

New: Spawn Actor now accepts Scale properly.

Because of this, we added SpawnActor to accept FTransform as an input.

New: The class of the default physics volume can now be set via the World Settings properites.

New: When unloading a streaming level all objects are now marked pending kill to avoid any stray references to the objects that could prevent the level from being garbage collected.

New: You can now bind the Any key. This will respond to any key press/release event and follows the same rules for consumption that other keys follow.

"Always-loaded" sub-levels will now be fully loaded before gameplay begins when using seamless travel.

A graceful message for failure to load the default map is now shown followed by closing the application when travelling instead of crashing.

AActor::bPendingKillPending renamed to bActorIsBeingDestroyed and made private.

BeginPlay will no longer be called on a component that has seamlessly travelled from another level.

Broadcast PhysicsVolumeChangedDelegate even if the previous physics volume was null.

Bugfix to timers that are paused immediately after being set.

Calling TryActiveAbility will now call CanActivateAbility on the Primary Instance of the Ability Spec, if it exists. (If not we continue to do the previous implementation which will call CanActivateAbility on the CDO.)

Change FQuat tolerance within SceneComponent and PrimitiveComponent to allow smaller rotation changes to get through.

Changed KismetMathLibrary functions PointsAreCoplanar, LinePlaneIntersection, and LinePlaneIntersection_OriginNormal to be BlueprintPure.

Component attachment is now replicated correctly to clients.

Console command ServerTravel can now pass parameters to the map.

Fixed characters not rotating with a base object that is moving at a very low rotation rate in games with a high frame rate. Quat comparison tolerance was too strict.

Fixed Editor crashing due to SetMaterial getting called on a DestructibleComponent during the construction script.

Fixed crash exiting Play in Editor if you had travelled to or restarted the level being edited during the PIE session.

Fixed crash when the component specified as the player's audio listener component has been destroyed.

Fixed Sound Mix failing to be pushed if it had been popped in the same frame.

Fixed using the PIE prefixed map name when trying to seamless travel in multiplayer PIE.

Fixed a crash which occurred on PIE exit after enabling Show Collision in game.

Fixed an issue with feature packs registering for super search which could result in multiple registrations which then caused an assert.

Fixed camera jumping when trying to interpolate back to original view target. (Contributed by ArCorvus, pull request 1215.)

Interpolate simulated position faster when network character proxy is coming to a stop. Reduces visual overshoot past end location.

Keys bound via key or action events will now count as having consumed the event even if there wasn't a pressed or released event this frame preventing axes using that key in lower priority input components from being active on other frame.

SceneComponent AttachChildren array is now replicated so that it is consistent with AttachParents.

SetCullDistance on UPrimitiveComponent now accepts 0 as a legal distance. A distance of 0 means the primitive is not culled at any distance.

The data for automated line test was incorrect causing false failures.

Timeline components will no longer execute their tick function when not active.

We no longer ignore hit testing in APlayerController::GetHitResultAtScreenPosition if the mouse isn't directly over the viewport. That function can be used regardless of the state of the mouse, so that logic has been moved elsewhere.

When transitioning levels EndPlay will no longer attempt to be executed for an Actor that was destroyed by another Actor's EndPlay call.

You can now set the GameMode HUD class to be none.

Learning Resources

Documentation

Improved docs for Add Yaw Input and Add Controller Yaw Input etc., to point to the scaling values that are applied.

Improved docs on Movement Component and Floating Pawn Movement to indicate that collision is wholly dependent on the Updated Component (normally the root component).

Sample Content

Fixed UI icons not being present in sample content.

Localization

New: Added game native culture setting to control which culture's localization data the editor loads for game assets. Game assets now display the specified culture's localization data when in the editor.

New: Added initial support for working directly with Localization Services in the editor. Allows you to upload and download translations to online services for localization. Allows plugins for specific localization service providers (OneSky, etc). Also created first localization service plugin for OneSky.

New: Added the source location information of a localization archive entry as an "extracted comment" in PO files when exporting.

New: Culture names now consistently use hyphens rather than underscores. Culture names with underscores are still accepted.

New: First pass of the OneSky plugin: Extend Localization Dashboard toolbar with OneSky buttons for "Import all cultures/targets from OneSky" and "Export all cultures/targets to OneSky".

New: Fixed live culture swapping when in certain configurations such as shipping. Enabled use of "-culture=" switch on command-line in all configurations.

New: Foreign archives now generate entries for the native translation of the native source as though it were the native source - the result is that the native translation will also be translated in the foreign culture. Localization resources now use the native translation of the native source as though it were the native source, specifically when looking up the foreign translation to use from archives - the result is that the native source will use the foreign translation of its native translation.

Retrieving localized metadata will prefer local changes to the metadata if they do not match what is expected by localization.

The Category Names of Components in blueprints are no longer gathered for localization when the "ShouldGatherEditorOnlyData" setting is false.

Updated logic in commandlet for gathering text from assets which was falsely reporting that nothing was gathered because no files were loaded. Now properly reports whether there were any packages found to be processed, rather than if any need to be loaded and processed in a deferred manner.

Networking

New: A warning will now be printed to the output log if an actor tries to send a non-multicast remote function but has no owning connection.

New: Added a check to see if the character is pending kill before calling TickCharacterPose() as the character can be marked for destroy after PerformMovement.

New: Added a file NetConstants.h which holds MAX_PACKET_SIZE which can be changed to update the MTU. Changed the MTU from 512 to 1000.

New: Added a macro CLOSE_CONNECTION_DUE_TO_SECURITY_VIOLATION to AssertionMacros.h which closes a connection, logs it, and provides a debug string to the client.

New: Added a scale component to PackageMapClient and now use a 1 bit check whether Location, Rotation, Scale, and Velocity have been serialized.

New: Added ability to save json in condensed format.

New: Added ability to search for replays by meta tag.

New: Added ability to track which users were in replays.

New: Added ability to view recently viewed replays.

New: Added LogRep and LogRepTraffic to EngineLogs.h and changed over some UE_LOG calls to use the new logs.

New: Added NMT_SecurityViolation where servers pass a debug string to clients to inform them of a disconnect.

New: Added support for the engine to notify the replay streaming service when players join in progress.

New: Added the ability to find replays that you participated in.

New: Added the Packet Handler Framework which allows for transformation of packets, including Encryption, Compression, Reliability.

New: Added Third Party Library CryptoPP to the Third Party Source directory.

New: Encryption Handler components that use the CryptoPP library and Packet Handler system to encrypt packets.

New: Reduced bandwidth usage by up to 15% or more by compressing replicated location, velocity, and rotation values more aggressively.

The amount of bandwidth savings you see in your project will vary depending on how much of it consisted of actor movement replication.

This does reduce the precision of these values slightly, but it should not cause noticeable artifacts in most cases. The level of compression is now configurable in the "Replication" section of the Class Defaults, in case higher precision is needed.

Using "Round Two Decimals" for the location and velocity, and "Short Components" for rotation will be equivalent to the precision that was used in 4.8.

New: UNetConnection has a new GetWorld function. It will try to get the world from the owning net driver and failing that the owning actor.

Added #IF_WITH_EDITOR code guard to remove code that derives GetNetMode if in PIE.

Fixed an issue where the engine was generating corrupted network profiler files if the URL of the loaded map contained more than about 255 characters.

Fixed potential crash if a demo net driver is left idling for too long.

Fixed the reported size of replicated functions in network profiles. Some bits that were incorrectly reported as being in the parameter section are now correctly reported as being in the header section.

Live replay timeouts when first connecting are handled correctly.

Multiple running instances of the same project can now record network profiles simultaneously.

Replay streamer now generates error messaging and stops demo recording when it fails.

Special cased PIE dedicated server or client without server in World.cpp.

The demo net driver for replays is destroyed when a seamless travel copies the world data to ensure it always gets destroyed.

We no longer spawn particle system components on dedicated servers, reducing both memory and performance overhead.

When viewing replays, character smoothing between updates should be much smoother.

When scrubbing replays, camera will continue to follow the original view target.

Online

New in BuildPatchServices:

Improved logic for detecting existing installations when running an installer.

Added support for SHA1 verification of chunk match so that generation does not need to load existing chunks.

Exposing list of files in the build via the manifest interface.

Patch generation now makes use of available CPU cores to improve processing speed.

Fixed a variety of issues with BuildPatchServices:

Detecting previous move when resuming a patch.

Resuming an installation on some platforms where the file API would not allow seeking on the file handle.

Verification stage not being capable of cancelling.

Incorrect error string generation.

Potential cloud enumeration deadlock for patch generation.

Optimising installer attribute setting logic, as well as improving reported progress information for this stage.

Removed uses of helper function FPaths::FileExists which is not robust on all platforms.

Fixed XMPP MUC room members populated correctly.

Fixed player's presence status on Steam so that it now shows their actual status instead of the string needed to connect to their game.

Fixed a rare issue where attempting to save out Steam achievements multiple times in the same frame could prevent further Steam tasks from executing.

Other

New: Added a generic motion controller key abstraction

This allows multiple physical devices (e.g. left and and right hand controllers) to be routed to a single player in the engine.

New: Added a render array to texture maxscript which can be used to bake textures out of unreal's blueprints given a certain data format.

New: Added entitlement checking for Gear VR, which lets developers verify that their app has been purchased through the Oculus store.

New: Added functions to get and set the World to Meters scale from Blueprints.

New: Added in Motion Controller Component, which you can add to any actor, and will set its location and orientation to that of the player's motion controller.

New: Created a Flurry analytics plugin for iOS.

New: Improvements to the console:

Console commands are now searchable. To search, begin with a "?" followed by your search terms separated by spaces. For example, to search for commands that contain both foo and bar you would type "? foo bar".

The autocomplete feature has been updated so it will continue to display an exact match while you enter parameters to the command.