基於C++程式碼的UE4學習(三十一)——建立的自己的資原始檔
阿新 • • 發佈:2020-07-31
首先建立一個繼承自UObject類的類,起名為UserAsset。
1 // Fill out your copyright notice in the Description page of Project Settings. 2 3 #pragma once 4 5 #include "CoreMinimal.h" 6 /* 7 版權所有:虎牙維護世界和平 8 部落格園地址:https://www.cnblogs.com/dlak/ 9 */ 10 #include "UObject/NoExportTypes.h" 11 #include "UserAsset.generated.h" 12 13 /** 14 * 15 */ 16 UCLASS() 17 class MYPROJECT14_API UUserAsset : public UObject 18 { 19 GENERATED_BODY() 20 21 public: 22 UUserAsset(); 23 /* 24 版權所有:虎牙維護世界和平 25 部落格園地址:https://www.cnblogs.com/dlak/ 26 */ 27 28 UPROPERTY(EditAnywhere, Category = Properties) 29 FString Name;30 }; 31 32 // Fill out your copyright notice in the Description page of Project Settings. 33 34 //以下是原始檔 35 #include "UserAsset.h" 36 37 UUserAsset::UUserAsset() { 38 Name = "Dlak"; 39 }
在建立一個Factory類,自定義的資源建立都是需要通過Factory類實現的。
1 // Fill out your copyright notice in the Description page of Project Settings.2 3 #pragma once 4 5 #include "CoreMinimal.h" 6 #include "Factories/Factory.h" 7 #include "UserAsset.h" 8 /* 9 版權所有:虎牙維護世界和平 10 部落格園地址:https://www.cnblogs.com/dlak/ 11 */ 12 #include "MyAssetFactory.generated.h" 13 14 /** 15 * 16 */ 17 UCLASS() 18 class MYPROJECT14_API UMyAssetFactory : public UFactory 19 { 20 GENERATED_BODY() 21 22 public: 23 UMyAssetFactory(); 24 /* 25 版權所有:虎牙維護世界和平 26 部落格園地址:https://www.cnblogs.com/dlak/ 27 */ 28 virtual UObject* FactoryCreateNew(UClass* InClass, UObject* InParent, FName InName, EObjectFlags Flags, UObject* Context, FFeedbackContext* Warn, FName CallingContext) override; 29 };
virtual UObject* FactoryCreateNew()是繼承自父類的方法,用於工廠建立新的資源用的方法。
1 // Fill out your copyright notice in the Description page of Project Settings. 2 3 4 #include "MyAssetFactory.h" 5 6 UMyAssetFactory::UMyAssetFactory():UFactory(){ 7 8 bCreateNew = true; 9 bEditAfterNew = false; 10 SupportedClass = UUserAsset::StaticClass();//工廠需要建立的例項型別 11 } 12 /* 13 版權所有:虎牙維護世界和平 14 部落格園地址:https://www.cnblogs.com/dlak/ 15 */ 16 17 UObject* UMyAssetFactory::FactoryCreateNew(UClass* InClass, UObject* InParent, FName InName, EObjectFlags Flags, UObject* Context, FFeedbackContext* Warn, FName CallingContext) 18 { 19 20 auto MyAsset = NewObject<UUserAsset>(InParent, InClass, InName, Flags); //因為Asset是繼承自UObject類的,所以這裡用的是NewObject 21 22 return MyAsset; 23 }
編譯後效果如下圖: