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

Unreal Engine编辑器自定义继承资产类型替换原生资产类型问题

问题修复方案

核心原因

你的URecoilPattern未标记为UCLASS,且工厂逻辑未限制仅创建自身类型,导致Unreal将你的工厂视为UCurveFloat的候选创建工厂,覆盖了原生曲线的创建流程。

具体修改步骤

1. 修复RecoilPattern.h,添加UCLASS宏

必须将自定义资产类标记为UCLASS,Unreal才能正确识别其为独立资产类型,避免与父类UCurveFloat混淆:

#pragma once

#include "CoreMinimal.h"
#include "Curves/CurveFloat.h"
#include "RecoilPattern.generated.h"

UCLASS()
class URecoilPattern : public UCurveFloat
{
    GENERATED_BODY()
};

注意:必须添加#include "RecoilPattern.generated.h",这是Unreal反射系统的强制要求。

2. 限制工厂仅创建URecoilPattern

修改RecoilPatternFactory.cpp,确保工厂只响应明确创建URecoilPattern的请求,拒绝处理父类UCurveFloat的创建:

#include "RecoilPatternFactory.h"
#include "RecoilPattern.h"

URecoilPatternFactory::URecoilPatternFactory(const FObjectInitializer& ObjectInitializer) : Super(ObjectInitializer)
{
    SupportedClass = URecoilPattern::StaticClass();
    bCreateNew = true;
    // 禁止工厂处理导入操作,仅用于创建新资产
    bEditorImport = false;
}

UObject* URecoilPatternFactory::FactoryCreateNew(UClass* Class, UObject* InParent, FName Name, EObjectFlags Flags, UObject* Context, FFeedbackContext* Warn)
{
    // 仅当请求的类是URecoilPattern或其子类时才创建,否则返回空让原生工厂处理
    if (!Class->IsChildOf(URecoilPattern::StaticClass()))
    {
        return nullptr;
    }
    return NewObject<URecoilPattern>(InParent, Class, Name, Flags, Context);
}

3. 修正AssetTypeActions中的文本错误

你的RecoilPatternActions.cpp中使用了错误的INVTEXT宏,替换为Unreal标准的本地化宏LOCTEXT:

#include "RecoilPatternActions.h"
#include "RecoilPattern.h"

#define LOCTEXT_NAMESPACE "RecoilPatternActions"

UClass* FRecoilPatternAssetTypeActions::GetSupportedClass() const
{
    return URecoilPattern::StaticClass();
}

FText FRecoilPatternAssetTypeActions::GetName() const
{
    return LOCTEXT("RecoilPatternAssetName", "Recoil Pattern");
}

FColor FRecoilPatternAssetTypeActions::GetTypeColor() const
{
    return FColor(78, 40, 165);
}

uint32 FRecoilPatternAssetTypeActions::GetCategories()
{
    return EAssetTypeCategories::Misc;
}

#undef LOCTEXT_NAMESPACE

4. 补充模块依赖(可选但推荐)

在RecoilPattern.uplugin文件中明确添加AssetTools依赖,确保模块加载顺序正确:

{
    "Modules": [
        {
            "Name": "RecoilPattern",
            "Type": "Editor",
            "LoadingPhase": "PostEngineInit",
            "Dependencies": [
                "Core",
                "CoreUObject",
                "Engine",
                "AssetTools"
            ]
        }
    ]
}

修复原理

  • 给URecoilPattern添加UCLASS宏后,Unreal会将其识别为独立资产类,不再与UCurveFloat共享创建逻辑。
  • 工厂中添加类检查,确保只处理自身类型的创建请求,让原生UCurveFloat的工厂正常工作。
  • 修正本地化宏,保证右键菜单中的资产名称正确显示。

内容的提问来源于stack exchange,提问作者charan vendra

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 05:05:01