UE4查询避免FAssetRegistryModule接口在PIE与独立模式执行的宏
UE4 AssetCreated接口运行模式调用限制解决方案
你当前使用的WITH_EDITOR编译宏仅能区分程序是否为编辑器构建版本,无法区分编辑器是否处于游戏运行状态,PIE、编辑器内启动的Standalone模式都属于编辑器构建下的运行态,依然满足WITH_EDITOR条件,所以会执行代码触发崩溃。
要实现仅在纯编辑器编辑模式执行,PIE、Standalone模式都不执行的需求,需要在编译宏内部增加运行时状态判断,正确写法如下:
#if WITH_EDITOR if (GIsEditor && !GIsPlayInEditor) { FAssetRegistryModule::AssetCreated(DynMaterial); } #endif
判断逻辑说明
- 外层
WITH_EDITOR宏必须保留:FAssetRegistryModule是编辑器专属模块,非编辑器打包版本中不存在该模块,不加宏会导致打包时报错 GIsEditor:运行时判断当前进程是否为编辑器进程,和编译宏逻辑对应做双重校验GIsPlayInEditor:只要是编辑器内启动的游戏运行场景,包括选中视口PIE、编辑器启动Standalone模式都会返回true,取反即可过滤掉所有游戏运行态场景
如果你的代码上下文可以拿到当前UWorld指针,也可以用世界类型判断替代全局变量判断,稳定性更高:
#if WITH_EDITOR if (WorldPtr && WorldPtr->GetWorldType() == EWorldType::Editor) { FAssetRegistryModule::AssetCreated(DynMaterial); } #endif
内容的提问来源于stack exchange,提问作者Dimitrios Ververidis
相关产品推荐
相关产品推荐

