This change consists of multiple changes:
Core:
- Deprecation of ANY_PACKAGE macro. Added ANY_PACKAGE_DEPRECATED macro which can still be used for backwards compatibility purposes (only used in CoreUObject)
- Deprecation of StaticFindObjectFast* functions that take bAnyPackage parameter
- Added UStruct::GetStructPathName function that returns FTopLevelAssetPath representing the path name (package + object FName, super quick compared to UObject::GetPathName) + wrapper UClass::GetClassPathName to make it look better when used with UClasses
- Added (Static)FindFirstObject* functions that find a first object given its Name (no Outer). These functions are used in places I consider valid to do global UObject (UClass) lookups like parsing command line parameters / checking for unique object names
- Added static UClass::TryFindType function which serves a similar purpose as FindFirstObject however it's going to throw a warning (with a callstack / maybe ensure in the future?) if short class name is provided. This function is used in places that used to use short class names but now should have been converted to use path names to catch any potential regressions and or edge cases I missed.
- Added static UClass::TryConvertShortNameToPathName utility function
- Added static UClass::TryFixShortClassNameExportPath utility function
- Object text export paths will now also include class path (Texture2D'/Game/Textures/Grass.Grass' -> /Script/Engine.Texture2D'/Game/Textures/Grass.Grass')
- All places that manually generated object export paths for objects will now use FObjectPropertyBase::GetExportPath
- Added a new startup test that checks for short type names in UClass/FProperty MetaData values
AssetRegistry:
- Deprecated any member variables (FAssetData / FARFilter) or functions that use FNames to represent class names and replaced them with FTopLevelAssetPath
- Added new member variables and new function overloads that use FTopLevelAssetPath to represent class names
- This also applies to a few other modules' APIs to match AssetRegistry changes
Everything else:
- Updated code that used ANY_PACKAGE (depending on the use case) to use FindObject(nullptr, PathToObject), UClass::TryFindType (used when path name is expected, warns if it's a short name) or FindFirstObject (usually for finding types based on user input but there's been a few legitimate use cases not related to user input)
- Updated code that used AssetRegistry API to use FTopLevelAssetPaths and USomeClass::StaticClass()->GetClassPathName() instead of GetFName()
- Updated meta data and hardcoded FindObject(ANY_PACKAGE, "EEnumNameOrClassName") calls to use path names
#jira UE-99463
#rb many.people
[FYI] Marcus.Wassmer
#preflight 629248ec2256738f75de9b32
#codereviewnumbers 20320742, 20320791, 20320799, 20320756, 20320809, 20320830, 20320840, 20320846, 20320851, 20320863, 20320780, 20320765, 20320876, 20320786
#ROBOMERGE-OWNER: robert.manuszewski
#ROBOMERGE-AUTHOR: robert.manuszewski
#ROBOMERGE-SOURCE: CL 20430220 via CL 20433854 via CL 20435474 via CL 20435484
#ROBOMERGE-BOT: UE5 (Release-Engine-Staging -> Main) (v949-20362246)
[CL 20448496 by robert manuszewski in ue5-main branch]
#preflight 62850d56614041edb7858ecf
#rb dave.belanger
#ROBOMERGE-AUTHOR: rex.hill
#ROBOMERGE-SOURCE: CL 20266107 via CL 20266167 via CL 20266341 via CL 20266364
#ROBOMERGE-BOT: UE5 (Release-Engine-Staging -> Main) (v943-19904690)
[CL 20269447 by rex hill in ue5-main branch]
- Unbound octree now stores hierarchical editor cells instead of leaves, this greatly reduce the number of needed editor cells for very large worlds.
- Implemented loading regions support to replace editor cells loading, in preparation for bookmark regions.
Tested against a 2000KMx2000km world + various internal projects and demos.
#rb patrick.enfedaque, richard.malo
#preflight 628239b5cf7e4667a97e3fe0
[CL 20222133 by JeanFrancois Dube in ue5-main branch]
When choosing Check-In on a directory in the Content Browser, PromptForCheckoutAndSave is called with a list of all loaded packages that reside in that directory hierarchy by FAssetFolderContextMenu::ExecuteSCCCheckIn with bCheckDirty=true and bPromptToSave=true. However, if none of the given packages is dirty, the end result would be that all packages would be saved instead of none of the packages being saved. This is unfortunate as source control systems will -unnecessarily- end up considering those assets as changed.
#jira none
#review
#preflight 624b16ddf4217035fab6fdfb
[CL 19621627 by wouter burgers in ue5-main branch]
Newly created Level Instances setups the worlds to be partitioned with disabled streaming.
This is in preparation of adding DataLayer support inside Level Instances.
#rb jeanfrancois.dube, patrick.enfedaque
#preflight 624739b2f73c316f680a8a0a
#ROBOMERGE-AUTHOR: richard.malo
#ROBOMERGE-SOURCE: CL 19606194 via CL 19606267 via CL 19606278
#ROBOMERGE-BOT: UE5 (Release-Engine-Staging -> Main) (v938-19570697)
[CL 19607375 by richard malo in ue5-main branch]
- Added option 'DisableStreaming' in the World Partition convert commandlet to allow disabling streaming for converted maps.
- Added flag 'bEnableStreaming' for partitioned worlds that can be used to disable streaming but keep key features such as OFPA and Data Layers.
- In this mode, the streaming generation acts as standard level streaming and can be enabled at any time by the user.
- This mode is enabled by default for new partitioned maps created from the empty template or the open world template.
- The World Partition convert commandlet will now duplicate the default HLOD layers setup.
- Show a hint in the World Partition window that streaming is disabled.
- When disabling streaming from the UI, show a dialog to warn the user about the implications of the change.
- When enabling streaming for the first time, show a dialog to warn the user that the world is about to be set up for streaming.
- When saving a map, don't duplicate its HLOD setup unless it's a template map.
- Includes changes from MattK: `Allow external object details customizations to hide the root object node`.
- TODO: Convert all template maps from the Games project to use World Partiton with streaming disabled using the new 'DisableStreaming' commandlet option.
#rb patrick.enfedaque, richard.malo
#jira UE-143719
#preflight
#ROBOMERGE-AUTHOR: jeanfrancois.dube
#ROBOMERGE-SOURCE: CL 19149766 in //UE5/Release-5.0/... via CL 19150115
#ROBOMERGE-BOT: UE5 (Release-Engine-Staging -> Main) (v921-19075845)
[CL 19160979 by jeanfrancois dube in ue5-main branch]
Fix scene import when there is no specified factory
The scene node specialtype attribute can now be a "Transform" type. This allow the generic scene pipeline to found group transform node.
#jira none
#rb jeanmichel.dignard, richard.talbotwatkin
#rnx
#preflight 62066e4054003c49ad37c388
[CL 18951547 by Alexis Matte in ue5-main branch]
- Interchange now adds its supported extensions to the import and import into level file pickers.
- Added a GetSupportedFormats on the Interchange Translators.
- UInterchangeTranslatorBase::CanImportSource now defaults to checking the file extension and matching it against the supported formats.
- Added a translator type on the translators to indicate what type of data they can translate (assets or actors for now). This is used by the file pickers to indicate which extensions they want to gather.
#preflight 6203eaca174d2620c3c11d9b
[CL 18919107 by JeanMichel Dignard in ue5-main branch]
- FScopedLoadAllExternalObjects object that can be used to force the loading of all external actors of a WP world to allow those operations to succeed. (for larger worlds commandlet should be used)
- ContentBrowser operation like: Delete, Duplicate, Rename, Move, Copy use this new scope
- World Partition worlds are no longer loaded on right-click context menu.
- Note: change was done with explicit scopes to only address specific use cases and limit the impact of this CL. It could become a default behavior in later versions.
#jira UE-140032, UE-114002
#rb richard.malo, jeanfrancois.dube, rex.hill
#preflight 61f2b479800734b52da816b4
#ROBOMERGE-AUTHOR: patrick.enfedaque
#ROBOMERGE-SOURCE: CL 18753910 in //UE5/Release-5.0/... via CL 18753926 via CL 18756993
#ROBOMERGE-BOT: UE5 (Release-Engine-Test -> Main) (v903-18687472)
[CL 18757308 by patrick enfedaque in ue5-main branch]
#preflight 61eefc77ba69a4fdb220bf23
#ROBOMERGE-AUTHOR: marc.audy
#ROBOMERGE-SOURCE: CL 18712765 in //UE5/Release-5.0/... via CL 18712784 via CL 18713147
#ROBOMERGE-BOT: UE5 (Release-Engine-Test -> Main) (v903-18687472)
[CL 18713191 by marc audy in ue5-main branch]
- Replace code in FileHelpers with a call to replace the current loading code
#rb jeanfrancois.dube
#preflight 61df1cdf484d866ec019151e
#ROBOMERGE-AUTHOR: patrick.enfedaque
#ROBOMERGE-SOURCE: CL 18587042 in //UE5/Release-5.0/... via CL 18587050 via CL 18587071
#ROBOMERGE-BOT: STARSHIP (Release-Engine-Test -> Main) (v899-18417669)
[CL 18587106 by patrick enfedaque in ue5-main branch]
- When enabled, folders are actual objects : modifying a folder won't affect actors (more compliant with OFPA).
- Enabled by default for World Partition and Level Instances.
- Can be enabled on regular levels (experimental feature 'Use Actor Folder Objects').
- If Level uses OFPA, ActorFolders will also be saved in their own package (but will use __ExternalObjects__ root folder).
- In a future refactoring, external actors will also be moved in the same root folder.
- Generalized saving object in an external package (different from its outer package)
- World outliner supports old folders and new actor folder objects : Levels using the actor folder objects will show a root Level node (like Level Instances).
#rb patrick.enfedaque, jeanfrancois.dube
#preflight 61d84b356511bc498e5cb858
#ROBOMERGE-AUTHOR: richard.malo
#ROBOMERGE-SOURCE: CL 18543443 in //UE5/Release-5.0/... via CL 18543482
#ROBOMERGE-BOT: STARSHIP (Release-Engine-Staging -> Release-Engine-Test) (v899-18417669)
[CL 18543525 by richard malo in ue5-release-engine-test branch]
Allows save window to be displayed again if a file is reverted in UncontrolledChangelist.
#jira UE-136350
#rb Sebastien.Lussier
#changelist validated
#ROBOMERGE-AUTHOR: luc.eygasier
#ROBOMERGE-SOURCE: CL 18431729 in //UE5/Main/...
#ROBOMERGE-BOT: STARSHIP (Main -> Release-Engine-Test) (v897-18405271)
#ROBOMERGE[STARSHIP]: UE5-Release-Engine-Staging Release-5.0
[CL 18431749 by luc eygasier in ue5-release-engine-test branch]
Added a setting to turn on interchange import only for textures.
The selection of the asset in the content is now only done after all the asset are imported when using interchange.
#jira UETOOL-4291
#rb Alexis.Matte
#preflight 619e34820141b3c6da5b98d0
#ROBOMERGE-AUTHOR: julien.stjean
#ROBOMERGE-SOURCE: CL 18282733 in //UE5/Release-5.0/... via CL 18282735
#ROBOMERGE-BOT: STARSHIP (Release-Engine-Staging -> Release-Engine-Test) (v895-18170469)
[CL 18282740 by julien stjean in ue5-release-engine-test branch]