目录
- bug合集
- 代码编译报错
- 1. 编译时 error C4668: 没有将“_WIN32_WINNT_WIN10_TH2”定义为预处理器宏,用“0”替换“#if/#elif”
- 2. 把组件初始化放进
BeginPlay,则蓝图类中不显示; 因为生成蓝图类只会调用构造函数 - 3. Blueprint Runtime Error: "Access None trying to read property SCharacterRef"
- 4. 报错C2143 语法错误:缺少“;”(在“*”的前面)
- 5. 无法解析的外部符号 "__declspec(dllimport) public: static enum EPhysicalSurface __cdecl UPhysicalMaterial::DetermineSurfaceType(class UPhysicalMaterial const *)" (_imp?DetermineSurfaceType@UPhysicalMaterial@@SA?AW4EPhysicalSurface@@PEBV1@@Z)
- 6. SExplosiveBarrel.cpp(19): [C4458] “HealthComp”的声明隐藏了类成员
- 7. 未能创建 PCH 的虚拟内存,打到内存堆限制
- 8. ApexDefs.h(54): [C4668] 没有将“USE_RTTI”定义为预处理器宏,用“0”替换“#if/#elif”
- 蓝图编译报错
- 逻辑错误 (展示效果有误)
- 程序崩溃 (UE闪退)
- 代码编译报错
- debug整理
bug合集
代码编译报错
1. 编译时 error C4668: 没有将“_WIN32_WINNT_WIN10_TH2”定义为预处理器宏,用“0”替换“#if/#elif”
一般为Windows中的宏和UE4冲突所致,需要用如下头文件包裹冲突的头文件:
#include "Windows/AllowWindowsPlatformTypes.h"
#include "Windows/PreWindowsApi.h"
#include "冲突的头文件" // 这里把报错涉及的头文件加上,然后整段都加入`自己.h`文件中
#include "Windows/PostWindowsApi.h"
#include "Windows/HideWindowsPlatformTypes.h"
2. 把组件初始化放进BeginPlay,则蓝图类中不显示; 因为生成蓝图类只会调用构造函数
3. Blueprint Runtime Error: "Access None trying to read property SCharacterRef"
4. 报错C2143 语法错误:缺少“;”(在“*”的前面)
找不到类,加上class声明即可class ASWeapon HoldWeapon;
5. 无法解析的外部符号 "__declspec(dllimport) public: static enum EPhysicalSurface __cdecl UPhysicalMaterial::DetermineSurfaceType(class UPhysicalMaterial const *)" (_imp?DetermineSurfaceType@UPhysicalMaterial@@SA?AW4EPhysicalSurface@@PEBV1@@Z)
- 版本问题 在
CoopGame.Build.cs中
PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore","PHYSICSCORE" });, 添加PHYSICSCORE项 - 换另一种获取表面类型的方式
EPhysicalSurface Surface =UGameplayStatics::GetSurfaceType(Hit);
6. SExplosiveBarrel.cpp(19): [C4458] “HealthComp”的声明隐藏了类成员
可能是命名冲突,将HealthComp改为BarrelHealthComp即可
7. 未能创建 PCH 的虚拟内存,打到内存堆限制
重启UE即可
8. ApexDefs.h(54): [C4668] 没有将“USE_RTTI”定义为预处理器宏,用“0”替换“#if/#elif”
将#include <Actor.h>替换为#include <GameFramework/Actor.h>即可
蓝图编译报错
1. unreal engine doesn't match the property of type HOTRELOADED 1 Object Reference
HotReload是UE的热加载机制,运行编辑器会对C++代码修改进行热加载,有些情况下会热加载失败,所以解决方案是重新运行编辑器
逻辑错误 (展示效果有误)
1. 设置了bCanCrouch=true,还是不能蹲伏 因为蓝图类中没有还原默认值
2. 绑定没响应,最后发现是Input设置成BackSpace了, 这个是退格不是空格,晕 找半天,,,最后改成Space Bar即可
原因:用错事件了

3. 无法区分不同表面,已经给不同部位设置了不同的物理材质!
没有把胶囊体对枪械的碰撞关闭,导致遮挡了Mesh的碰撞

4. 物体和地面重合
默认设置成了BlockAllDynamic,地面不属于动态物体,所以改成BlockAll,然后用Shift+End就可以置于地面之上了
5. 子组件只有Scale没有Location和Rotation / 子组件和父组件位置有偏差 / 子组件只生成在(0,0,0)
- 先检查是不是根组件
- 不是根组件,则大概率是编译问题;蓝图类先继承别的类(Actor),然后再继承回来(PickupBase),这个时候就正常了。
程序崩溃 (UE闪退)
Saved/log查看报错日志
1. 运行游戏直接闪退,因为没有绑定Owner,而在代码中又通过GetOwner():AActor来获取持有者,直接程序崩溃
2. UE运行崩溃,Fatal error: [File:D:/Build/++UE4/Sync/Engine/Source/Runtime/CoreUObject/Pri
- 打开Epic Game找到虚幻引擎,在对应的版本下拉选择验证,会对UE4版本进行重新编译
- 检查报错文件,
Rider打开项目代码并修改 - 构造函数中调用
Super()报错
3. 程序崩溃,因为TSubclassOf需要在蓝图中初始化,代码初始化比较繁琐
4. EXCEPTION_ACCESS_VIOLATION reading address
debug整理
蓝图
- 打断点
选中按F9,再按取消断点
动画debug
- 设置全局时间,慢速更好观察

服务器debug
两种方式
- 从rider打断点,进入服务器逻辑
Run->Attach to Process->搜索UE4Editor找到服务器名字(运行后控制台名字,如D:\UnrealEngine\...\UnrealEditor-Win64-DebugGame.exe)->Attach with LLDB
这样就打上断点了
- 设置运行选项下
Advanced Settings->One Process勾选,就可以正常断点了
GAS
~打开控制台,输入showdebug abilitysystem
代码
UEngine.AddOnScreenDebugMessage
if(GEngine)
{
GEngine->AddOnScreenDebugMessage(
-1,
15.f,
FColor::Blue,
FString::Printf(TEXT("Found subsystem %s"), *OnlineSubsystem->GetSubsystemName->ToString())
);
}
浙公网安备 33010602011771号