1.ue4中使用try catch时,应该在在模块的build.cs中,加入bEnableExceptions = true;不然打包会出错
2.包含第三方库时,有可能出现预处理器没有定义的情况,在库的头文件中使用预处理器进行某些判断时,会报错,解决方法:这时,在模块的build.cs中,加入bEnableUndefinedIdentifierWarnings = false;
3.包含某些外部库头文件产生:没有将“_WIN32_WINNT_WIN10_TH2”定义为预处理器宏,用“0”替换“#if/#elif 解决方法:在头文件前加入: #define WIN32_LEAN_AND_MEAN
4.boost库使用时,需要加入预定义以及取消未定义宏警告
PublicDefinitions.AddRange(new string[] { "BOOST_DISABLE_ABI_HEADERS" });
bEnableUndefinedIdentifierWarnings = false;
5.UE4 中将某些编译警告信息当成了错误,可以在对应文件中加入如下信息将错误转回警告
#pragma warning(push)//将当前警告信息入栈存储起来
#pragma warning(default:4018)//这里的4018是错误编号
你的code
#pragma warning(pop)//将栈顶存储的警告信息覆盖现在的警告信息
6.打包时如果有UE_Log输出为error类型,会打包出错。
7.插件的打包问题:
必须使用c++工程,且用到的 插件模块 的类型必须为runtime。
https://docs.unrealengine.com/zh-CN/Programming/Plugins/index.html
8.UE4 debug时查看变量,变量显示variable is optimized away and not available。
解决方法: 在想要查看变量得函数前后分别加 #pragma optimize("",off) 和 #pragma optimize("",on)
9. USkeletalMeshComponent的 SetAnimationInstanceClass 以及 SetAnimationMode 方法,蓝图中使用会crash,解决方法是在使用前先重置一下SkeletalMesh(SetSkeletalMesh)
10.ue4 c++ 的FRotator 传参是 y(pitch),z(yaw),x(roll), 不是xyz(巨坑)
11.蓝图类资源也可以通过LoadObject加载或Assetdata的loadasset加载,但是只有在编辑器模式下才会加载成功。加载后可通过object->GeneratedClass,获得对应的类型(也就是_C后缀的类名称)。
12.设置鼠标样式或是显示与否时,会出现没有立即刷新,需要移动鼠标的情况,可以使用下面的代码立即刷新鼠标
-
auto& App = FSlateApplication::Get();
-
App.QueryCursor(); //This line is refreshing the cursor (it executes fake mouse event for each platform).
13.unpossess后没有possess,那么会在一帧后重设targetview为playercontroller。所以会出现unpossess后跟settargetview无效的情况。可以延迟一帧后设置settargetview
14.插件的代码重新编译不支持代码的热加载
15. 异步加载资源在没有指定开启多线程加载时,是在游戏线程中进行的。 请先确保异步加载线程已经启用,否则异步加载是有可能在游戏线程(主线程)分时加载的。 在项目设置,Streaming分页中,确保Async Loading Thread Enabled打开。或者在DefaultEngine.ini的[/Script/Engine.StreamingSettings]内加上s.AsyncLoadingThreadEnabled=True。或者,在你的游戏进程/编辑器启动进程加上参数-AsyncLoadingThread。 编辑器模式,以及编辑器的standalone模式下多线程加载无法启用。
16.注意:资源没有被引用时,会标记为回收,回收时间大概是几秒到几分钟。你也可以使用GEngine->ForceGarbageCollection(true);强制立即回收。