新增特性：内容浏览器的文件夹收藏

RELEASE NOTES （以下部分不作翻译）

AI

Bug Fix: Fixed the On Perception Updated delegate to be correctly bindable to AI Perception Component.

Behavior Tree

Bug Fix: Changed the order of the Behavior Tree tick to allow Blueprint-based nodes to update before processing search data.

Bug Fix: Fixed a bug that caused a Behavior Tree asset containing a Run Dynamic Behavior node to become dirty upon opening.

Bug Fix: Fixed a Behavior Tree state change during a latent abort. Decorators and services updates are delayed until after the aborting node finishes.

New: Added the local decorator scope to the Behavior Tree Composite Nodes. The local decorator scope is controlled by the Apply Decorator Scopevariable. This addition provides better control of flow-observing decorators, allowing them to be active only in a specified branch of the tree.

Animation

Crash Fix: Applied a fix for a rare crash when Notify Queue caches a pointer to the notify that if garbage collected, would have a pointer to invalid memory. We now cache a pointer to the owner of the notify memory so we can track its validity.

Crash Fix: Applied a fix for a Live Link module startup crash.

Crash Fix: Prevented threaded work from running in a single-threaded environment, which avoids a Linux server crash.

Bug Fix: Fixed debug builds hitting checkSlow when using a post process Anim Instance on a Skeletal Mesh Component without a main AnimInstance.

Bug Fix: Fixed an issue in which the Delay Submix effect would allocate too much memory for delay lines.

Bug Fix: Recording audio in Recording Sequencer will no longer cause the Editor process to persist after shutdown.

Bug Fix: Fixed issues in wavetable sampleplayer synth component.

New: Added the ability for Submixes to define their own channel format. Currently, Stereo, Quad, 5.1, 7.1, and first order ambisonics are supported.

New: Made improvements to Unreal Engine 4's native VOIP implementation. Spatialization, Distance Attenuation, Reverb, and custom effects for a player's voice can now be controlled using the UVoipTalker Scene Component.

New: The new Microphone Capture Component enables feeding audio directly into a game for use with the Audio Engine and for driving in-game parameters.

New: Upgraded to Steam Audio Beta 10.

New: Added the ability to get envelope following Audio Components and Synth Components through BP delegates.

New: Added the ability for synthesizers to modify the requested sample rate on initialization.

New: Users can now have different Audio Plugin source settings for different Plugins.

New: Added a Panner Source Effect.

New: Sound Submixes and Sound Classes are now Blueprint types.

New: Added support for seeking with ADPCM.

New: Optimized Active Sound by not processing active sounds if they are out of range.

New: On Mac Media, audio playback uses the operating system media player mixer rather than mixing in Unreal Engine 4. This is currently only enabled on Mac, but may come to iOS in the future.

New: Oculus Audio Plugin has been updated. It now includes a Reverb Plugin, as well as support for Android and playing back Ambisonics files.

New: First-order Ambisonics files can now be imported into Unreal projects and played back using select Spatialization Plugins.

New: Added pre and post Source Effect Bus Send types. At this time, sending audio to post-source effects sends before distance-based effects, such as occlusion and distance attenuation are applied.

New: Multichannel file import is now supported.

New: The Allow Anyone To Destroy Me variable is now enabled on audio components.

New: The Resonance Audio Plugin for Unreal is now included as an Engine Plugin. The Resonance Audio Plugin supports binaural spatialization, reverberation, sound directivity, and ambisonics playback on Windows, iOS, Android, Linux, and Mac.

New: Audio Components can automatically manage attachment, opting in to cache their attach parent and attach socket. This enables them to attach to their cached parent only while playing audio, then detach after playback is completed. Set to false by default.

New: Optimizing the way audio stream chunks are serialized to take advantage of alignment optimizations on console.

New: Added a Blueprint function for enabling and disabling the Low Pass Filter on Audio Components, as well as setting the frequency of the filter.

New: Added "Owner" parameter to Play Sound At Location and Play Sound 2D functions to support "Limit to Owner" concurrency settings.

Automation

Crash Fix: Fixed a crash in Screen Shot Manager caused by an attempt to access a deleted String in an async lambda expression.

Bug Fix: Fixed issue with UnrealBuildTool and AutomationTool always being out of date, which forced a rebuild and made it impossible to debug operations dependent on them.

Bug Fix: User Defined Structures now store default values in the same way that native structs do, so they will now be correct in cooked builds and when added to containers. Changing the default value will also correctly propagate to unmodified instances in blueprints or other user structs.

Bug Fix: Fixed missing Outer mapping at cook time on nested subobjects instanced with the New Object function in emitted C++ code during Blueprint nativization.

Bug Fix: Removed the Inverse Lerp node and redirected it to call Normalize To Range. Also Fixed incorrect value being returned by Normalize To Range when Range Min and Range Max are equal.

Bug Fix: Fixed a rare linker issue where Is Blueprint Finalization Pending would return true when trying to force-load subobjects that weren’t ready to be loaded. This would prevent some placeholder objects from being replaced.

Bug Fix: We now ensure that "-build" is always passed to BuildCookRun automation workflows in the editor for projects configured with Blueprint nativization enabled so that it doesn't skip that stage.

Bug Fix: Revised both UAT/UBT-driven and custom code/data workflows to more seamlessly work with Blueprint nativization settings.

Bug Fix: Blueprints that are asynchronously loaded inside the editor are correctly registered with editor systems like the list of cast nodes.

Bug Fix: Text can be specified in blueprint functions as default parameters.

Bug Fix: Fixed a serialization oversight in Ed Graph Pin that could lead to a compile error during Blueprint nativization.

Bug Fix: Added more descriptive log output after an attempt to break Blueprint execution on an unimplemented function/interface.

Bug Fix: Added Component nodes no longer lose their component type when another the component blueprint is compiled

Bug Fix: Split struct pins now handle both user struct variable renaming and native Core Redirects variable renaming, the same way that Make/Break did before.

Bug Fix: Implemented Get Redirect Pin Names for async nodes. This fixes a bug where property redirectors on async nodes did not work correctly.

Bug Fix: Fixed issues where type would not be correctly propagated through multiple redirect nodes.

Bug Fix: User Defined Structures can now be imported from text using the human-readable field names, which fixes their use in nested arrays inside data table rows.

Bug Fix: User Defined Structures that are nested inside other user structs can now be safely modified. It is now safe to modify the inner struct's defaults without corrupting the outer struct, and those default changes will be correctly propagated to the outer struct.

New: Deprecated properties can still be accessed in blueprints so long as they have blueprint getters and setters. This creates a clean deprecation path for blueprint-accessed properties.

New: Added new Blueprint functions to query parameters from Material Instance Constant objects. Previously, these were only available on Material Instance Dynamic objects. The functions included are:

Get Scalar Parameter Value

Get Texture Parameter Value

Get Vector Parameter Value

New: Added a step to the compilation manager to skip recompilation of classes that are dependent on a given classes function signatures when those signatures have not changed. This greatly improves compile times for blueprints with large numbers of dependencies.

New: Preserve graph editor widgets when clicking on a hyperlink, this speeds up navigation via the debugger "step" command and Find in Blueprints control - both are now more responsive.

New: Added Vector Length XY to Blueprint math library.

Core

Crash Fix: Fixed a crash on shutdown due to component visualizers not being cleaned up properly by the Unregister Component Visualizer function.

Crash Fix: Fixed some crashes with the new Blueprint Garbage Collection weak reference feature (and possibly Hot Reload) by updating the archive's serialized property when serializing arrays, sets, or maps to point to the inner property.

Crash Fix: Fixed a crash that could happen when GC Objects were constructed and destroyed during engine shutdown.

Crash Fix: An editor startup crash when using cook-on-the-side has been fixed.

Crash Fix: Fixed an issue where packaged games that disabled the TCP/UDP messaging plugins would crash on startup in shipping configuration.

Crash Fix: Fixed a crash when the engine was reporting package errors.

Bug Fix: Multicast Delegate Property’s Identical function now has the same behavior as Delegate Property’s Identical function. This prevents it from giving incorrect results and causing serialization errors.

Bug Fix: The Asset Registry module is now always preloaded on startup, even if EDL is disabled.

Bug Fix: Fixed a regression in hot reload speed accidentally introduced in 4.17, caused by rerunning UnrealHeaderTool redundantly if a source file has changed in the same folder as a header file which contains at least one UCLASS. This has also been fixed in non-hot-reload compiles.

Bug Fix: Removed a redundant call to Update Vertices when creating a level's model components, which was causing a race condition with the renderer thread.

Bug Fix: Improved whitespace handling in both Map Property’s and Set Property’s "ImportText_Internal" function. Emptied the map or set if an error occurs during a text import of a property to avoid bad container states.

Bug Fix: Literal soft object pins are correctly cooked and tracked in the reference viewer. This may cause assets referenced by disabled nodes to be cooked into your project. In this case, the reference viewer will track which blueprints are causing this.

Bug Fix: The serializing object will now be logged during reachability analysis in the event that an invalid object reference is detected during a garbage collection pass.

Bug Fix: Hot reloads no longer occur during PIE, which was causing bad states in blueprint types when they are reinstanced.

New: Encryption/Signing Key Generator.
A plugin which allows the automatic creation and configuration of in-engine data cryptography through the project settings, under the "crypto" header.

Added options to plugin settings which allow encryption to be used on the various asset files in a pak. Encryption can be used on just the .uasset file, which contains only the package header information, or the .uexp and .ubulk files too, which contain the rest of the package data. Encryption on .uasset files provides a good compromise between data security and runtime performance.

New: Added Level Streaming CVars to customize streaming for your project. These all default to enabled, but can be disabled to make different trade offs for memory and level loading performance.

"s.ForceGCAfterLevelStreamedOut" - Whether to force a GC after levels are streamed out to instantly reclaim the memory, at the cost of a hitch. Defaults to on.

"s.ContinuouslyIncrementalGCWhileLevelsPendingPurge" - Whether to repeatedly kick off incremental GC when there are levels still waiting to be purged. Defaults to on.

"s.AllowLevelRequestsWhileAsyncLoadingInMatch" - Enables level streaming requests while async loading (of anything) while the match is already in progress and no loading screen is up. Defaults to on.

New: Upgraded the Array function, Insert, to allow it to take an array with any allocator type. It can also move elements out of another Array.

New: Array now has a "_GetRef" variants for many of its functions, which will create an element and return a reference to it rather than its index in the Array. These functions are: “Insert_GetRef”, “InsertZeroed_GetRef”, “InsertDefaulted_GetRef”, “Emplace_GetRef”, “EmplaceAt_GetRef”, “Add_GetRef”, “AddZeroed_GetRef” and “AddDefaulted_GetRef”.

New: There is a new Multi Map function, Append, to match the Map class’ function of the same name.

New: Visual Studio Code project file generation now creates a .code-workspace for the workspace. Allows foreign projects to "mount" the UE4 folder so that the engine tasks are available, and all engine source is visible to VSCode for searching purposes

New: Ensure that all branches within Generic Platform Misc’s Root Dir function produce an absolute path with no duplicate slashes. Remove relative-to-absolute conversion of the root directory from the Paths function, Make Standard Filename, now that we know Root Dir always returns an absolute path.

New: Added Net Serialize to Date Time.

New: Vector 4 now features a -= operator.

New: Allowed Visit Tuple Elements to take multiple tuples of the same size. These are now iterated in parallel and will invoke the visitor with multiple arguments.

New: Minimal Name now has an Is None function.

New: Relaxed memory ordering atomic operations.

New: Atomic object wrapper has been created. This guarantees atomic access to the underlying object, with additional memory ordering guarantees.

New: Platform Atomics now has an Atomic Read function.

New: Added overloads of atomic functions to handle int8, int16, and int64, in addition to the existing int32.

Switched Android and Linux builds over to use the Clang implementation.

New: Command-line option "-NOEDL" will disable EDL.

New: Command-line "-diffonly" mode added to cook commandlet. This mode compares packages on disk that have already been cooked with packages currently being cooked to detect deterministic cook issues.

New: To go along with changes to the Size Map tool, the way that ResourceSize is calculated has changed. Exclusive is the same but Inclusive is now EstimatedTotal and represents the total size of the object and all of its sub objects, but not any external assets it references. It now tries to estimate the size on a generic cooked platform so it will handle texture LOD bias better.

New: The Platform Stack Walk function, Capture Stack Backtrace, now returns the stack size rather than checking for the first null pointer, to prevent truncated callstacks if parts of the stack are zeroed out.

New: Improved "caching file" message in networkplatformfile so it says "Requesting file..." and is only output when we actually request the file from the server.

New: Improved Variant's support for move semantics. Switched Variant Types over to an enum class to aid debugger visualization.

New: When cooking with Generate Chunks and the asset manager enabled, AllChunksInfo.csv is now written out to the CookMetadata directory. This file can be used to look for historical chunk size changes, and it now uses the per-platform cooked size.

New: Added more debug info for ensure in Linker Save when a name that has not yet been mapped is being serialized.

New: Tweaked "LogInit" command-line logging to clarify when the command line is incomplete due to some arguments being filtered out.

New: Promoted Statistical Float (a utility class to track basic statistics of a real number data series with constant storage) into Core from FunctionalTesting

Bug Fix: The Enter key now works as expected for details panel asset pickers.

Bug Fix: Removed circular referencing to parent window when creating an asset from an object.

Bug Fix: Perforce Plugin: Removed all calls to methods that would store passwords on the users local machine.

New: Added "favorite folders" to the content browser. You can add or remove folders from the Favorites list in the folder's right-click context menu, and hide or show the Favorites list in the Content Browser options.

New: Added support for the replay (demo) system, both record and playback, in PIE sessions. Demos from PIE sessions are compatible with those made in standalone instances, and vice versa.

New: Added the ability to have conditionally overridden HLOD settings from project-global defaults.

New: Created an Actor Component to decode Linear timecodes from an audio source. Outputs timecode, or timecode event.

New: The realtime level editor viewport is disabled if running under remote desktop.

New: Added the project setting "bValidateUnloadedSoftActorReferences" to the Blueprints section. This setting is true by default. Setting it to false it will disable the code that loads assets to check for references when deleting/renaming an actor.

New: Added Rename Assets With Dialog to Asset Tools. All previous implementations now use the "With Dialog" version. Delete Object and Duplicate Asset can be completed without dialog.

New: Added a variable called GIsRunningUnattendedScript. If true, we are running an editor script that should not prompt any modal dialog. Can be set for commandlets with "-RUNNINGUNATTENDEDSCRIPT" command-line option.

New: Many improvements to the Asset Audit, Size Map, and Reference Viewer tools to support their use in analyzing cooked content

Bug Fix: Fixed an issue to not show empty Global group if it only contained the Material Layer parameter.

Bug Fix: Fixed an issue with Details panels to now "own" a color picker so that a different Detail panel refreshing doesn’t close it. This fixed the refreshing state of the graph after changing the texture or color parameter values.

Bug Fix: Fixed an issue to allow visible parameters parameter retrieval to correctly recurse through internally called functions. Previous checks were intended to prevent function previews from leaving their graph through unhooked inputs but unintentionally blocked all function inputs.

Bug Fix: Fixed an issue with Material overrides to display the actually used values even when greyed out.

New: Added a Parameter Defaults tab to the Material Editor so users can see and change the default value of all the parameter nodes currently in the Material Graph, also added Parameter Defaults tab support for Material Functions.

New: Save to Child and Save To Sibling buttons now work for material layer parameters and are shown on the material layer parameter panel.

Crash Fix: Fixed a crash when calling Set Playback Position in an event when adding Set Playback Position as a latent action.

Crash Fix: Prevented a reload crash that could happen if a Sequence was being recorded in a currently opened Sequencer. On Recording Started and On Recording Finished are now set to multicast delegates.

Crash Fix: Added a nullptr check to fix a crash in Actor Sequence when it doesn’t exist.

Crash Fix: Fixed a crash opening a new Sequence while another is still active.

Crash Fix: Fixed a crash when an Actor Factory is not found.

Crash Fix: Added null checks to prevent a crash when saving the default state of a spawnable.

Bug Fix: Fixed an issue with quaternions > rotation > quaternions so that unwinding is only processed if the last transform is valid.

Bug Fix: Fixed a rotation rotator to quaternion to rotator conversion which prevents you from typing in a rotation of 0,0,320 into the Key Editor. Unwind rotations from the previous transform to the current transform so that the nearest rotation is set rather than the rotator to quaternion to rotator conversion.

Bug Fix: Sequencer: Set min/max values for generic key area so that they don't default to 0,10.

Bug Fix: Fixed an issue returning unhandled only if not dragged. There was an issue where dragging in the track area would sometimes leave the handled state with the time slider controller to not allow you to pop up a menu with the movement tool.

Bug Fix: Fixed a problem to now defer Details panel updates on scrubbing and playing.

Bug Fix: Fixed an issue by adding a null check and warning for invalid Get Parameter Collection Instance.

Bug Fix: Fixed an issue to set row index when creating a new take

Bug Fix: Fixed issues with pre-edit property chain broadcast so that the property path will include possible struct/array node.

Bug Fix: Fixed all light colors being set if any color property is animated.

Bug Fix: Fixed spawnables not playing back when Editor Preview Actor was set to false for Sequencer spawnables so that Begin Play doesn't get skipped.

Bug Fix: Fixed an issue to reset drop node on drag leave.

Bug Fix: Fixed a delay at shot boundaries causing Sequences to not play back and render out. The shot ID needs to be tracked to determine whether a new shot is encountered.

Bug Fix: Fixed a delay before warm up causing Sequences not to render.

Bug Fix: Fixed an issue to enable the camera cut track when popping back to the master only if there’s a camera cut track in the Master Sequence. It addresses an issue where if you don’t have a camera cut track in the Master, the camera gets locked to a camera cut in a sub-scene and you can’t toggle out of it.

Bug Fix: Pivot locations are now updated for a selection when closing Sequencer.

Bug Fix: Fixed an overlap issue by looking at the key behind it. It addresses if there’s 3 keyframes on consecutive frames, so if you zoom out, you should see two bordered keys when the overlap threshold is passed.

Bug Fix: Fixed UMG animations not working with Blueprint Nativization.

Bug Fix: Fixed an issue in Sequencer to remove null tracks on object bindings. Tracks can become null if they're from a plugin and the plugin is disabled.

Bug Fix: Moved some commands out of the generic Sequencer command bindings so that they don't take over the viewport. For example, end for "Snap to Floor" should still function in the viewport.

Bug Fix: Fixed an issue to restore pre-animated state when changing active channels.

Bug Fix: Display names for Shot are now switched to FString so that it's not localized.

Bug Fix: Fixed an issue with Sequence Recorder to close the target animation asset editor if it exists before recording into it.

Bug Fix: Fixed an issue with Sequence Recorder to record to the specified target animation for the target Actor only. Newly tracked components will have newly created animations so that they don’t record to the same target animation assets.

Bug Fix: Sequencer now uses drag and drop actor factory if specified. This ensures that the correct Actor Factory is used in creating the object template for the Sequencer spawner. It fixes some spawnables not getting created properly (for example, an Empty Actor).

Bug Fix: We prevent throttling on the Curve Editor so that the Editor world tick can apply. It fixes the viewport not updating sometimes when adjusting curves in the Curve Editor.

Bug Fix: Fixed an issue in Sequencer to always save the default spawnable states regardless of the focused Sequence. Addresses issue if you step back to the Master Sequence (and the spawnable if it still exists) and then scrubs outside the region where the spawnable exists. It gets destroyed but saved default spawnable state doesn’t get called because it’s no longer the focused Sequence.

Bug Fix: Fixed Sequencer viewport invalidation so that it happens on Sequence evaluation.

Bug Fix: Fixed an issue when scrolling in track area.

Bug Fix: Fixed an issue with Sequence Recorder causing duplicate Actor triggers before playing so that the Sequence can be recorded and played back at the same time.

Bug Fix: Fixed an issue with Sequence Recorder when recording spawnables not getting the correct position for being spawned at.

Bug Fix: Fixed an issue with Sequence Recorder to record spawn Actors immediately so that they won’t be missed if they’re deleted before Tick.

Bug Fix: Fixed a problem where Sequencer was not updating after toggling Bind Sequencer to PIE/Simulate while PIE is active.

Bug Fix: Addressed an issue in Sequencer to find available non-overlapping row index when adding sub-sections.

Bug Fix: Fixed an issue with Sequence Recorder to address Level Sequences no triggering when recording. Level Sequences would not get recorded if the World Settings Actor was not recorded.

Bug Fix: Fixed a slot animation issue where it was not being restored for montages that are recreated during evaluation.

Bug Fix: Fixed the import camera in Sequencer so that when new Cameras are created, values from the FBX are going to the newly created Cameras. Also, added Reduce Keys and Reduce Keys Tolerance to import FBX options.

Bug Fix: Fixed character proxies doing up to two floor checks when only rotation is changed (there shouldn't be any). Added some optional verbose logging to the Find Floor and Compute Floor Dist functions.

Bug Fix: String allocations are no longer performed on every Server Move function call that the server runs.

Bug Fix: A bug with Post Significance not firing when unregistering an object unless it was the last object of its tag has been fixed.

Bug Fix: The engine will now only create a Material Instance Dynamic as a child of the calling object if the construction script is running. Otherwise, it will be created in the transient package.

Bug Fix: Fixed clients bypassing network move combining and RPC throttling when there is no acceleration and velocity is non-zero (for instance, when falling or decelerating). Changed velocity condition on whether moves may be combined to a delta from or to zero velocity.

Bug Fix: Fixed "infinite jump" exploits from rogue clients. The server no longer incorrectly resets the Jump Key Hold Time variable while not changing the Was Jumping variable.

Bug Fix: Log Gameplay Tags is now exposed.

Bug Fix: Disabled HLOD volume overlap events, and set to not load on client or server.

Bug Fix: Optimized client movement to avoid updating skeletal mesh bones on the client when teleporting back to combine a network move to the server. This can be avoided since the following Perform Movement call will move the mesh and cause the update there.

Bug Fix: Added stat for Force Position Update (when server ticks client that has timed out) so that it doesn’t show up as Perform Movement.

Bug Fix: Redirectors or otherwise invalid .umap files are no longer considered sub levels for world composition.

Bug Fix: All Actor subclasses now correctly enforce not ticking when tick type is Viewports Only, even if they override TickActor. The Should Tick If Viewports Only function can override this by returning true.

Bug Fix: Added several transform related functions to the HIDE_ACTOR_TRANSFORM_FUNCTIONS macro and fixed the signatures on some that were already there.

New: Added a new plugin for performing data validation. Data validation can be run on individual assets, multiple assets or whole directories. It can also be run as a commandlet and included in your build process.

New: Added a function called Return To Main Menu to the Game Instance class. Games may call function to return to their main menu reliably, even in cases where a Player Controller isn't available to call Client Return To Main Menu With Text Reason.

New: Data Tables now support getting the value of each row for a specific column/property, excluding the title of the column.

New: Improved the editor UI for Primary Asset ID properties. It now uses the same one as Pins and better handles objects that aren't already loaded.

New: Added functions to Spring Arm Component to get relevant status of the collision test.

New: The Player Input function Massage Axis Input can now be overridden in subclasses.

New: A new variable, Should Manager Determine Type And Name, has been added to Asset Manager settings. It is disabled by default. If enabled, the Asset Manager will be able to load assets that do not have a native class that implements Get Primary Asset ID, in both the editor and a cooked game. This will behave similarly to Should Editor Guess Type And Name, but in exchange for some runtime performance it will work properly in a cooked build.

New: Primary Data Asset can now be directly blueprinted to enable blueprint-only Primary Assets, even if Should Manager Determine Type And Name is disabled. If you do this, the Primary Asset Type will be the blueprint below Primary Data Asset, which you can then inherit from to create your Primary Assets.

New: If overrides of Actor Component’s Begin Play function are not routed up the hierarchy code, the engine will now use Ensure to warn that initialization steps were missed.

New: Alpha Blend struct is now marked as BlueprintType.

New: Gameplay Abilities now pass along their Source Object when creating the effect context for a new effect.

Consolidated all of the events on Active Gameplay Effect into a single struct.

New: Added an active effect event for when the inhibition of an effect changes, meaning that the effect is no longer relevant, but had not actually been removed.

New: Added functionality to cycle between targets with Page Up and Page Down for 'showdebug' commands. List of targets is contextual (For example 'showdebug animation' will consider all visible actors with an AnimGraph). Current debug Target is highlighted in a green bounding box.

New: Performance optimization: Added Network Skip Proxy Prediction On Net Update to the Character Movement Component. This skips immediate forward prediction for proxies on the frame they receive a network update, avoiding all forward prediction sweeps and floor checks on those updates. Intermediate frames will interpolate with prediction. This can also be disabled globally by setting the CVar "p.NetEnableSkipProxyPredictionOnNetUpdate" to 0.

New: Reduced overhead of evaluating streaming level volumes when all Player Controllers have Is Using Streaming Volumes set to false.

New: Significance Manager’s Update function now takes viewpoints in as an Array View instead of a const Array reference.

New: When keys with unknown character code are received by the input system, a new Key struct will now be dynamically created to represent it rather than it being rejected as an invalid key.

New: Significance Managers’ Post Significance Update functions can now specify to be executed sequentially on the game thread instead of only as concurrently in the parallel for.

New: Conditional Init Axis Properties is now protected instead of private, so it can be seen by child classes.

New: The Smooth Mouse function is virtual, so games can implement their own smoothing code.

New: Added Rand Point In Circle function. It returns a random point, uniformly distributed, within the specified radius.

New: Updated ensures to give more information when there is an invalid Ground Movement Mode.

New: Added a new trait called Post Script Construct. This enables users to perform initialization after blueprints have created a temporary object.

Bug Fix: When a client informs the server that it has loaded a streaming level, we now force a net update on all dormant actors that have, at any point, replicated data to relevant clients and ensure that the connection's destroyed startup/dormant actors list is properly populated.

Bug Fix: Fixed an issue that could cause character movement to look jittery in replay playback in some cases.

Bug Fix: Fixed a bug that could cause replicated actors that are destroyed while dormant to never be destroyed on clients.

Bug Fix: Fixed a server crash that could occur if a client sent a reference to an object who's outer object had already been garbage collected.

Bug Fix: GetGameLoginOptions to URL for split screen players was missing, it has now been added for consistency with first player login flow

Bug Fix: Fixed a rare server crash when actors in the process of being destroyed could erroneously be re-added to the network object list.

Bug Fix: Actors are now removed from all net drivers' object lists instead of just the one matching the net driver name stored on the actor.

Bug Fix: Fixed websocket not providing information when the peer closes the connection.

Bug Fix: Fixed a rare server crash that could occur if network encryption was in use.

Bug Fix: Fixed a rare crash due to a null game mode that could occur when joining a server.

New: Optimized updating level visibility state between client and servers. When possible, we now only send a single RPC to communicate which levels are visible or should be visible rather than separate RPCs for each level.

New: Added a new console variable net.Max Connections To Tick Per Server Frame, which can be set to limit the number of client connections a server processes every frame. When many clients are connected, this can help maintain the desired framerate on the server.

New: Added the ability to disable automatic ping replication to all clients in Player State. This can add up to a lot of CPU and bandwidth overhead with many clients connected, since player states are always network relevant. See the Should Update Replicated Ping variable in the Player State class.

New: Added new global network delegates callback Network Cheat Detected for responding when cheating is detected on a server.

New: Analytics have been added for oodle compression percentages.

New: We now use "-multihomehttp" instead of "-multihome" for routing HTTP sockets.

Crash Fix: Fixed a crash on application exit of SPRINGBOARD. The process-exit watchdog transgression found several issues if the game is forced closed when the startup movie is playing and the "Wait for movies to complete" is enabled/

Virtual keyboard text field isn’t visible after rotating from landscape to portrait.

Chinese and Korean virtual keyboards don’t allow native characters.

Number pad reverts back to normal keyboard

Gboard and Swift swipe entry are not supported.

Cursor and UMG do not match.

Text field doesn’t appear if there was too much text.

Crash Fix: Samsung Galaxy S8 with Android 7.0 is not hiding suggestions and disabling predictive input. There are cases with this that can cause a crash. Global solution: On text change, downgrade to simple suggestions all the easy correction spans that are not a spell check span (remove android.text.style.SuggestionSpan.FLAG_EASY_CORRECT flags).

Bug Fix: Fixed an issue to properly detect need for rebuilds from the final NDK and SDK levels only in UEBuildSettings.txt.

Bug Fix: Fixed Android icon paths.

Bug Fix: Fixed polling code in Tcp Message Transport that was wasting CPU cycles when using Launch on an Android device.

Bug Fix: Fixed an issue related to Text Watcher On Text Change being called multiple times when typing or deleting the content of a native Android Edit Text control.

Bug Fix: Fixed an issue with values for pinch input producing very different results for the same area on Android devices:

When the pinch goes beyond the viewport boundaries, the touch that goes off-screen is "released" and the zoom effect is over. This is solved by remembering the last pinch event values

The initial distance for the pinch/rotate are "hacked" by touching the screen and moving the finger to another position before using the second finger. This is solved by using the correct values when the pinch event starts.

Bug Fix: Fixed an issue with Android Web Browser 3D. The external texture was moved from Content Browser to the Web Browser plugin.

Bug Fix: Fixed some issues on Lenovo 939 when rendering a simple scene. The shader compiler complained about code lines before the #extension directectives. Added a placeholder ("// end extensions") in the shader code.

Bug Fix: Fixed a small number of persistent memory leaks on the Mac build that slowly consume more and more memory as you use the Editor. Interacting with menu's was particularly egregious as each NSMenu would leak after you move away.

Bug Fix: Fixed a problem with Mac editor not exiting with error code returned from Guarded Main function.

Bug Fix: Better support for GPUs with 4GB or more of video memory.

New: Updated Xcode project generator to sort projects in the navigator by name (within folders) and also sort the list of schemes so that their order matches the order of projects in the navigator.

Bug Fix: Using the -opengl command line argument will now default OpenGL to 4.3.

New: Added a recompute Tangents options for cloth assets.

New: Updated Nvidia Ansel to v1.4

New: Added a new console-variable to enable and disable Manual-Vertex-Fetch for Metal. MVF works on macOS, though testing did expose an error with Tessellation on Nvidia (true for MVF enabled & disabled).

New: Refactored the way we compile Buffer and RW Buffer types for Metal so that we can support the type-conversion semantics of HLSL/D3D.

New: Manual Vfetch for Static Meshes. Skeletal Meshes also use the new layout.

New: Added code to D3D11RHI (enabled with "-d3ddebug") to validate Draw Indexed Primitives isn't trying to draw off the end of the instanced vertex streams.

New: Added support for 2D IES asymmetrical light profiles that can be up to 256x256 in size.

New: Added support for linear HDR EXR output from Sequencer.

New: More Metal debugging commandline options "-metalfastmath" & "-metalnofastmath" to force fast-math on or off for all shaders, must be using runtime-compiled shaders (i.e. -metalshaderdebug or r.Shaders.Optimise=0) to take effect.

New: Added support for Nvidia Aftermath v1.3.

New: New cvar r.ForceStripAdjacencyDataDuringCooking that will strip adjacency data from all Skeletal and Static meshes during cooking.

New: ViewToClipNoAA added to uniform shader parameters. This allows "After Tonemapper" post process blendables that can be positioned in view space when using temporal AA.

New: Added RHI Command List Enqueue Lambda method which can be used to enqueue arbitrary tasks on the RHI thread from the render thread without having to write lots of boilerplate FRHI Command functor classes.

FX

Bug Fix: Fixed texture streaming with particle Subuv.

New: Implemented a fast particle pool memory which default is 2MB and automatically cleans up oldest used pool slots.

Bug Fix: Added support for Reflection Captures to support Lighting Scenarios without the need for recapturing.

Bug Fix: Reflection Captures are now part of the Map Build so modifying a Reflection Capture in Editor will display a preview, but game can only display built captures (black for unbuilt with screen message) *

New: Removed read / write locks from PipelineStateCache, Estimated half time on the main thread for PipelineStatecache operations. Introduces duplicate which are cleaned up at end of frame. Slightly higher memory overhead.

Optimized the texture streaming update loop when using a many small levels in big worlds.

New: Added new CVar "r.DistanceFields.ForceMaxAtlasSize" (defaults to zero, which leaves the current behavior of auto-sizing up to configured maximum, as needed.) This can be used to avoid costly hitches when resizing the distance field in projects with large numbers of actors.

New: Added new "r.HLOD.DistanceOverride" CVar, which can be used to force all HLODs to transition at a specific distance, regardless of the individual cluster's settings. Defaults to zero (off).

New: Added new options to HLOD settings to strip adjacency and distance fields from generated meshes.

New: Added new CVar for adjusting view distance scale, which is not affected by scalability settings

AutomationTool

Bug Fix: Fixed an issue to no longer produce access violations when creating an installed build of the Engine when running the Automation Tool directly, rather than using the Automation Tool Launcher.

Bug Fix: Fixed one CPU core spinning during compilation using Parallel Executor. This was due to Completed Event never being reset.

Bug Fix: Fixed the ability to distribute app-local dependencies with games packaged using the launcher UE4 distribution.

Bug Fix: App-local dependencies now work for C++ and Blueprint projects.

Bug Fix: Fixed a race condition where stdout/stderr write handles could be inherited by multiple processes, resulting in them not being closed (and the process exit being detected) until all processes that inherited them had been closed. This improves performance of Parallel Executor.

New: Added support for external projects with new parameter to "List Third Party Software". The parameter -ProjectPath specifies the path to the UProject file so that the build rules of the project are parsed and the folder is part of the search for Third Party Software files.

New: Lowered logging level for cached file notification during Cook from Warning to Verbose in order to reduce clutter in the logs.

Removed: Code that deletes cooked data on a failed cook has been removed because deleting the cooked data prevented post-mortem analysis. The Engine now writes out packages transactionally by writing to a temporary file and moving them into place.

Removed: Code that executes pre-built steps from UE4Build have been removed. These build steps should be executed before generating the action graph. So, they have to be done inside of Unreal Build Tool. Running them here causes them to execute twice.

BuildGraph

New: Added an example script for building the Editor and Game targets for a project, and submitting the binaries to source control.

New: Improved error reporting when compiling a C# project with an invalid reference.

New: Added an task for compiling MSBuild projects.

Network Profiler

New: The Network Profile is now 64 bit and the solution has been converted to VS2015 and are now about 6% smaller.

New: Added a checkbox above the connections list that will select or deselect all connections in the Network Profiler.

UnrealBuildTool

Bug Fix: Fixed an issue causing Unreal Build Tool on Mac to not use makefiles which made the time it needed to determine what needs to be compiled and linked longer than on other platforms.

Bug Fix: Fixed some errors encountered when cleaning a target now cause an error code to be returned.

Bug Fix: Fixed the command line arguments -monolithic and -modular to now be parsed correctly.

Bug Fix: Fixed the include paths ending with a backslash that were escaping the closing quote when passed on the command line.

Bug Fix: Fixed post-build steps for plugins not being executed.

Bug Fix: Output subfolders are no longer being appended twice when generating project files if set by a target. This was causing incorrect command lines when launching from Visual Studio.

Bug Fix: Fixed issues where Includes with backslashes were causing an unhandled exception on a background thread in UnrealBuildTool.

Bug Fix: Fixed Version and Module files not being included in the output manifest. This fixes missing version information when using precompiled binaries in UGS.

New: UnrealBuildTool now passes the "/d2cgsummary" flag to the Visual C++ compiler when running with the -Timing argument.

New: Added include and library-related fields to module JSON output.

New: VSWHERE is now used to find the location of MsBuild.exe if available.

New: Improved error handling while generating intellisense project files. It now includes the name of the target being compiled and allows project file generation to continue without it.

New: The Module Rules "Definitions" property has been renamed to "Public Definitions", to make its semantics clearer. A complementary "Private Definitions" property has also been added.

New: UnrealBuildTool now validates that targets don't modify properties that affect other targets. For example, modifying global definitions for an Editor target, where other Editor targets may use the same engine DLLs).

New: Added the build version to the Target Rules and Read Only Target Rules class, allowing it to be read from the target and module rules files.

Changed Launch.build.cs to set private defines for the build changelist in non-formal builds. This allows the version to be set correctly with executables copies to console.

Modular builds on desktop platforms still read the Version file from disk since it’s quicker than compiling a value in. They need the build ID to prevent mismatched binaries.

New: Version files are only generated for non-promoted builds, and are included in the target receipt.

New: Added a proper error message if the user attempts to clean a target through hot-reload, rather than just failing to delete DLLs because they are locked.

New: Added a logging option to format output messages in a form that can be parsed by MSBuild. This prevents errors showing as "EXEC: Error:", and displays them correctly in the error list window.

New: Unreal Build Tool will now use the preferred source code accessor selected in the editor to compile with, if an explicit compiler is not specified in the Project Settings.

Deprecated: Unified command line arguments now use the -Name=Value syntax. The following are no longer supported:

-Module

-ModuleWithSuffix

-Plugin

-Receipt

Removed: UDN documentation source files are no longer included in the generated project files by default.

UnrealGameSync

Bug Fix: Fixed an issue so that the project filename is now included in the Editor build command. The project may not be in one of the .uprojectdirs paths.

Bug Fix: Fixed an issue where the "More Info..." button was not using P4 server override.

New: UProject and UPlugin files are now treated as code changes. This change was made since they can invalidate the Editor target.

New: Added an in-place error panel to show when a project fails to open. This enables the user to retry and have their tabs saved instead of creating a modal dialog.

New: Added a new Blueprint function that supplies a tracking-to-world space transform.

New: Added an option to Motion Controller components to display an optional model (see the Display Device Model option in the component's details). This can be set up to generically use the device model provided by the backing XR system (if the system has one).

New: Added new Blueprint functions to generically enumerate tracked devices, and another to request a model component from the backing XR system (NOTE: at the moment, not all systems support returning a model).

New: Added a "MotionDelayBuffer" service to the engine that hooks into Motion Controller components, and lets programmers render the components at a delayed rate (to simulate latency).

New: The XR Tracking System and Head Mounted Display interfaces have been updated to make handling of pose updates and late update more explicit.

New: Added a new function to convert poses from XR tracking space to Unreal world space.

New: Changed Motion Controller "Hand" property to a more generic “MotionSource” name field, and added a function to query for generic float parameters associated with the Motion Controller.

New: Added new Blueprint node for getting the current VR pixel density.

New: Refactored the Rift dynamic resolution implementation to use the new general Dynamic Resolution State interface.

UPGRADE NOTES

Animation

Animation Blueprints

Bug Fix: We changed the order of how to get the material default value. Previous implementation was to get parent's default value first before itself, which was incorrect, so we fixed it by getting own default value if exists. However, if you were relying on the previous behavior, you're going to see the issue. Make sure you set correct default value for the material instance if it was incorrect.

Bug Fix: If this code executes (it will add a log warning if it does) it could cause problems with deterministic cooking / patch creation as new guids will be generated during cook. Nothing will break but patch sizes could be bigger than they need to be. Re-saving the problematic assets will correct the issue.

Skeletal Mesh

The function name of SkeletalMeshComponent::PostBlendPhysics() has changed to FinalizeAnimationUpdate() for clarification.

Blueprints

New: Step Into has been remapped to the F11 key. The Step Over command is now mapped to F10 instead.

User Defined Structure default values now correctly propagate to blueprints and other user structs the same way that native structs do, which may cause issues if your blueprints were depending on this not happening. If this is a problem you may need to modify your outer blueprint or struct and set some values back to empty or 0.

Core

VisitTupleElements has had its parameters swapped - the visitor is now the first parameter, followed by the tuple (now multiple tuples). Any existing calls will need to swap arguments.

FPlatformAtomics::AtomicRead64() has been deprecated - the int64* overload of FPlatformAtomics::AtomicRead() should be used instead.

The bWasReloaded flag was removed from FModuleManager::LoadModule(), FModuleManager::LoadModuleChecked() and FModuleManager::LoadModuleWithFailureReason() - any calls to it should also remove this flag.

TWeakObjectPtr's constructor was silently casting away const - this has now been fixed and any use of TWeakObjectPtr will now warn if it is not const-correct.

UE4 containers now expect move-aware allocators, which means they need to support the MoveToEmpty(SrcAllocator) member function to move all elements across from SrcAllocator, leaving it empty. Any custom allocators should be updated to add this support and specialize the TAllocatorTraits::SupportsMove trait to be true.

FArchive::Logf() and checkf() macros will now fail to compile if they are not passed a literal formatting string - these should be fixed to use a formatting string like TEXT("%s").

If you have any build scripts that were looking for DevelopmentAssetRegistry.bin or other metadata files you will need to change them to look inside the new Metadata directory.

Code using PLATFORM_COMPILER_HAS_DEFAULTED_FUNCTIONS or PLATFORM_COMPILER_HAS_AUTO_RETURN_TYPES should be replaced with the assumption they are always 1.

ENamedThreads::RenderThread and ENamedThreads::RenderThread_Local are no longer publicly accessible - they should be replaced with ENamedThreads::GetRenderThread() and ENamedThreads::GetRenderThread_Local() respectively.

TVariant::GetType() now returns an EVariantTypes enum class instead of an int32. Any use of this return value as an int32 will need to be changed to EVariantTypes.

Bug Fix: PPF_DeltaComparison has been removed - please remove any use of it from your projects.

Bug Fix: Calls to Align(), AlignDown(), AlignArbitrary() and IsAligned() will no longer compile if passed a non-integer/pointer type. This often fires when trying to align an enum value - it should be explicitly cast to an integer type of the right size.

Bug Fix: Calling FReferenceCollector::AddReferencedObjects() with a container will no longer compile if the container has pointers to forward declared types. You should ensure the types are included before calling this function.

Editor

The debug canvas for stats is always dpi scaled in editor and pie. Any existing tools that directly use viewport positions and size as positions for canvas elements will need to divide out dpi scale using 1/CanvasObject->GetDPIScale().

Bug Fix: Note: This only applies to perforce users NOT using ticket based perforce servers.

The perforce source control login flow will no longer make any calls to the perforce api which results in a password being stored on the local users machine by perforce. We have determined that the security level of this feature is not high enough to continue using it. Users can now expect to have to type in their perforce password each time they open the editor. To work around this users can call p4 passwd directly from a command window to save a password on their machine if they so choose.

Sequencer

'Shared' templates are no longer supported in sequencer. Any previous usage should be easily converted to a shared execution token instead (FMovieSceneExecutionTokens::AddShared()). Such tokens are shared globally, rather than per sub-sequence which makes them more robust for shared responsibilities.

Gameplay Framework

Bug Fix: AActor subclasses that intended to be tick when the tick type is Viewports Only and did not set ShouldTickIfViewportsOnly to return true, but instead overrode TickActor and did not filter on Viewports Only will now need to correctly implement the ShouldTickIfViewportsOnly virtual to achieve this behavior.

Networking

UNetConnection::ClientWorldPackageName is now a private member and should accessed through the available Get/Set methods.

Bug Fix: The net.UseAdaptiveNetUpdateFrequency console variable is now disabled by default, since it was causing replication issues in many projects. If you want to keep using this feature, you may enable it in your project's configuration files.

Rendering

We changed the Vertexbuffer layout from AoS to SoA because after this change we can bind the Input Attributes via SRV and load them in the shader directly (also from compute). Before this change it was very difficult and involved manual interpretation of the Raw Data in the Shader. We recommend everyone to follow this route and change their Vertexbuffers as we probably will deprecate mixed AoS Vertexbuffers in the Future.

Tube shaped point lights will be automatically rotated to compensate for this change. Dynamically generated point lights with a source length will need to have a 90 degrees pitch added to their orientation.

Inside Sequencer->Render->CompositionGraphOptions
Set Output Format to "Custom Render Passes"
Set Include Render Passes to "Final Image"
Set Capture Frames in HDR "On"
Set Capture Gamut to "Linear"

UI

UMG

Bug Fix: If a game was depending on this functionality to keep things loaded, change your blueprint to set the return value into a variable, that will keep it hard referenced normally

XR

Deprecated the MotionController component's EControllerHand 'Hand' property and replaced it with a 'MotionSource' name. To support the same functionality, use names corresponding to the old enum values ("Left", "Right", etc.).

vr.oculus.PixelDensity.adaptive has been removed. Dynamic resolution needs to be enabled using the general engine system now.

PROGRAMMING UPGRADE NOTES

AI

Bug Fix: Fixed a bug in UAISense_Sight::UnregisterSource that resulted in sources being removed not getting removed from the ObservedTargets collection.

Debugging Tools

Redone how visual log is using categories. Now it's using FName rather than FLogCategoryBase to indicated log category. All UE_VLOG macros have been updated. This change made it possible to actually vislog things using blueprint functions.

Navigation

Bug Fix: Fixed navmesh not loading properly in PIE when owning world has been duplicated-for-play

Animation

Bug Fix: Now when meshes are set to EMeshComponentUpdateFlag::AlwaysTickPose, we optionally kick of a task to perform parallel update only (no evaluation). Previously we needed to run this on the game thread as if we skipped evaluation we did not run a worker task.

Audio

New: The new Microphone Capture Component enables feeding audio directly into a game for use with the Audio Engine and for driving in-game parameters. Limitations:

Only implemented on PC.

Only for local client microphone capture, not connected to VoIP system.

Core

Any usage of FStartupPackages in project code should be removed

"Native" (now called “FNativeFuncPtr”) is now a function pointer that takes a UObject* context, rather than a UObject member function pointer. Use “P_THIS” if you were previously using the “this” pointer in your native function.

FTickableBaseObject::GetTickableType can be overriden and returns an enum value of either Conditional (default), Always, or Never.

Tickable Never objects will not get added to the tickable array or ever evaluated.

Tickable Always objects do not call IsTickable and assume it will return true.

Tickable Conditional objects work as in the past with IsTickable called each frame to make the determination whether to call Tick or not.

FTickableObjectBase::IsTickable() is no longer a pure virtual.

To match the change in functionality EResourceSizeMode::Inclusive was changed to EstimatedTotal. If any of your code was using Inclusive, you need to decide whether you want to change to EstimatedTotal or Exclusive.

The ResourceSize asset registry tag has been removed as it was inaccurate. To get an accurate estimate, you must load the object and call GetResourceSize().

Bug Fix: Cleaned up delegate definitions in UObjectGlobals.h and moved several to be WITH_EDITOR. If you were using those definitions in a game you will need to wrap your use in WITH_EDITOR.

Editor

Being an early feature, some Editor UI buttons do not work during playback of demos.

The debug canvas for stats is always dpi scaled in editor and pie. Any existing tools that directly use viewport positions and size as positions for canvas elements will need to divide out DPI scale using 1/CanvasObject->GetDPIScale().

RenameAssetsWithDialog() is often recommended in places where RenameAssets() was being used.

The SizeMap and ReferenceViewer have been merged into the AssetManagerEditor plugin so they can share the data needed to show cooked sizes.

Gameplay Framework

C++ Header cleanups for Actor, Pawn, Character, Controller, and PlayerController. Marked several fields as private that were accidentally exposed in 4.17.

Projects using this plugin are strongly encouraged to add a project specific subclass of UDataValidationManager. Any objects that require validation should override IsDataValid.

Overriden versions of USignificanceManager::Update will need to change signature to receive a TArrayView instead of const TArray&.

Networking

Bug Fix: Programmers using HasPendingConnection() on a listening FScocket should consider using the new WaitForPendingConnection() function instead, which prevents wasting CPU cycles due to polling. This change supported a change to the behavior of the FTcpListener constructor's InSleepTime parameter which now specifies the maximum time to wait for a connection in its polling loop. It now defaults to 1 second, but using a value of 0 will restore the previous polling behavior.

Online

This Online Presence Test requires that the testing user to have friends and be connected to the platform.
Usage is "online test presence [OPTIONAL ID]". The ID passed should be an arbitrary non-friend. If no ID is passed, the arbitrary lookup test is skipped. This test does wait for presence updates for about two minutes, after this time if no updates are received, the harness will mark the test as a failure.

Rendering

The STRONG_TYPE #define now seen in UE4 .usf/HLSL is actually hlslcc's "invariant" keyword applied as a type-qualifier to a Buffer<>/RWBuffer<> type - only valid when using Metal which exports this through ILanguageSpec and #define'd out for everyone else. When this is applied the MetalBackend will emit a "raw" buffer whose type must match the shader exactly, which avoids the overheads of Linear-Textures & Function-Constants.

Vertexbuffer Objects now bind their SRVs directly instead of filling out a StreamDescriptor. Care must be taken when the Vertexfactory is initialized before the VertexBuffer as the bound SRV will become invalid if the underlying vertexbuffer is re-created. We do not support late binding of the data anymore.

Mobile Rendering

Removed cvar "r.AllReceiveDynamicCSM" and primitive flag “FPrimitiveSceneProxy.bReceiveCombinedCSMAndStaticShadowsFromStationaryLights”. Added “FPrimitiveSceneProxy.bReceiveMobileCSMShadows”, which now applies to both stationary and movable lights and defaults to on.

Tools

UEdGraphPin::PinCategory, UEdGraphPin::PinSubcategory, and UEdGraphPin::PinName are now stored as FName instead of FString.
UEdGraphPin::CreatePin has several simplified overrides so you can only specify Subcategory or SubcategoryObject or neither.
UEdGraphPin::CreatePin also takes a parameter bundle for reference, const, container type, index, and value terminal type rather than a long list of default parameters.
Material Expressions now store input and output names as FName instead of FString.
FNiagaraParameterHandle now stores the parameter handle, namespace, and name as FName instead of FString.
Most existing pin related functions using string have been deprecated.

UI

Slate

Renamed FTextBlockLayout to FSlateTextBlockLayout to reflect that it's a Slate specific type

XR

If you maintain a VR or AR plugin, you will have to remove your RefreshPoses() override and move any late update functionality to OnBeginRendering_RenderThread/GameThread(). Alternatively, if your plugin does not support late update, you can remove RefreshPoses() completely and override DoesSupportLateUpdate(), returning false.

Added two methods to the IXRTrackingSystem API - GetTrackingToWorldTransform() and UpdateTrackingToWorldTransform(). GetTrackingToWorldTransform() is expected to return an transform that will convert poses from GetCurrentPose() into world space. UpdateTrackingToWorldTransform() is meant for users to override the transform since the anchor between the two spaces is controlled by the project.

MotionControllerComponents' 'Hand' property is no longer available. Instead, switch to using the new 'MotionSource' field with text names matching the old enum values ("Left", "Right", etc.). For ease of use, "Left" and "Right" are predefined in FXRMotionControllerBase (as LeftHandSourceId & RightHandSourceId).

Replaced EControllerHand parameters in the IMotionController API with generic "source" name parameters. To handle backwards compatibility, use name values corresponding to the old enum ("Left", "Right", etc.).

Added two new functions to the IMotionController API - EnumerateSources() & GetCustomParameterValue(). Use EnumerateSources() to return a list of the supported devices (replaces the static EControllerHand enum). GetCustomParameterValue() can be used to expose float values associated with the motion device (such as FOV with cameras, etc.).

VR

The GetHMDDistortionEnabled method on IHeadMountedDisplay how takes a single argument of type EShaderPath. If you maintain a custom HMD plugin, you will need to update your method signature.

DEPRECATIONS

Automation

UFunctionalTestingManager::RunAllFunctionalTests has dropped an unused parameter. The original version is now deprecated.

Core

Removed the PLATFORM_HAS_64BIT_ATOMICS macro, as it is always 1.

Deprecated the VARARG macros and replaced them with variadic templates.

Editor and Tools

Deprecated Material Baking functionality inside of the MaterialUtilities module. Users should use the functionality provided by the Material Baking module instead.

Gameplay Framework

Add APlayerController::ClientReturnToMainMenuWithTextReason to support an FText reason parameter so that the message can be localized. Deprecated APlayerController::ClientReturnToMainMenu.

Rendering

The Editor is now only supported on Feature Level 5 platforms. Feature Level 4 platforms (D3D10, OpenGL3) are no longer supported.

Materials

Material Layer experimental support feature, Shared Input Collection and associated material graph nodes have been removed. See the forum feedback thread for more insight.

Tools

UnrealBuildTool

The bOutputToEngineBinaries flag has been removed from the target rules. The output directory for targets is always determined by the location of that target.

XR

The IHeadMountedDisplay::GetHMDDeviceType() method has been removed as it was not extensible enough. Code that needs know which XR plugin is currently active should use IXRTrackingSystem::GetSystemName() instead.