UE5.1.1调用&ACharacter::Jump时随机崩溃求助
UE 5.1.1 调用&ACharacter::Jump时随机崩溃问题解决
问题概述
使用Windows平台源码编译的UE 5.1.1版本,基于第三人称模板项目,未修改默认CharacterMovementComponent及跳跃逻辑,但调用&ACharacter::Jump时引擎会随机崩溃,且近期崩溃频率上升。崩溃核心为窄化转换导致的数据丢失断言失败,触发点在虚拟阴影图(Virtual Shadow Map)的渲染线程逻辑中。
崩溃日志
LoginId:508fe6f24e82612fb333a486f622ee7a EpicAccountId:393905ce12c4434183c7408cb87f2890 Assertion failed: IntFitsIn<OutType>(In) [File:C:\Users\nikgi\Documents\GitHub Desktop\UnrealEngine\Engine\Source\Runtime\Core\Public\Templates\UnrealTemplate.h] [Line: 183] Loss of data caused by narrowing conversion UnrealEditor_Renderer!FVirtualShadowMapClipmap::FVirtualShadowMapClipmap() [C:\Users\nikgi\Documents\GitHub Desktop\UnrealEngine\Engine\Source\Runtime\Renderer\Private\VirtualShadowMaps\VirtualShadowMapClipmap.cpp:173] UnrealEditor_Renderer!FSceneRenderer::AddViewDependentWholeSceneShadowsForView() [C:\Users\nikgi\Documents\GitHub Desktop\UnrealEngine\Engine\Source\Runtime\Renderer\Private\ShadowSetup.cpp:4895] UnrealEditor_Renderer!FSceneRenderer::BeginInitDynamicShadows() [C:\Users\nikgi\Documents\GitHub Desktop\UnrealEngine\Engine\Source\Runtime\Renderer\Private\ShadowSetup.cpp:5767] UnrealEditor_Renderer!FDeferredShadingSceneRenderer::InitViews() [C:\Users\nikgi\Documents\GitHub Desktop\UnrealEngine\Engine\Source\Runtime\Renderer\Private\SceneVisibility.cpp:5195] UnrealEditor_Renderer!FDeferredShadingSceneRenderer::Render() [C:\Users\nikgi\Documents\GitHub Desktop\UnrealEngine\Engine\Source\Runtime\Renderer\Private\DeferredShadingRenderer.cpp:2374] UnrealEditor_Renderer!RenderViewFamilies_RenderThread() [C:\Users\nikgi\Documents\GitHub Desktop\UnrealEngine\Engine\Source\Runtime\Renderer\Private\SceneRendering.cpp:4390] UnrealEditor_Renderer!<lambda_d825e7d5a738e0bb6b7e834ee381bd9e>::operator()() [C:\Users\nikgi\Documents\GitHub Desktop\UnrealEngine\Engine\Source\Runtime\Renderer\Private\SceneRendering.cpp:4668] UnrealEditor_Renderer!TEnqueueUniqueRenderCommandType<`FRendererModule::BeginRenderingViewFamilies'::`87'::FDrawSceneCommandName,<lambda_d825e7d5a738e0bb6b7e834ee381bd9e> >::DoTask() [C:\Users\nikgi\Documents\GitHub Desktop\UnrealEngine\Engine\Source\Runtime\RenderCore\Public\RenderingThread.h:206] UnrealEditor_Renderer!TGraphTask<TEnqueueUniqueRenderCommandType<`FRendererModule::BeginRenderingViewFamilies'::`87'::FDrawSceneCommandName,<lambda_d825e7d5a738e0bb6b7e834ee381bd9e> > >::ExecuteTask() [C:\Users\nikgi\Documents\GitHub Desktop\UnrealEngine\Engine\Source\Runtime\Core\Public\Async\TaskGraphInterfaces.h:1348] UnrealEditor_Core!FNamedTaskThread::ProcessTasksNamedThread() [C:\Users\nikgi\Documents\GitHub Desktop\UnrealEngine\Engine\Source\Runtime\Core\Private\Async\TaskGraph.cpp:760] UnrealEditor_Core!FNamedTaskThread::ProcessTasksUntilQuit() [C:\Users\nikgi\Documents\GitHub Desktop\UnrealEngine\Engine\Source\Runtime\Core\Private\Async\TaskGraph.cpp:649] UnrealEditor_RenderCore!RenderingThreadMain() [C:\Users\nikgi\Documents\GitHub Desktop\UnrealEngine\Engine\Source\Runtime\RenderCore\Private\RenderingThread.cpp:415] UnrealEditor_RenderCore!FRenderingThread::Run() [C:\Users\nikgi\Documents\GitHub Desktop\UnrealEngine\Engine\Source\Runtime\RenderCore\Private\RenderingThread.cpp:541] UnrealEditor_Core!FRunnableThreadWin::Run() [C:\Users\nikgi\Documents\GitHub Desktop\UnrealEngine\Engine\Source\Runtime\Core\Private\Windows\WindowsRunnableThread.cpp:149]
原因分析
崩溃并非跳跃逻辑本身问题,而是跳跃触发角色位置/视角变化后,渲染线程在更新**虚拟阴影图(Virtual Shadow Map)**时,出现了整数类型窄化转换(如大整数类型转小整数类型)导致的数据丢失,触发了引擎的断言检查。这是UE 5.1.1版本中虚拟阴影图模块的已知渲染线程bug。
解决方案
1. 临时规避(快速解决)
在项目设置中禁用虚拟阴影图:
- 打开
编辑 > 项目设置 > 渲染 > 阴影 - 找到
虚拟阴影图选项,取消勾选启用 - 改用传统阴影(如接触阴影、软阴影),可立即消除崩溃
2. 源码修复(针对自定义编译引擎)
找到引擎源码路径下的Engine/Source/Runtime/Renderer/Private/VirtualShadowMaps/VirtualShadowMapClipmap.cpp第173行,检查触发断言的类型转换代码:
- 原代码可能存在类似
int32 SomeValue = static_cast<int32>(LargeIntValue);的窄化转换 - 修改为安全转换逻辑,比如添加范围检查:
或者根据实际场景调整类型匹配(如将目标类型改为int64 LargeIntValue = ...; check(IntFitsIn<int32>(LargeIntValue)); // 保留断言但提前验证 int32 SomeValue = static_cast<int32>(LargeIntValue);int64),避免数据丢失
3. 长期根治
将引擎升级到UE 5.1.2或更高版本,官方已在后续版本中修复了该虚拟阴影图模块的断言bug。
内容的提问来源于stack exchange,提问作者Nikola Gigić
相关产品推荐
相关产品推荐

