虚幻引擎
文档
理解基础概念
关卡
蓝图
编程
class ENGINE_API
是一个宏,用于控制类的导出行为,确保类在不同模块(DLL或共享库)之间正确使用。
杂项
源代码分析
其他
默认运行测试位置:菜单栏中央,三角形按钮。或者按
Play Modes 运行(测试)模式主要有两种,编辑器中运行(Play In Editor)或在编辑器中模拟(Simulate In Editor)。
PIE PIE的意思是:Play,玩。你做的游戏是如何让玩家操控游玩的,在这里就是如何操控游玩的。(比如第一人称游戏,PIE下就是鼠标控制摄像机视角旋转,方向键移动,)
SIE 的意思是:模拟,测试。在这个模式下相当于是上帝视角。此时游戏在运行,但是我们仍然可以用之前做游戏(摆放地图关卡Actor、修改运行时参数)的方式修改这个世界。
PIE和SIE切换 在PIE模式下,shift + F1可以获得鼠标控制权(一般第一人称第三人称下鼠标用于旋转方向摄像头,不会出现光标)。然后点击工具栏的弹出(Eject)可以切换到SIE
你也可以点击 控制(Possess) 功能的快捷键(F10)来从在编辑器中模拟(SIE)切换到在编辑器中运行(PIE)。
加速构建过程
每次执行hutb的make的操作时,都会出现
Using 'git status' to determine working set for adaptive non-unity build (D:\work\workspace\UnrealEngine).
Waiting for 'git status' command to complete
Target is up to date
Total execution time: 2.38 seconds
.git
目录 来禁用 UBT 的 git status
调用,达到加速构建流程的作用。
此功能用于从 Unity 构建中排除大多数迭代文件。这应该会降低编译速度(如果你经常构建引擎,这个功能确实很有用,但大多数情况下并非如此)。
要禁用此行为,您可以更改 Engine\Saved\UnrealBuildTool\BuildConfiguration.xml
里的<Configuration> </Configuration>
中添加:
<SourceFileWorkingSet>
<Provider>None</Provider>
</SourceFileWorkingSet>
插件
USD
Universal Scene Description (USD) 是通用场景描述,一个开放且可扩展的生态系统,用于在 3D 世界中描述、组合、模拟和协作,最初由皮克斯动画工作室发明;是 Omniverse 使用的文件格式,人称元宇宙的 HTML。
什么是仿真就绪(SimReady)素材
仿真就绪(SimReady)素材是虚拟世界的基础模块,SimReady 素材不仅仅是 3D 物件,它们包含基于 Universal Scene Description (USD) 构建的准确物理属性、行为和连接的数据流。
编译
编译UE时报错:使用“override”声明的成员函数不能重写基类成员
出错位置:D:\work\workspace\UnrealEngine\Engine\Source\Runtime\CoreUObject\Public\UObject\CoreNet.h
345 行
virtual FArchive& operator<<(FSoftObjectPath& Value) override;
编译AirSim后,启动编译器崩溃
报错信息:
Assertion failed: ResourceTableFrameCounter == INDEX_NONE [File:D:/work/workspace/UnrealEngine/Engine/Source/Runtime/Windows/D3D11RHI/Private/D3D11Texture.cpp] [Line: 2260]
UE4Editor_Core!AssertFailedImplV() [D:\work\workspace\UnrealEngine\Engine\Source\Runtime\Core\Private\Misc\AssertionMacros.cpp:104]
UE4Editor_Core!FDebug::CheckVerifyFailedImpl() [D:\work\workspace\UnrealEngine\Engine\Source\Runtime\Core\Private\Misc\AssertionMacros.cpp:461]
UE4Editor_D3D11RHI!FD3D11DynamicRHI::RHIUpdateTextureReference() [D:\work\workspace\UnrealEngine\Engine\Source\Runtime\Windows\D3D11RHI\Private\D3D11Texture.cpp:2260]
UE4Editor_RHI!FRHICommandListImmediate::UpdateTextureReference() [D:\work\workspace\UnrealEngine\Engine\Source\Runtime\RHI\Private\RHICommandList.cpp:2730]
UE4Editor_Engine!FStreamableTextureResource::FinalizeStreaming() [D:\work\workspace\UnrealEngine\Engine\Source\Runtime\Engine\Private\Rendering\StreamableTextureResource.cpp:220]
UE4Editor_Engine!FTexture2DUpdate::DoFinishUpdate() [D:\work\workspace\UnrealEngine\Engine\Source\Runtime\Engine\Private\Streaming\Texture2DUpdate.cpp:158]
UE4Editor_Engine!FTexture2DStreamIn_DDC_AsyncCreate::Finalize() [D:\work\workspace\UnrealEngine\Engine\Source\Runtime\Engine\Private\Streaming\Texture2DStreamIn_DDC_AsyncCreate.cpp:84]
UE4Editor_Engine!TRenderAssetUpdate<FTexture2DUpdateContext>::TickInternal() [D:\work\workspace\UnrealEngine\Engine\Source\Runtime\Engine\Private\Streaming\RenderAssetUpdate.inl:76]
UE4Editor_Engine!<lambda_c13beac94fedf293002b1e0b20710a81>::operator()() [D:\work\workspace\UnrealEngine\Engine\Source\Runtime\Engine\Private\Streaming\RenderAssetUpdate.cpp:270]
UE4Editor_Engine!TEnqueueUniqueRenderCommandType<`FRenderAssetUpdate::ScheduleRenderTask'::`2'::RenderAssetUpdateCommandName,<lambda_c13beac94fedf293002b1e0b20710a81> >::DoTask() [D:\work\workspace\UnrealEngine\Engine\Source\Runtime\RenderCore\Public\RenderingThread.h:183]
UE4Editor_Engine!TGraphTask<TEnqueueUniqueRenderCommandType<`FRenderAssetUpdate::ScheduleRenderTask'::`2'::RenderAssetUpdateCommandName,<lambda_c13beac94fedf293002b1e0b20710a81> > >::ExecuteTask() [D:\work\workspace\UnrealEngine\Engine\Source\Runtime\Core\Public\Async\TaskGraphInterfaces.h:886]
UE4Editor_Core!FNamedTaskThread::ProcessTasksNamedThread() [D:\work\workspace\UnrealEngine\Engine\Source\Runtime\Core\Private\Async\TaskGraph.cpp:709]
UE4Editor_Core!FNamedTaskThread::ProcessTasksUntilQuit() [D:\work\workspace\UnrealEngine\Engine\Source\Runtime\Core\Private\Async\TaskGraph.cpp:601]
UE4Editor_RenderCore!RenderingThreadMain() [D:\work\workspace\UnrealEngine\Engine\Source\Runtime\RenderCore\Private\RenderingThread.cpp:373]
UE4Editor_RenderCore!FRenderingThread::Run() [D:\work\workspace\UnrealEngine\Engine\Source\Runtime\RenderCore\Private\RenderingThread.cpp:509]
UE4Editor_Core!FRunnableThreadWin::Run() [D:\work\workspace\UnrealEngine\Engine\Source\Runtime\Core\Private\Windows\WindowsRunnableThread.cpp:86]
原因 :把Ue4NoEditor的附加地图包和从源码编译的ue4editor搞混了,所以把附加地图的引擎文件夹文件放到了unreal4.26.2的文件夹里。
未使用的 暂时解决办法 :直接注释掉 D3D11Texture.cpp 中引发错误的那行代码 (l. 2260) 。 或者 改配置文件
Carla 编辑器运行崩溃:
LoginId:bc22576a452b36c1831fe8942b55e57a
EpicAccountId:77cf3795af004e58a037e9c9d4a5aa0d
Unhandled Exception: EXCEPTION_STACK_OVERFLOW
user32
user32
sdk_legacy_steering_wheel_x64
user32
user32
sdk_legacy_steering_wheel_x64
使用vs2022编译UE4.26时候报错
LIN110 无法打开文件“D:\work\workspace\UnrealEngine\Engine\Binaries\Win64\UE4Editor-Engine.dll”
LIN110 无法打开文件“D:\work\workspace\UnrealEngine\Engine\Binaries\Win64\UE4Editor-UnrealEd.dll”
LIN110 无法打开文件“D:\work\workspace\UnrealEngine\Engine\Binaries\Win64\UE4Editor-Chaos.dll”
LIN110 无法打开文件“D:\work\workspace\UnrealEngine\Engine\Binaries\Win64\UE4Editor-DetailCustomization.dll”
解决 :使用资源监视器
找到UEEditor.exe
对应的进程,结束进程,然后就可以启动虚幻编辑器了(原因不明)。
编译警告:Detected compiler newer than Visual Studio 2019, please update min version checking in WindowsPlatformCompilerSetup.h
如何修改编译使用的CPU核心数量
修改Engine\Saved\UnrealBuildTool\BuildConfiguration.xml文件中的配置:
<?xml version="1.0" encoding="utf-8" ?>
<Configuration xmlns="https://www.unrealengine.com/BuildConfiguration">
<ProjectFileGenerator>
<Format>VisualStudio2019</Format>
</ProjectFileGenerator>
<ParallelExecutor>
<ProcessorCountMultiplier>0.75</ProcessorCountMultiplier>
<MaxProcessorCount>24</MaxProcessorCount>
</ParallelExecutor>
</Configuration>
否则还可能 报错 :
c1xx: fatal error C1076: 编译器限制: 达到内部堆限制
[3/37] DReyeVRGameMode.gen.cpp
c1xx: error C3859: 未能创建 PCH 的虚拟内存
c1xx: note: 系统返回代码 1455: The paging file is too small for this operation to complete.
源代码管理
从原来的仓库迁移到OpenHUTB的引擎仓库
1.修改文件.git/config
远端的仓库地址
[remote "origin"]
url = https://github.com/OpenHUTB/engine.git
fetch = +refs/heads/*:refs/remotes/origin/*
2.合并两个不相关的仓库:
git pull -f origin hutb --allow-unrelated-histories
3.丢弃本地提交,强制回到线上最新版本:
git reset --hard origin/hutb