问题:
我正在尝试在虚幻引擎中制作自定义曲线资源类型并将其添加到菜单中,以便用户可以创建曲线资源。我的资产称为
RecoilPattern
,它继承自 UCurveFloat
。当我在内容浏览器中右键单击并转到其他部分时,该资源显示正常。问题是,当我转到原始 Curve
资源并创建 Float Curve
时,它正在创建 Recoil Pattern
。
我该如何解决这个问题?
供参考,这是我的代码:
RecoilPatternModule.h:
#pragma once
#include "CoreMinimal.h"
#include "Modules/ModuleManager.h"
#include "RecoilPatternActions.h"
class FRecoilPatternModule : public IModuleInterface
{
public:
/** IModuleInterface implementation */
virtual void StartupModule() override;
virtual void ShutdownModule() override;
private:
TSharedPtr<FRecoilPatternAssetTypeActions> RecoilPatternAssetTypeActions;
};
RecoilPatternModule.cpp:
#include "RecoilPatternModule.h"
#define LOCTEXT_NAMESPACE "FRecoilPatternModule"
void FRecoilPatternModule::StartupModule()
{
RecoilPatternAssetTypeActions = MakeShared<FRecoilPatternAssetTypeActions>();
FAssetToolsModule::GetModule().Get().RegisterAssetTypeActions(RecoilPatternAssetTypeActions.ToSharedRef());
}
void FRecoilPatternModule::ShutdownModule()
{
if (!FModuleManager::Get().IsModuleLoaded("AssetTools")) return;
FAssetToolsModule::GetModule().Get().UnregisterAssetTypeActions(RecoilPatternAssetTypeActions.ToSharedRef());
}
#undef LOCTEXT_NAMESPACE
IMPLEMENT_MODULE(FRecoilPatternModule, RecoilPattern)
RecoilPatternFactory.h:
#pragma once
#include "CoreMinimal.h"
#include "Factories/Factory.h"
#include "RecoilPatternFactory.generated.h"
/**
* Factory that creates recoil curve assets
*/
UCLASS(MinimalAPI)
class URecoilPatternFactory : public UFactory
{
GENERATED_UCLASS_BODY()
// UFactory interface
URecoilPatternFactory();
UObject* FactoryCreateNew(UClass* Class, UObject* InParent, FName Name, EObjectFlags Flags, UObject* Context, FFeedbackContext* Warn);
// End of UFactory interface
};
RecoilPatternFactory.cpp:
#include "RecoilPatternFactory.h"
#include "RecoilPattern.h"
URecoilPatternFactory::URecoilPatternFactory(const FObjectInitializer& ObjectInitializer) : Super(ObjectInitializer)
{
SupportedClass = URecoilPattern::StaticClass();
bCreateNew = true;
}
UObject* URecoilPatternFactory::FactoryCreateNew(UClass* Class, UObject* InParent, FName Name, EObjectFlags Flags, UObject* Context, FFeedbackContext* Warn)
{
return NewObject<URecoilPattern>(InParent, Class, Name, Flags, Context);
}
RecoilPatternActions.h:
#pragma once
#include "CoreMinimal.h"
#include "AssetTypeActions_Base.h"
class FRecoilPatternAssetTypeActions : public FAssetTypeActions_Base
{
public:
FText GetName() const override;
UClass* GetSupportedClass() const override;
FColor GetTypeColor() const override;
uint32 GetCategories() override;
};
RecoilPatternActions.cpp:
#include "RecoilPatternActions.h"
#include "RecoilPattern.h"
UClass* FRecoilPatternAssetTypeActions::GetSupportedClass() const
{
return URecoilPattern::StaticClass();
}
FText FRecoilPatternAssetTypeActions::GetName() const
{
return INVTEXT("Recoil Pattern");
}
FColor FRecoilPatternAssetTypeActions::GetTypeColor() const
{
return FColor(78, 40, 165);
}
uint32 FRecoilPatternAssetTypeActions::GetCategories()
{
return EAssetTypeCategories::Misc;
}
RecoilPattern.h:
#pragma once
#include "CoreMinimal.h"
#include "Curves/CurveFloat.h"
class URecoilPattern : public UCurveFloat
{
};
RecoilPattern.cpp:
#include "RecoilPattern.h"
我已经通过将我的 RecoilPatter.h 更改为以下内容来修复此问题:
UCLASS(BlueprintType, MinimalAPI)
class URecoilPattern : public UCurveBase
{
GENERATED_UCLASS_BODY()
}