1. 程式人生 > 實用技巧 >基於C++程式碼的UE4學習(三十一)——建立的自己的資原始檔

基於C++程式碼的UE4學習(三十一)——建立的自己的資原始檔

首先建立一個繼承自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 }

編譯後效果如下圖: