You can right click a level asset in the editor's Content Browser and do the action Source Control > Diff against Depot. However, this does not provide a useful diff window. It currently opens the default text diff tool, for example Helix P4 Merge, and always displays the same text content:
Begin Map Begin Level End Level Begin Surface End Surface End Map
Users have requested a more useful diff window / level representation here. Consider:
But this will likely need dev team discussion. This is a feature request, but I'm entering it as a bug to make it public searchable since the Diff against Depot action is exposed for Level assets and users may wonder why it currently does nothing.
A user has suggested as a quick workaround to convert the level to a more useful text format by supplying the "t3d" format instead of "copy" for UWorlds in UAssetToolsImpl::DumpAssetToTempFile.
Observe: It opens P4Merge (or other default text merge) tool with the not-useful contents left and right:
Begin Map Begin Level End Level Begin Surface End Surface End Map
Expected: A useful way of diffing level assets.
No crash here, but this the 5.3 callstack for current behavior:
> UnrealEditor-AssetTools.dll!UAssetToolsImpl::DumpAssetToTempFile(UObject * Asset) Line 2897 C++
UnrealEditor-UnrealEd.dll!UAssetDefinitionDefault::PerformAssetDiff(const FAssetDiffArgs & DiffArgs) Line 34 C++
UnrealEditor-AssetTools.dll!FAssetDefinitionProxy::PerformAssetDiff(UObject * OldAsset, UObject * NewAsset, const FRevisionInfo & OldRevision, const FRevisionInfo & NewRevision) Line 359 C++
UnrealEditor-AssetTools.dll!UAssetToolsImpl::DiffAssets(UObject * OldAsset, UObject * NewAsset, const FRevisionInfo & OldRevision, const FRevisionInfo & NewRevision) Line 2866 C++
UnrealEditor-AssetTools.dll!UAssetToolsImpl::DiffAgainstDepot(UObject * InObject, const FString & InPackagePath, const FString & InPackageName) Line 2824 C++
UnrealEditor-AssetManagerEditor.dll!FAssetSourceControlContextMenuState::ExecuteSCCDiffAgainstDepot() Line 775 C++
[Inline Frame] UnrealEditor-AssetManagerEditor.dll!Invoke(void(const FAssetSourceControlContextMenuState::*)()) Line 66 C++
[Inline Frame] UnrealEditor-AssetManagerEditor.dll!UE::Core::Private::Tuple::TTupleBase<TIntegerSequence<unsigned int>>::ApplyAfter(void(const FAssetSourceControlContextMenuState::*)() &) Line 311 C++
UnrealEditor-AssetManagerEditor.dll!TBaseSPMethodDelegateInstance<1,FAssetSourceControlContextMenuState const ,1,void __cdecl(void),FDefaultDelegateUserPolicy>::ExecuteIfSafe() Line 298 C++
UnrealEditor-Slate.dll!TDelegate<void __cdecl(void),FDefaultDelegateUserPolicy>::ExecuteIfBound<void,0>() Line 570 C++
[Inline Frame] UnrealEditor-Slate.dll!FUIAction::Execute() Line 139 C++
UnrealEditor-Slate.dll!SMenuEntryBlock::OnClicked(bool bCheckBoxClicked) Line 1167 C++
UnrealEditor-Slate.dll!SMenuEntryBlock::OnMenuItemButtonClicked() Line 1118 C++
[Inline Frame] UnrealEditor-Slate.dll!Invoke(FReply(SMenuEntryBlock::*)()) Line 66 C++
[Inline Frame] UnrealEditor-Slate.dll!UE::Core::Private::Tuple::TTupleBase<TIntegerSequence<unsigned int>>::ApplyAfter(FReply(SMenuEntryBlock::*)() &) Line 311 C++
UnrealEditor-Slate.dll!TBaseSPMethodDelegateInstance<0,SMenuEntryBlock,1,FReply __cdecl(void),FDefaultDelegateUserPolicy>::Execute() Line 281 C++
UnrealEditor-Slate.dll!TDelegate<FReply __cdecl(void),FDefaultDelegateUserPolicy>::Execute() Line 549 C++
UnrealEditor-Slate.dll!SButton::ExecuteOnClick() Line 465 C++
UnrealEditor-Slate.dll!SButton::OnMouseButtonUp(const FGeometry & MyGeometry, const FPointerEvent & MouseEvent) Line 390 C++
UnrealEditor-Slate.dll!SMenuEntryButton::OnMouseButtonUp(const FGeometry & MyGeometry, const FPointerEvent & MouseEvent) Line 434 C++
[Inline Frame] UnrealEditor-Slate.dll!FSlateApplication::RoutePointerUpEvent::__l8::<lambda_3>::operator()(const FArrangedWidget &) Line 5220 C++
UnrealEditor-Slate.dll!FEventRouter::Route<FReply,FEventRouter::FToLeafmostPolicy,FPointerEvent,`FSlateApplication::RoutePointerUpEvent'::`8'::<lambda_3>>(FSlateApplication * ThisApplication, FEventRouter::FToLeafmostPolicy RoutingPolicy, FPointerEvent EventCopy, const FSlateApplication::RoutePointerUpEvent::__l8::<lambda_3> & Lambda, ESlateDebuggingInputEvent DebuggingInputEvent) Line 442 C++
UnrealEditor-Slate.dll!FSlateApplication::RoutePointerUpEvent(const FWidgetPath & WidgetsUnderPointer, const FPointerEvent & PointerEvent) Line 5206 C++
UnrealEditor-Slate.dll!FSlateApplication::ProcessMouseButtonUpEvent(const FPointerEvent & MouseEvent) Line 5775 C++
UnrealEditor-Slate.dll!FSlateApplication::OnMouseUp(const EMouseButtons::Type Button, const UE::Math::TVector2<double> CursorPos) Line 5740 C++
UnrealEditor-ApplicationCore.dll!FWindowsApplication::ProcessDeferredMessage(const FDeferredWindowsMessage & DeferredMessage) Line 2231 C++
UnrealEditor-ApplicationCore.dll!FWindowsApplication::DeferMessage(TSharedPtr<FWindowsWindow,1> & NativeWindow, HWND__ * InHWnd, unsigned int InMessage, unsigned __int64 InWParam, __int64 InLParam, int MouseX, int MouseY, unsigned int RawInputFlags) Line 2738 C++
UnrealEditor-ApplicationCore.dll!FWindowsApplication::ProcessMessage(HWND__ * hwnd, unsigned int msg, unsigned __int64 wParam, __int64 lParam) Line 1099 C++
[Inline Frame] UnrealEditor-ApplicationCore.dll!WindowsApplication_WndProc(HWND__ *) Line 931 C++
UnrealEditor-ApplicationCore.dll!FWindowsApplication::AppWndProc(HWND__ * hwnd, unsigned int msg, unsigned __int64 wParam, __int64 lParam) Line 937 C++
[External Code]
[Inline Frame] UnrealEditor-ApplicationCore.dll!WinPumpMessages() Line 119 C++
UnrealEditor-ApplicationCore.dll!FWindowsPlatformApplicationMisc::PumpMessages(bool bFromMainLoop) Line 148 C++
UnrealEditor.exe!FEngineLoop::Tick() Line 5749 C++
[Inline Frame] UnrealEditor.exe!EngineTick() Line 61 C++
UnrealEditor.exe!GuardedMain(const wchar_t * CmdLine) Line 188 C++
UnrealEditor.exe!LaunchWindowsStartup(HINSTANCE__ * hInInstance, HINSTANCE__ * hPrevInstance, char * __formal, int nCmdShow, const wchar_t * CmdLine) Line 247 C++
UnrealEditor.exe!WinMain(HINSTANCE__ * hInInstance, HINSTANCE__ * hPrevInstance, char * pCmdLine, int nCmdShow) Line 298 C++
[External Code]
How does TextureRenderTarget2D get TArray<uint8> type data?
How do I set a material as a post-processing material?
Why does the REMOVE method of map container remove elements have memory leaks?
UMG RichText not appear image when packaged
How to delete some elements correctly when deleting an array loop?
How does TArray loop correctly remove elements in blueprints?
There's no existing public thread on this issue, so head over to Questions & Answers just mention UE-208637 in the post.
0 |
Component | UE - World Creation - Worldbuilding Tools |
---|---|
Affects Versions | 5.3.2 |
Target Fix | 5.6 |
Created | Mar 1, 2024 |
---|---|
Updated | Oct 11, 2024 |