You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 04:15:04