4.4 Release Notes
Unreal Engine 4.4 has our first preview release of Unreal Motion Graphics, our new UI design and scripting toolset. Also in this version Behavior Tree Editor, our AI logic tool, is enabled by default and ready for everyone to use! You’ll also see many improvements to the Persona Animation Editor and Paper 2D. Support for Android and iOS platforms is even better now, and C++ compiling is faster too. Many new Marketplace releases are ready for 4.4! We’re shipping the Landscape Mountains sample, Matinee Fight Scene, Mixamo Animation Pack, and new Content Example maps for Paper 2D and Networking. Be sure to hit up the Marketplace to grab these new samples - they are free to subscribers.
We would like to extend our gratitude to all of the amazing developers who contributed code to the 4.4 release.
Alex Silkin (alexSilkin), Allegorithmic, Joe Riedel (joeriedel), Joel Riendeau (joelriendeau), Kevin Rushin (Malfate), Marc Kamradt (MarcKamradt), Martin Palko (MartinPalko), Michael Delva (Zoubi), Pablo Zurita (pzurita), Rama (EverNewJoy), Robbie Newman (Ehamloptiran), Robert Khalikov (nbjk667), Robert Wallis (robert-wallis), Roy (Shammah), Scott Michaud (ScottMichaud), Sebastien Rombauts (Srombauts), Stephen Whittle (stephenwhittle), Steve Anichini (solid-angle), thk123, Wesley Hearn (wshearn).
**Major New Features **
New: Unreal Motion Graphics (UI Editor Preview)
Unreal Motion Graphics (UMG) is our experimental new interactive UI design and scripting tool!
The new Widget Editor tool lets you layout UI on an interactive canvas and create and preview animations in real-time. UMG integrates deeply with Blueprints, so you can easily wire up events to trigger gameplay changes. UMG is built on top of the Slate UI system and inherits many awesome benefits such as a large array of UI widgets and a rich set of features.
Unreal Motion Graphics is currently ’
’ as of the 4.4 release. It is not fully production-ready and things may not be backwards compatible, but we would love for you to check it out and send feedback! To access UMG, enable it in the Experimental section of the Editor Preferences.
Free Marketplace Content
- Sail through a vast mountain range via hang glider in this showcase built with World Machine and decorated using UE4’s foliage and material system. Check out just how easy it is to create a high-end realistic landscape with beautiful mountain ranges using UE4 and Landscape Mountains!
Matinee Fight Scene
- Learn how to create stunning cinematics just like the pros by digging into this fight scene built with Matinee. From animated characters to VFX, you’ll go hands on to see how everything is controlled within the Editor. Get started with our tutorial and some simple Matinee how-to’s.
Mixamo Animation Pack - Mixamo brings you a free Character and Animation Pack for use in your project. Containing 15 characters with animations, prototyping your game has never been easier!
New Paper 2D Content Example Map - Covers several topics related to 2D game creation including: Sprite creation and editing via the Sprite Editor, Flipbooks which enable you to create animated 2D assets using Sprites and keyframing, how to control Flipbooks with Blueprints, adding physics to 2D assets, and how to create the classic low resolution pixel look for your Sprites. Check out the companion Paper 2D documentation for more info!
New Networking Features Content Example Map - Illustrates how to implement network functionality entirely through Blueprints. The examples in the Replication section showcase the methods of properly communicating information between Server and Client as well as when to employ the different techniques. The examples shown in the Relevancy section demonstrate how to handle cases where an Actor becomes relevant, such as when a player joins an existing game in-progress. Browse the documentation while you go!
Behavior Tree Editor
**New: Behavior Tree Editor is now ready to use!
Behavior Tree Editor allows you to edit AI state logic in an interactive graph editor. We’ve been making steady improvements to the tool for months now, and we think it’s ready for everyone to use in their games!
AI Execution Order
Behavior Tree Nodes now have indicators to show the order in which they will be executed within their parent scope. Hovering over these indicators also highlights indicators at the same level in the tree:
When debugging, the indicators display the overall order within the tree:
Descriptive Node Tooltips
All built-in nodes now have tooltips explaining their functionality. Hover over a node to see what it does.
New: Clear Coat Shading Model
The new Clear Coat shading model makes it easier to design materials that have a translucent coating on top.
(Note: the flecks were added in the material editor and are not part of the shading model.)
This can be used for multilayer materials where a translucent layer of film is over the surface of a standard material, either a metal or nonmetal. Specifically it was designed to model this second class of smooth colored films over a non-colored metal.
Examples included acrylic or lacquer clear coats, and colored films over metals such as soda cans and car paint.
Two new parameters are exposed:
Clear Coat. Amount of clear coat layer, 0 acts like the standard shading model, 1 is the full clear coat model. This is useful for masking.
Clear Coat Roughness. Roughness for the clear coat layer. Our approximation is accurate for small values. Very rough clear coat layers are supported but won’t be very accurate to their real world counterparts.
New: Tube Lights in Lightmass
The Lightmass raytracer now supports capsule-shaped point lights. Thanks goes out to a
community submission that inspired these changes!
Paper 2D Sprite Dicing
Paper 2D Sprites can now be diced! This separates out translucent/masked regions from opaque ones, reducing the GPU cost of rendering them.
To use this feature, set the render geometry type to Diced and make sure that you have the alternate material set to an opaque material on the asset.
**Improved Animation Editing Workflow! **
- Streamlined Persona UI. We’ve Improved and simplified the layouts for every single mode in Persona.
- New toolbars! Each mode in Persona now has a toolbar containing commonly used operations.
- Animation Thumbnails. Your animations now display beautiful thumbnails in the Content Browser!
- Animation auto-preview. You can now preview animation sequences by hovering over the asset in the Asset Browser.
- Save All Animations. Added the ability to “Save all Animation Assets” to the File menu in Persona.
- **Select Hidden Bones. ** You can now select a bone in the viewport when it’s hidden (mesh must have a physics asset).
- Inline Help Links. You can now easily “jump to documentation” for each animation editor type using the new help links to the right
- **Mesh LOD View. ** Mesh Detail View now displays LOD settings, including the materials for each LOD.
- Animation Import Help. Any errors that occur while importing animations from FBX files will now have detailed help descriptions in the Message Log.
- Shift+Click can now be used to expand/collapse hierarchies in the Skeleton Tree.
- The Display Info in the Persona viewport has now been simplified to only show essential information.
- A helpful error message now displays when an invalid name is used for a Montage slot.
- Animation “Retargeting” option is now only shown in the Skeleton Tab.
- The zoom feature in the Animation Editor now zooms in based on current mouse position.
- Finally, all AnimGraph nodes that reference assets now support double-clicking to open the asset for editing.
New Blueprint Node: Set Members in Structure
This node lets you easily assign values to variables in your user-defined structure. You can select which struct variables are displayed using the node’s Details.
New Blueprint Node: Set Timer Delegate
This node makes it easy to run a custom event at a specific interval of your choosing. You can optionally tell the event to be called repeatedly using the “Looping” check box.
A huge number of improvements have been made to mobile workflows, including **in-editor tutorials **to help with device provisioning. New graphics features are available on mobile, such as instanced foliage. The Mac version of Unreal Editor is now more responsive, has an **improved menu **experience, and dozens of other changes. Android supports even more devices, and you can now access **in-app purchase **features from your Blueprint scripts!
See the rest of the changelist below for a detailed list of improvements for your favorite platforms!
New: Snap Actors to Surfaces!
There is a new button on the transform toolbar which allows you to project actors into the world as you drag them. This can be really useful for placing objects onto complex geometry.
The snapping works in one of two ways, either by projecting through the drag plane (if you are dragging in a constrained plane), or by projecting the actors into the world in screen space (when dragging in all three axes).
New: Simple 2D Physics Constraints
The engine now supports easily constraining 3D physics objects into a 2D plane. This can help when making 2D games like side-scrollers.
The setting can be applied per object, or project-wide by changing the project physics settings.
Ragdolls will by default only constrain the root body. This allows limbs of the ragdoll to move in 3D, while still keeping the entire asset in a 2D plane.
New: Custom Friction Modes
Physical Materials now support different friction modes!
By default we take the average friction coefficient when two bodies hit.However,
this can be problematic for cases like ice where negative and positive coefficients are needed to average out to 0.
Different modes are useful for different types of effects. In the case of ice you would likely want either Multiply or Min with the ice material’s friction set to 0.
The friction mode can be set project wide or overwritten per physical material.
New Quick Start Directory - Jump straight to all quick start guides from the Getting Started docs or from the editor!
FBX Error Message Improvements
Content Example Directories for:
Windows-to-iOS, Blueprint Only
**Editor and Tools
New: Navigation paths can now auto-recalculate on their own!
New: You can now drag and drop to quickly reorder levels in the Levels Browser
New: Asset editors docked into the main editor area will now restore to that area when next re-opened.
New: Added new material workflow for Cascade. Named materials can now be added to the system which can be referenced by each emitter. These materials can be accessed externally in BPs and code via their name, and can be overridden and so forth.
New: Added ability to provide rich tooltip documentation links in many places throughout the editor.
New: Live Preview button in the material editor toggles the compilation of the preview material for all edits. When off, the material will only be compiled when Apply is pressed.
New: You can now customize asynchronous loading time limit and behavior in Project Settings.
New: Content Browser now resets search filter when syncing asset to content browser.
New: Moving actors into folders maintains their parent/child hierarchy where appropriate.
New: Added surface count and material name to the details panel for selected BSP surfaces.
New: Added the ability to flag custom events as CallInEditor and extended the main editor actor details view.
New: Actors now default to being aligned to Z-up if they are placed on the background.
New: Can now control tiling via the Texture Tiles property as well as the Tiling Distance.
New: World Composition context menus are more consistent between different views.
New: Level colors are once again shown in the Levels Window
New: MeshMerging tool improvements
Now merges all available UV channels.
Now has the ability to specify hard limit for lightmap atlas size.
Supports merging painted vertex colors.
- New: More sub-editors such as Cascade and Matinee will now report diagnostic analytics, to help us improve these tools
- Live Editor: When new Actors spawn (or re-spawn) they will be immediately initialized with the latest LiveEdited values from the current session.
- Fixed selecting large amounts of actors freezing the editor for a long time.
- Level streaming uses incremental components registration, currently up to 10 components per iteration, number can be changed in the project settings.
- Modifying the existing static mesh import options enables a button which allows the user to reimport.
- Class viewer no longer crashes when it finds zero results.
- Modified struct customization for FMatrix and FTransform to work in the same way as the component transform details customization.
- New: The cancel button now appears on the feedback dialog while autosaving.
- Restored navmesh error message on HUD when static navmesh is outdated.
- Removed LocalToWorld scaling when calculating tangents for instanced mesh particles and skinned meshes. Prevents artifacts mesh is being scaled.
- Removed undo/redo transactions from importing normal maps
- Removed the spurious ‘set brush’ transactions when placing geometry.
- Toggling Level visibility no longer forces layer visibility.
- Fixed custom navlink ID assignment for static navmesh (without rebuild at runtime).
- Fixed inconsistent navmesh generation from sublevel’s geometry.
- Fixed navigation relevancy update not being propagated from child components.
- Fixed bug in ribbons that would break spawning with other particles as their source.
- Fixed a crash in the Content Browser when dragging the root folder.
- Fixed issues with ‘/’ and ‘\’ being allowed in project name when creating new project.
- Content Browser: Moving all parent folders to child folders is now disallowed.
- Fixed an issue with user default array serialization in Editor Preferences which caused duplicated values in the UI.
- Fixed an issue where resetting Selection Color (and probably other properties) to default in the Editor Preferences would not update the UI or viewport until the editor was restarted.
- Fixed visibility tool not showing the visibility layer as its target.
- New: Added Landscape actor icon in scene outliner.
- New: Added manual rotation option to Landscape editor alpha brush.
- New: Support exporting terrain with holes to FBX meshes.
- ALandscapeProxy::DataLayer has been renamed to VisibilityLayer.
- FLandscapeToolSet has been removed.
- Fixed issue for adding a component near another component with XYOffset using retopologization tool used.
- Fixed for deleting/adding component problem, where deleted component or neighbors have LODBias/ForcedLOD case.
- Fixed Landscape Spline Control Point Mesh mobility to be static.
- Fixed foliage “fill” tool on spline meshes.
- Fixed Landscape spline undo/redo crashes (again).
- Fixed bug in alpha brush that could read off the +X/+Y edges of the supplied texture.
- Fixed crash when using foliage reapply tool for Landscape layer when layer name is set to “none”.
- Fixed Lightmass lightmap build for LOD Biased components.
- New: Delete and Rename Blackboard keys now work again from right-click menu.
- New: Behavior tree blackboard decorator can request execution when observed key changes its value.
- Fixed: Behaviour Trees are now correctly focused on double-click
- Fixed an issue with the Behavior Tree window getting input focus.
- Fixed behavior tree loop decorator affecting restarts.
- Behavior tree tasks will default to InProgress when ReceiveExecute or ReceiveTick event is implemented.
New: Can now create BP variables for types that directly inherit from UObject.
New: Added BP-callable accessors for spline mesh component values.
New: Decal sort order can now be set via Blueprints using SetSortOrder.
New: Added a Blueprint log warning for BPs that are migrated during map loads so problems between stale BPs and maps can be detected more easily. It also adds an editor option under the main editor save\load preferences to mark any migrated BPs as dirty in an attempt to aid migration problem resolution caused by maps that have been saved after BPs have been migrated but the BPs have not been saved.
New: Can now deprecate BPs using the Blueprint properties.
New: Enabled dynamic class loading in the class picker dialog.
New: Patched an issue where item expansion states in the dialog were not preserved when a dynamic load occurred.
New: Functions and macros now display their category in the My Blueprint panel.
New: It is now possible to set a default scale for actor-based Blueprints by editing the root component’s scale in Components mode within the Blueprint editor.
New: Added new tooltip text using tooltip metadata from C++ node classes and BlueprintDescription text for BP node classes.
New: Added new widget overlay system for graph panels, designed to allow more flexibility than the current brush-only implementation.
New: The name collision detection code is now more aggressive when duplicating curves/timelines to prevent a problem where duplicate names could emerge and cause asserts.
New: Old widget BPs should load in 4.4, but several properties will likely be reset to their defaults.
New: This release introduces the ability to mark a Blueprint custom event as a utility function that can be called on actors in the editor.
The idea is to provide the flexibility of Blueprints to perform management/peripheral tasks on actors or even just to provide a form of in editor preview on Blueprint functionality.
Custom event functions can be marked as being available to this functionality by ticking on Call In Editor in the Blueprint details panel. The UI to call the function is located in the main details panel in the Blutility section, and is populated from the currently selected actor Blueprint.
- New: Undo/Redo support for deleting unused variables.
- Blueprint overlap queries also check async scene.
Blueprint scene queries already check both sync and async scenes. It turns out the overlap query for Blueprint was not doing this. We’ve fixed this, but it’s possible some behavior will break if you’re relying on the old inconsistent behavior.
- Modified the Blueprint details panel to mark the Blueprint as dirty when changing a custom event’s replication setting.
- Redressed a regression in the Blueprint editor in which shortcut keys became disabled after selecting nodes.
- Type coercion now works off all wildcard pins in call array function nodes, not just the Target Array pin.
- Replaced the placeholder icon for the call in editor events with the final version.
- Removed macro libraries from the variable type dropdown in the Blueprint editor.
- Removed FUNC_Exec flag from all Blueprint-generated functions. This prevents some functions from being called by simply typing their name in the console. If you’d like to directly call an event from the console, please use the following syntax: ke * MyEvent, or replace the * with the name of the instance you want to call the event on.
- Fixed infinite loops in Blueprint code repeatedly spamming alert boxes.
- Fixed enum node load issue, that was causing the enum to become unselected after reloading.
- Fixed Blueprint circular dependency issues (issues where one Blueprint relies on another that references that original blueprint).
- Fixed an ordering issue with rerunning Blueprint construction scripts which was breaking attachments on level load.
- Fixed constant values as input to SpawnActorFromClass and AddComponent nodes, can now be assigned without creating a variable in your blueprint.
- Fixed crash that could occur when collapsing and subsequently expanding nodes that included functions or other collapsed graphs.
- Fixed crash that could occur when loading Blueprints that had soft circular dependencies.
New: Major progress toward parallelized renderer (can be previewed with “r.RHICmdBypass 0” console command.)
New: Added rich tooltips to material nodes!
New: Added compression and sampler types for distance field fonts.
New: Added option to TextRenderActor that allows text to render unmodified when using debug visualization modes such as Level Coloration. This tickbox is located under the Rendering category in the details panel and is called Always Render As Text.
New: Added exports to various texture classes to allow subclassing in different modules.
New: Added Texture property to change maximum resolution limitation (MaxTextureSize in Compression section, Advanced view). This is useful especially for HDR cubemap, which is limited by 512 (hardcoded for performance).
New: Changed default rotation for SpawnDecalAtLocation to point downwards.
New: Skylight LightColor and Intensity can be animated by Matinee now.
Cascade Mesh emitter improvements
Mesh emitters that don’t use PSA_Velocity or PSA_AwayFromCenter had their rotation rate increase over time, ending up with them spinning uncontrollably after a few seconds, and order of operations between
Orientation and Scaling of particles wasn’t as expected. These problems are fixed with this update.
Additionally, MediumDetailSpawnRateScale has been deprecated and replaced with QualityLevelSpawnRateScale. This new value is tied to the scalability settings’ effects quality level, and results in the spawn rate being multiplied by QualityLevelSpawnRateScale for every reduction of effects quality level from Epic. For example, if an emitter’s spawn rate is authored to 100, and its QualityLevelSpawnRateScale is 0.5, reducing effects quality to High will result in a spawn rate of 50, going to Medium will set spawn rate to 25. Setting QualityLevelSpawnRateScale to 1.0 results in no change across effects quality changes.
- Particle effect meshes now adhere to the view mode correctly
- Beams now pass in a second UV set which covers 0 to 1 in U across the length of the beam. UV set 0 now tiles according to the tiling parameters in the typedata module.
- Fixed issue where turning on GBuffer Hints in the main viewport crashes the Editor.
- Extensibility: UMaterialBillboardComponent class is now exposed via ENGINE_API.
- Batched meshes are now cleared when flushing line batchers.
- Changing an MID’s blend mode to masked now works correctly.
- Moved the blend separate ARB functions to optional. Added extension check for the GL_ARB_draw_buffers_blend string.
- Fixed negative colors from SkyLight computations in base pass.
- Fixed compilation error for materials using world space normals and refraction.
- Fixed issue where adding a tessellated material to a landscape was causing heavy spiking.
- Fixed Distance Field AO with cameras that constrain aspect ratio
**Gameplay and Framework
New: Added GameMenuBuilder module for quick creation of simple menus.
New: Added functions to detect if a mouse is connected during runtime.
New: Added shadow option to debug text and cleaned up the DrawText function in HUD.
New: Added new functions GetInstanceTransform, UpdateInstanceTransform, GetInstanceCount, RemoveInstance and SetCullDistances to InstancedStaticMeshComponent. These are also callable from Blueprints.
New: Added latent Blueprint node that allows dynamic manipulation of force feedback based on game events.
New: Added possibility to log histogram-like data to visual logger and extended LogVisualizer tool to display that data as 2D graphs onscreen.
New: Added support for tutorials to be able to open IDE at a given line.
New: Added support for tutorials so they can open or highlight an asset.
New: Added support to change the filter on an asset picker after it has been created.
New: Added support for setting object properties by FAssetData via PropertyHandles.
New: Added CameraActor 'AutoActivateForPlayer’option, so cameras placed in a level can automatically be linked to a PlayerController.
Added Blueprint events for Actors when they start and stop being the viewtarget for a PlayerController (OnBecomeViewTarget / OnEndViewTarget).
Native C++ events for these (BecomeViewTarget / EndViewTarget) already existed and now trigger the BP events.
Changed the order of calls to EndViewTarget / BecomeViewTarget from the PlayerCameraManager, so that the End event occurs first on the old target, followed by the Begin event for the new one (previously it was reversed).
- New: Allowed static components to move during RerunConstructionScripts for a level that has not been fully added to the world, and add threshold to position/rotation equality checks to prevent unneeded updates to component position.
- New: Any previous scale value other than (1,1,1) that was set on “non-native” root components (i.e. not created in C++) will be auto-reverted back to (1,1,1) on load.
Previously, the default scale value for non-native root components was being ignored at construction time.
As a result, we’re implicitly reverting those values on load to ensure that both existing instances and new instances will continue to appear at the same scale as they did prior to the update.
- New: Bind functions for Axis, AxisKey, and VectorAxis added to InputComponent that do not take a delegate to facilitate binding the axis for the purposes of using get value functions.
- New: Created tutorial for Blueprint-based first-person template.
- New: Created tutorial for code-based Rolling template.
- New: Characters walking on SkeletalMeshComponents now maintain relative position and rotation to the bone they’re standing on, moving over animated bones rather than staying in place relative to mesh origin.
- New: Dynamic parameters now copy their parameter names from pre-existing dynamic parameters.
- New: Editing transform defaults in “Components” mode within the Blueprint editor has been slightly changed.
Previously, location, rotation and scale were all exposed, but only for the default scene root as well as for any root component created in Components mode.
After the update, location and rotation are now hidden, and scale is now exposed for both “native” (i.e. created in C++) and “non-native” root components.
- New: Force feedback now supported on PC for XInput devices.
- New: Force feedback can now be disabled via the PlayerController.
- New: Full-size screenshots are now displayed in a resizable window.
- New: Get Display Name now available in Blueprints for class variables.
- New: InstancedStaticMeshComponents now set the FHitResult.Item property with the index an instance hit by a collision event. This can be used with the above functions to remove a specific instance and replace it with a real StaticMeshComponent to provide interactivity with Foliage or other behavior.
- New: Introduced UNavigationPath for BP usage - not much one can do with it just yet.
- New: Instigator can now be set as part of Spawn Actor Blueprint node. If the Instigator is not explicitly set via a wired in pin, the Instigator will automatically be based on the calling context. If Spawn Actor is called from a Pawn context, the Pawn will be the Instigator. If Spawn Actor is called from an actor context, the actor’s Instigator will be the Instigator.
- New: PawnActions have been introduced in the AIModule. Early access level currently.
- New: The Curve Table editor now displays data in a grid widget.
- New: Touch events (but not touch over events) are now enabled by default on Player Controllers.
- New: VisLog file name can be now customized by game-specific code.
- New: VisualLog is now acquired as a reference rather than a pointer.
- A level’s transform is no longer retained when loading a sublevel after having it’s persistent level loaded.
- Custom splash screen now displays correctly.
- Deprecated AActor::GetControlledPawn() to avoid confusion with AActor::GetPawn()
- Disallowed moving actors to another level if any actor is referenced by an open Matinee.
- Diffed assets no longer appear in the asset picker.
- DestroyApplication virtual function is properly called for the F<Platform>Application.
- Documented all class metadata tags.
- Ensured package metadata is loaded when trying to use it.
- Ensured that rendering resources have been released when a level is deleted.
- FSlateApplication::SetJoystickCaptorToGameViewport now captures all joysticks.
- Hid FNavigationPath’s properties from public access.
- ICU initialization provides better diagnostics on failures.
- Improvements and fixes to LogVisualizer tool: log item double-click reaction to show location in a world, filters for log items and 2D graphs, performance optimizations.
- Improved display (or not) of edit boxes next to pins on Blueprint nodes.
- Improved support for OneSky localization services by adding source file information as an extracted comment and a reference comment.
- Improved localization gathering so that it doesn’t gather culture invariant text.
- Improved localization gathering so that culture invariant text doesn’t flag its containing archive or package as requiring localization.
- Improved localization gathering so that warnings and errors aren’t reported for text that isn’t gathered.
- Improved whitespace check when flagging packages/archives for localization gathering based on text contents.
- Improved navmesh projection precision.
- Made UNavigationComponent’s path recalculation is being done by the path itself now.
- Pawns without a PawnMovementComponent can still use AddMovementInput() and read the results.
Moved ControlInputVector from PawnMovementComponent to Pawn. There are “internal” methods on Pawn for use by the component to access/modify it.
Added movement input accessors to Pawn: GetMovementInputVector(), ConsumeMovementInputVector(), IsMoveInputIgnored().
Exposed PawnMovementComponent::IsMoveInputIgnored() to Blueprints.
- Removed inappropriate menu options for Shooter Game sample when running PIE.
- Removed path variation feature (unused and broken).
- Revised text chat in Shooter Game sample. Improved visibility flags and stopped focus being changed on clients.
- Revised the 2D side-scroller C++ template and reduced its Blueprint dependency.
- Revised Platformer game menus to use new GameMenuBuilder.
- Several revisions to Vehicle sample game to improve multiplayer support.
- Widened tooltips (primarily) so that class comments do not get odd wrapping behaviors.
- Fixed EQS (Environmental Query System) incorrectly timeslicing.
The update was subtracting the time remaining for all prior steps after each step rather than subtracting the time remaining based on the time it took to execute the current step.
- Fixed crash in Shooter Game sample.
- Fixed crash in GetMousePosition() if Player is null.
- Fixed navigation links’ direction RightToLeft issue.
- Fixed navigation path’s checking if it intersects with a give FBox.
- Fixed Functional Testing crashing in game mode.
- Fixed project collision settings (custom profiles/channels/object types) not being saved in the DefaultEngine ini.
- Fixed a crash that could occur when starting PIE with an open, uncompiled Blueprint.
- Fixed attachment issues with Blueprint components during RerunConstructionScript
- Potentially fixed a crash that reportedly occurred while loading a few unique Blueprint assets that were missing a root component.
- Various fixes to SplitPin feature.
Characters that are falling and impact geometry with an unwalkable normal can check for a valid landing spot and land if possible.
Running and jumping up on ledges is more fluid. Previously the character would “float” for a bit before landing, which would lose velocity.
Added virtual ShouldCheckForValidLandingSpot() for custom behavior. Base version returns true when hitting the edge of geometry with the lower portion of the capsule.
- Bug fixes for Character movement on rotating surfaces, especially for networking.
Changed some MovementBaseUtility functions to conform to engine conventions (“location” rather than “position”).
Changed AActor::PostNetReceiveLocation() to also include rotation (now called PostNetReceiveLocationAndRotation).
Fixed incorrect rotation delta computed in UpdateBasedMovement().
Fixed replicated rotation overwriting relative rotation for Characters.
Fixed simulated proxies not matching the server location when the velocity reached zero. Proxies would move forward one more frame in that case.
Fixed bIgnoreBaseRotation being ignored for simulated clients. Absolute rotation is sent in this case instead.
- Fix issues with ApplyVelocityBraking incorrectly accumulating changes when timestep is over the threshold (issue when framerate is low)
- Prevent boosting up slopes when lower portion of capsule impacts something while falling.
Player collision now feels more natural and less like a capsule.
Added HandleSlopeBoosting() to enable easier customization of this behavior.
**New: Game Instance objects (persistent gameplay data)
- New: The Game Instance is a transient object that has a lifetime that exists across level transitions.
- It is game extendable (set in the Maps & Modes section of the Project Settings) as both a C++ and Blueprint class.
- It can be used to store cross-level data, manage the game’s application state, and act as an owner for objects that you would like to exist across the entire game session’s lifetime.
- The GameInstance exists on both the client and the server, however, because it is a UObject there is currently no replication of data between the instances.
New: Added support for dicing sprite render geometry, separating out translucent/masked quads from opaque ones (WIP).
Sprites now have an alternate material and the ability to have a second render section defined using that material (only used for diced geometry right now, with a convention that the alternate material is the opaque one in that case).
Adds a new ESpritePolygonMode::Diced value, valid only for render geometry (treated like SourceBoundingBox for collision).
Adds opportunistic triangle merging for both collision and render geometry when there are multiple source polygons.
- New: Added support for casting 3D shadows from sprites (FPaperRenderSceneProxy now obeys CastShadow from the source component).
- New: Added support for drag-drop reordering of keyframes in flipbooks.
- New: Added OnFinishedPlaying delegate to UPaperFlipbookComponent, called whenever a non-looping flipbook finishes playing (reaches the end or beginning, depending on play direction).
- New: Added snap to pixel grid option for pivots (enabled by default on new content), and enforced snap to pixel grid for the source rectangle (always).
- New: Added a Paper 2D demonstration level to Content Examples.
- New: Added support for replicating state of flipbook components.
- New: Added support for importing tile maps and tile sets exported from Tiled 0.90 as JSON.
- New: Added DLL export to UPaperSpriteComponent and APaperCharacter.
- New: Added support for Texture Packer 3.5 UE4 export option.
- New: Added FPaperSpriteSceneProxy to pair with UPaperSpriteComponent, removing some code from the common FPaperRenderSceneProxy parent.
- New: Significant improvements to tile map support (still experimental, must be enabled in Paper 2D project settings).
Added limited support for different projection modes on tile maps (orthogonal, isometric, and staggered isometric; only orthogonal works with in-editor editing).
Added adjustable Spacing and Margin values on tile sets (Spacing is a gap per tile in the texture, and Margin is a gap around the border).
Added adjustable Z offset per tile in X and Y, as well as per-layer, which permits a fix for z-fighting when using overlapping isometric tiles.
Added ability to drag-drop a tile set to make a new tile map actor (just sets the tile width and tile height to good defaults, nothing else).
Added a placeholder standalone tile map editor (doesn’t edit much yet).
Added a component asset broker allowing tile maps components to be used in Blueprints.
Added display text for tile map render bounds to tile map editor.
Added support for dragging tile map assets into the editor viewport to create tile map actors.
Edits to tile sets and tile maps now refresh placed tile map instances.
Finished deprecating layer-wide tileset pointer and removed several bogus uses.
Made tile set viewer/editor draw translucent/masked textures as translucent.
Moved part of the geometry generation to a one-time step on the game thread instead of per-frame (WIP).
- Improved comments on various types and methods.
- Improved Texture Packer Json importer handles rotation, trimming and pivot options correctly.
- Improved source region edit performance.
- Converted UPaperSpriteComponent to derive from UMeshComponent.
- Forced wireframe color for opaque sprite sections to green (the color of GPU happiness).
- UX improvements to the details panel customization for UPaperSprite.
- Removed Paper 2D texture usage and dependency on Editor Style.
- Removed display of collision geometry debug text if there is no collision on the sprite.
- Renamed texture context menu command ‘Configure For Sprites’ to ‘Configure For Retro Sprites’ to better reflect the function it performs.
- Fixed a bug where bSimulatePhysics could not be set on a UPaperSpriteComponent in the Blueprint editor.
- Fixed unreliable behavior when double-clicking in Source view when PixelsPerUnrealUnit is not 1.0
- Fixed potential assertion when cooking Paper 2D content (Add ConditionalPostLoad call for associated textures to avoid load-time ordering issues when opening older sprites).
- Fixed external content reference warnings on placed assets that use the default plugin materials.
- Fixed broken tangent calculations in FPaperRenderSceneProxy that caused bogus lighting on lit sprites.
- New: Added function to detect connected mice on Win64/Win32.
- New: Windows accessibility features are now disabled while the game/editor are running.
- Windows XP support can now be enabled in the BuildConfiguration.xml like other build options.
- Error codes added to the Editor analytics for Launch On and File|Package / File|Cook so that we can track what errors users are getting during those process and better direct our efforts to improve the user workflow.
- Installed SDKs are checked at editor startup. This allows for all of the platforms we support for a particular editor build to be shown in the menus. A platform that is supported but does not yet have the appropriate SDK installed will launch a tutorial for the SDK installation when a menu command is clicked.
- Bug fix for missing OpenGL extensions and entry points for OpenGL 3.x on windows.
- Fixed issue with IPP where if the mobile provision was updated it would properly copy it into the provision library.
- Addition of new API for platforms to allow detecting whether or not everything is ready/installed to be able to build, cook, package, deploy, and run a game.
New: Added support for using libs in Binaries/ThirdParty in self-contained Mac app bundles.
New: Added Close item to Window menu in Mac menu bar (Cmd+W)
New: Ctrl and Cmd keys on Mac are no longer treated as the same key and can be assigned to shortcuts separately.
New: Deferred updating offscreen, 1x1 tooltip windows to improve Mac Editor responsiveness.
New: Implemented a Mac OS X native feedback window for slow tasks that shows progress, an optional log and provides the ability to cancel the operation.
New: Mesh fracturing in Destructible Mesh editor works on Mac now.
New: Refactored menu code to use the Mac menu bar instead of custom per-window menus.
The main menu now reflects the currently focused window like other Mac apps.
Level editor widgets that lived in the menubar have moved to the window’s titlebar.
- New: The editor will now save the project plist (found in the Project Settings for iOS) to Game/Build/Info.plist. This is different from previous versions where it saved it to Game/Build/Game-Info.plist. For the time being, the editor and tools will continue to look for Game-Info.plist, but this will be deprecated in the future.
- New: Updated Mac to p4api-2014.1 so that we may support SSL connections.
- New: Updated Mac OS X version check to warn users if their version is older than 10.9.4 plus fixed the check so it no longer detects 10.10 as older than 10.9.1
- Changed trackpad detection on Mac to report trackpad only if at least two fingers are touching it. This should limit issues with people accidentally touching trackpad while using mouse + WASD
- Don’t disable use of glMapBuffer when using MTGL as there’s an OpenGL bug that results in rendering errors in that case.
- Exposed the amount of VRAM in the GPU to the OpenGLRHI on OS X.
- Improved the code for enumerating installed engine versions in UE4EditorServices so that it doesn’t include incomplete or deleted installs.
- Improved RMB handling in SNodePanel for Magic Mouse and trackpad.
- Improvements to Mac IME support:
Show the range being edited by a pop-up glyph selection window.
Properly clear the marked and composed ranges when IME ends so that further typing or clicking works as expected.
Make sure that the caret position updates correctly when editing a composed range.
- On OS X Use uuid_generate rather than implementing our own GUID generation.
- Optimized UBT on Mac. The time it takes to determine if the target is out of date is much shorter now.
- Only flush after glTexStorage calls when necessary to avoid inhibiting performance on Macs with unaffected GPUs.
- Removed the GL_TEXTURE_BUFFER workaround for OS X the OpenGL driver fix is in 10.9.4.
All Macs will use the GL_TEXTURE_BUFFER path now as everything but a 2013 Mac Pro running 10.9.3 will work correctly.
- Stopped using Cocoa’s child window mechanism since it isn’t what we want.
Tear-out or panel-style windows are raised to float above normal windows.
All windows appear in Expose/Spaces/Mission Control & the are part of system window cycling.
Modal windows are treated slightly specially to ensure that the last shown modal window currently still open remains on top and attempts to change focus fail with visual indication.
- Fixed a problem with the editor creating /Volumes/UE4DDC folder if the shared DDC folder is not mounted on Mac.
- Fixed issues with zooming blueprint and material editor viewports with Magic Mouse.
- A few other minor fixes.
- New: Added in-editor tutorials for installing iTunes and Mobile Provisions. These tutorials will appear automatically when you Launch On Device or Package your app.
- New: Added support for Foliage Instanced Meshes on mobile devices.
- New: Added extended error checking and in-editor help for many iOS deploy and packaging errors, as well as continued to improve Android device compatibility.
- New: Added support for PerInstanceFadeAmount on mobile materials.
- New: The BlackBody material expression is now supported on ES2.
- The editor will now save the project plist (found in the Project Settings for iOS) to Game/Build/Info.plist. This is different from previous versions where it saved it to Game/Build/Game-Info.plist. For the time being, the editor and tools will continue to look for Game-Info.plist, but this will be deprecated in the future.
New: Basic iOS in-app purchase support added to Blueprints.
One to query product information given a product id.
One to make a purchase of the specified product, by id.
- New: Metal support improved (up to Beta 4/5)
- New: Increased the unity file size to prevent jump distance linker errors on iOS.
- New: iOS frameworks specified in PublicAdditionalFrameworks in a module’s Build.cs file will now properly have their headers directory added to the header search path.
- Fixed issues with devices not being found when deploying to iOS from a Mac for Strategy Game and Platformer Game.
New: Added console history. Swipe left or right on the text input to select previous console input.
New: Added support for virtual keyboard Slate widget (SVirtualKeyboardEntry)
New: Added call to adb which sends an input to unlock the screen before launching the game.
New: Android Back input added as an alias for Special Left to improve clarity.
New: When launching from the editor to a locked device the screen is now unlocked prior to game launch.
Allowed cubemaps with FloatRGBA to be converted to RGBA with clamping of values 0.0 to 1.0 if half float textures not supported.\
Removed extra blank lines in console log during packaging with the editor.
Added ‘Android Back’ for specific back button support in Android.
Android Compatibility Device List
*=2]LG G2 (LG-LS980)
*=2]Samsung Galaxy Note 3 (SM-N900)
*=2]Samsung Galaxy Note 3 (SM-N900P)
*=2]Samsung Galaxy S 2 Intn’l (GT-I9100)
*=2]Samsung Galaxy S 4 mini (GT-i9190)
*=2]Samsung Galaxy S 5 (SM-G900H)
*=2]Samsung Galaxy Tab 3 10.1 (GT-P5200)
See our Android Device compatibility wiki page for more information.
New: Improved handling and cleanup of orphaned Xbox Live sessions.
- New: The initial version of an Xbox Live Compute online subsystem server module was added.
- New: The engine is set to use the July 2014 QFE1 XDK by default.
- Optimized cache flushing in HandleSpecialUnlock.
- Packaging of content only projects giving an error about an empty file group has been fixed.
- Slightly optimized texture cooking time.
- Fixed several texture tiling corruption bugs.
- Fixed a crash in Xbox Live session management
- Fixed an issue that was preventing the FOnSessionInviteAcceptedDelegate from firing if the game wasn’t already running when the user accepted an Xbox Live game invite.
New: Morpheus DVT 1.1 support!
New: Improved Morpheus Support, including many fixes from Sony for DVT hardware support, shaders, and tracking
New: ICU support!
New: Game control over which bluray layer PlayGo chunks are written to.
New: Game specific coredump handling.
New: Runtime conversion of callstack addresses to function names.
Failed asserts now dump decoded callstack function names to the PS4 console output when not connected to a debugger.
- Better handling of GPU Timeouts - Fixes invalid timeout detection when debugging and handles timeouts due to CPU/GPU Razor captures
- Buffer clear fixes - Fixed potential double clearing of MRT targets if the first doesn’t have a CMask. Flush CMask cache before clearing the CMask buffer.
- FUniqueNetIDPS4 uses asynchronous NPID lookups.
- HTTP Requests handle all 200 range response codes properly.
- Morpheus rendering fix to allow Game/Render threads to run in parallel again.
- Ribbon particle optimization.
- Various packaging fixes for PlayGo and non-PlayGo packaging.
- Fixed shader SDB output folder path (now dumped to \Saved\ShaderDebugInfo\SF_PS4\sdb)
- Fixed GPU Particles using stale uniform buffers causing various artifacts.
- Fixed Development builds crashing on Testkits from the debug keyboard.
- Fixed incorrect cast in FGnmDynamicRHI::RHIUpdateTexture2D.
- HTML5 now requires Emscripten SDK 1.21. This can be installed from Download and install — Emscripten 2.0.27 (dev) documentation. Note: this is a new location for the Emscripten SDK.
- New: Updated TP_2DSideScrollerBP to better work in multiplayer scenarios.
- New: Drives controller rotation instead of local rotation.
- New: Enable replication on sprite flipbook component (works server->client but client->server will still require an RPC).
New: Slate widgets can now register/unregister to get notifications when someone clicked outside them.
New: Slate brushes now support mirroring images.
You can set this with the new “Mirroring” variable on FSlateBrush
- New: SAssignNew can now assign to a TSharedRef.
- New: The signature for SWidget::OnPaint() and SWidget::Paint() has changed to include an extra parameter of type FPaintArgs.
For calls to Super::OnPaint() simply pass through the FPaintArgs parameter.
When painting child widgets, pass Args.WithNewParent(this) to ChildWidget->Paint().
- Fixed bug where WidgetReflector would consume the ESC key when pressing it to lock focus (caused Play to exit)
- Fixed a race condition using custom Slate draw elements.
New: New constraint visualization. We now use three fan shapes with red green blue which should be much easier to work with in PhAT.
New: Added damage prevention channel for radial damage.
New: Exposed disable constraint physics collision to Blueprints.
New: Exposed more joint APIs from PhysX.
New: Exposed constraint angular reference frame offset.
In blueprint editor case it was not possible to modify constraint frame of reference. This new value allows to set it manually.
- New: Exposed max depenetration velocity for more slowly resolving overlapping simulated objects.
- Removed enabling collision on no collision object for drag/drop operation. Now no collision should not respond to Visibility trace.
- Simplified navigation cluster graph to work only as fast ‘path exists’ check.
- Stopping movement from MovementComponent will abort path following.
- Reenabled RT destruction in APEX. We are still not supporting this directly, but the APEX libs will have this flag turned back on.
- Overlap check performance: Blueprint overlap queries now check the async scene.
- Improved undo behavior inside PhAT.
- Improved PhAT constraint copy and paste behavior.
- Improved bSimulatePhysics editing extensibility.
Added UPrimitiveComponent::CanEditSimulatePhysics to allow individual components to determine if simulation is possible given their Physics setup.
Replaced if-else cast tree in details panel customization.
Changed behavior of base UPrimitiveComponent so that it is editable if there is a valid body setup on the component rather than on the BodyInstance.
- Removed destructible components tick and post physics tick.
- Fixed “UseConvexAsSimple” collision for spline meshes.
- Fixed crash in PhAT when creating multi convex hull with soft vertices
This is actually not supported, but the editor will properly issue a warning instead of crashing.
- Fixed incorrectly passing max angular velocity to body instance.
- Fixed PhAT adding new bodies not creating joints for non-leaf bodies.
- Fixed PhAT deleting non-leaf bodies so that joints are automatically fixed up.
**2D Physics Constraints
- New: Easily constrain 3D physics body to a 2D plane (per body or project wide).
- New: Added multi-channel support to Opus file format.
- New: Added support for different sample rates to Opus file format.
- New: Added early experimental support for Audio Streaming on Windows. This will be improved in upcoming releases.
- Split Opus and Vorbis classes out of AudioDecompress.cpp/h
- Removed vestigial bits of the UE3 music system.
- When opening the SoundClass editor from the Content Browser, the SoundClass edited will be selected and have its values shown, not the values of the SoundClass root of the SoundClass hierarchy.
- Prevented full audio data from being cooked/loaded in streaming sounds.
- Prevented sounds and other notifies from playing when animation preview buttons set the playback position directly.
**Live Streaming Plugin Support
New: Live Streaming plugin API for games and editor added!
Implements live video/audio broadcasting to a live streaming network
Supports displaying your web cam in the editor and in-game
- New: Experimental support for streaming live broadcasts from Unreal Editor (not ready to use yet)
- New: Experimental Twitch broadcasting support (not ready for use yet)
You’ll need to acquire the Twitch SDK and compile the engine yourself to try this out
Implements live video/audio broadcasting to Twitch
Supports displaying your web cam in the editor and game
Uses browser-based authentication to login to Twitch
NOTE: Epic cannot legally distribute the Twitch SDK to you. See /Engine/Source/ThirdParty/Twitch/InstallingTwitchSDK.txt for more information.
New: Added support to Persona for previewing root motion.
New: Additional Persona usability improvements
Renamed Persona animation scrub menu and tooltip to be more user friendly.
Changed AnimNotify to support all AnimSequenceBase.
Persona default layout change per tab. Mainly simplified for skeleton/mesh tab.
Change Custom socket to Mesh socket.
Supported thumbnail size of asset picker and tweaked it for Persona.
Changed tab asset pickers to be list view by default.
Added Toolbars for each tab - import/reimport/create assets.
Tweaked Additive setting to work better with a better warning.
Fixed menu item to show multiple times if multiple Persona are opened.
- New: Added thumbnails for animation assets (AnimSequence, BlendSpace, AnimComposite, AnimMontage, AnimBlueprint).
- New: Added bone driven controller skeletal control node for animation blueprints.
- New: Added floating animation asset previews to Personas asset browser on mouse hover.
- New: Added Display Info options in Persona’s viewport such as Basic, Detailed and None. Basic option is as simple as static mesh editor.
- New: Added Save Animation Assets menu in Persona.
- New: Added documentation anchors for each animation editor type.
- New: Anim montage slot name shows an error message to provide a valid slot name if it is empty.
- New: Adding skeletal sockets no longer dirties the skeletal mesh.
- New: Blueprint and Native notifies can now customize their names in the notify panel using a new native event.
- New: Bones in Persona can now be selected even when hidden as long as the mesh has a physics asset setup.
- New: Double-clicking animation graph player nodes now opens the relevant editor for the asset.
- New: Changed zoom in Persona tracks to be based on mouse position instead of track centre.
- New: Created custom graph tasks for parallel animation evaluation to reduce overhead.
- New: Shift-Click recursive expansion/collapse now works in Persona skeleton tree too.
- Removed retargeting UI from all Persona modes bar Skeleton.
- Improvements to Persona tooltips and interactive tutorial.
- Single-click preview of animations removed in favor of floating previews.
- Viewport scrub bar in animation mode of Persona removed.
- Moved notify panel delete hook out of Persona and into the panel to stop Persona consuming all delete commands
- AnimSequence.bLoopingInterpolation flag is removed. If you’d like to add interpolation from end frame to first frame, please use the menu in Persona (Add Looping Interpolation).
- Updated engine-level Blueprint notifies to take advantage of new custom naming function.
- Fixed crash when running the “Static Mesh UVs” test.
- Fixed thumbnail code sometimes using incorrect thumbnails.
- Fixed issue with not resetting time when setting new animation.
- Fixed BlendSpace parameter not updating properly when parameter changes.
- Fixed mismatched name in vectorized FTransform.
- Fixed empty animation assets freezing future floating previews.
- Fixed root motion fighting with external force so that it only applies when root motion montage is playing.
- New: Trace functions now accepts a literal value for vector
- New: Anim BP now creates default owner node/update node in Event Graph.
- AnimNotifies at the same time position are now saved in their track index order
- All FBX errors and warnings are now linked to documentation pages and have a descriptive tooltip.
- Fixed potential crash when importing vertex with missing bone influence.
- Changes to VoIP delegate processing to make sure “start/stop talking” is always captured. This prevents some possible crashes.
- Fixed a crash bug in the Xbox LIVE implementation.
New: Variuous UI improvements to network profiler.
Stat Net now works correctly and no longer reports ‘command not found’.
Many fixes to async network object loading code.
BSD IPv6 SetIp function has been updated to correctly interpret port numbers.
This fixes an issue where the network file system would not connect when passed port numbers on the command line by UnrealFrontend.
- Clients now verify they have the exact same package as the server before loading assets from them.
- Lots of ULocalPlayer management cleanup (making it easier to manage splitscreen players for offline/online play).
- Shooter Game menu management cleanup, unified dialog box support, etc.
- Shooter Game now shows dialog messaging for various failure cases, work that is being done to help Shooter Game be more console friendly, and prove out those OSS APIs.
New: Added a PostEngineInit load phase for modules, which allows modules to be registered after GEngine/GEditor have been created.
New: Ability to override config options on the commandline. Use the following format:
- New: Added file system block alignment option in Unreal pak. Prevents small files crossing a file system block boundary which can incur a performance hit on some platforms. This option help reduce that cost. Use –blocksize=X[KB|MB] to enable.
- Added ENGINE_API to FComponentInstanceDataBase so it could be used in other modules.
- Added ISourceControlLabel::Sync() overload that takes multiple files.
- New: Added a proper error message if a file cannot be deleted during project upgrade, and added functionality to checkout the project file if necessary.
- AActor::OwnedComponents will no longer be exposed as UPROPERTY as it was causing serialization issues.
- New: FScopedDurationTimerLogger class which logs the lifetime of the object.
- New: FReferenceCollector has a new helper member function: AddReferencedObjects which overloads accept TArrays, TMaps and TSets.
- New: FBlackboardKeySelector::AddRotatorFilter now uses CreateNamedObject.
- New: Made UPrimitiveComponent::GetUsedTextures virtual.
- New: Plugin directories will now also be searched for project templates.
- New: PCIP.SetDefaultSubobjectClass and PCIP.DoNotCreateOptionalDefaultSubobject can no longer be used outside of class initializer list.
- New: Stable sort algorithm for TArray. It’s slower than classic sort, but it’s keeping the input order of equal elements.*
- New: ScriptPlugin now supports script-generated blueprint classes with the ability to set any blueprintable class as the base class.
- New: TLinkedList and TDoubleLinkedList now support C++11’s ranged-for syntax.
- New: TUniqueObj constructor now supports 0-4 arguments when variadic templates are not available.
- New: TArray::Emplace now supports arbitrary numbers of arguments when variadic templates are available and 0-4 arguments when not.
- New: Variadic template supported enabled in VS2013 builds.
- Changed FGameplayDebuggerExec::Exec(…) to use a TActorIterator<AGameplayDebuggingReplicator> rather than FActorIterator.
- Cleaned up StringClassReference. The class is now a subclass of StringAssetReference and should work analogically.
- In-editor renames now support StringAssetReferences as well
- Improvements to UMeshComponent as a base class.
Updated UMeshComponent::PrestreamTextures and UMeshComponent::SetTextureForceResidentFlag to work off of GetUsedTextures and made them virtual.
Fixed an array bounds assert if trying to expand the materials array via UMeshComponent::SetMaterial
- New: The ParticleSystemAudit commandlet has been revived from UE3. It uses the Asset Registry instead of a database.
- Made FGameplayDebuggerExec::Exec clear the replicator (and so fail to create/enable the tool) if the only Player Controllers it finds are NOT the first local Player Controller. (That should never happen, but previously wasn’t protected against properly.)
- Unreal Engine Launcher no longer loads while debugging in Visual Studio or Xcode.
Added new “-ForceLauncher” command-line argument that can override this.
- Updated texture streaming code to treat all UMeshComponent derived classes equally, generalizing the special treatment for USkeletalMeshComponent or UStaticMeshComponent.
- Updated some places using a hardcoded search in FEditorStyle to use FClassIconFinder instead (to allow you to specify class icons in your own modules).
- Removed ScriptAsset, ScriptFunction and ScriptActor classes from ScriptPlugin
- Removed DLLEXPORT specification from a few templates in CoreUObject module that could cause failure if inline expansion is turned off.
- If a tooltip does not exist for a UField, use the name of the field instead.
- Fixed ‘stat unitgraph’ not appearing in console autocomplete.
- Fixed copying files under source control not maintaining branch history.
- Fixed an issue with not displaying self/otherchildren when using ‘stat dumpframe’.
- Fixed a bug that cause low-frequency GC to happen at inappropriate times.
- Fixed crash when project module fails to load.
- Fixed compiler errors when brute forcing STAT to be true in Shipping builds.
- Fixed for multithreaded crash in ValidateHeap() & dumpAllocatorStats() in FMallocBinned.
- Fixed not being able to toggle fullscreen mode when launched with –windowed on the command line.
- Fixed compile-on-startup when plugin modules don’t already exist on startup.
- Fixed compiling from the editor where the target does not match the game name.
- Fixed scraping of UnrealBuildTool environment variables in non-US locales.
- Fixed branching creating multiple files.
- Fixed FTransform details customization not dirtying packages correctly.
- Fixed FString::InsertAt inserting null characters in the middle of a string
- Fixed an IMM based IME crash due to starting a composition with no active context (eg, if you typed while the editor viewport had focus)
- Fixed ULinkerLoad will no longer try to recreate an import if it has already been created by VerifyImport through redirects.
- Fixed When no target platform is explicitly specified in the command line, BuildCookRun automation command will pick the currently running platform instead of always Win64. This fixes Mac problems when using BuildCookRun.
- Fixed Unknown script packages in the import list of another streaming package will now be gracefully handled instead of crashing.
**GameplayDebugger module changes:
- Added functionality (accessible through the module interface) for creating the debugging actor given a particular player controller.
- Changed GameplayDebugger NOT to automatically create the debugging actor when a player controller is added.
- The message it was using only happens in-editor, so it didn’t work in-game. Also, in-game, we don’t necessarily want every player controller creating a debug actor. So, it’s now up to each user to determine which controllers should create their own debuggers.
- One correct way to create the debugger for a player controller is to have that player controller implement PostInitializeComponents(), where (after calling to the Super implementation), it can call code like this:
Faster C++ Compile Times
268 headers in Engine module had superfluous include statements, fixed 205 of them according to include-what-you-use principle.
Removed 17 unnecessary include statements from Engine module private precompiled header.
As a result of an on-going effort to improve compile times, some of the includes have been removed from public headers. The list of removed files is below. You may need to add these headers into your project source code in case it does not compile.
**Unreal Build Tool Improvements
New: Changed UBT to compile a flag for running in the DebugGame configuration into monolithic games (no need to specify -debug any more).
New: Added better verbose debug output to detect problems with shared PCH headers.
New: Faster startup time (reduced time spent scanning includes for UObjects).
New: UBT now adds /FS flag in VCToolChain for VS2013 to ensure parallel builds that use PDB work properly.
New: UBT is now detecting redistribution dependency violations. Modules can be marked as redistributable or not – depends mostly on location, Editor and Development folder modules are non-redistributable, but it can be overridden if needed. In non-Debug and non-Editor builds UBT is checking if game being built is depending on some non-redistributable module. Programs are also not verified.
UBT will no longer use ini files to get the list of plugins to compile for programs. Program target rules file should specify the plugins to compile for it.
UnrealBuildTool performance: Disabled verbose output in Release builds.
TRACE is no longer defined by default in Release builds.
If you want bPrintDebugInfo to work, use a Debug build or define TRACE to 1.
- Fixed modules that supply shared PCHs not generating and using their own unique PCH in monolithic builds.
- Fixed monolithic builds not detecting that a unique PCH was needed for modules that supply shared PCHs when header file names were different.
- Fixed UnrealBuildTool not relinking targets after plugin static libraries are modified. Dependencies were ignored because their producing action was marked as creating an import library.
- Removed ‘ScriptPlugins’ ini setting. Plugins will be discovered by their “Category” specified in uplugin file (for UHT it should be prefixed with “UnrealHeaderTool.Code Generator.”)
**- There is a known issue with IPP where if a user tries to import a mobile provision with a concrete application id (com.yourcompany.gamename as opposed to com.yourcompany.*) then it will fail to properly find the imported mobile provision. The workarounds for this are as follows:
- Create a wild card mobile provision. This is probably the easiest workaround and then the provision will work for any of your games during development.
- Create an Info.plist in your Game/Build/IOS directory. You can use the template in Engine/Build/IOS/UE4Game-Info.plist or you can edit your project settings in the editor (Project Settings / IOS Settings) to generate the Info.plist. Make sure the CFBundleIdentifier key matches the mobile provision identifier, usually com.yourcompany.gamename. Once that is done, then running IPP to import the provision and certificate should work fine.