在做plugin的時候要添加功能代碼,添加的類無法編譯通過。提示需要包含.generated.h 但是編譯不通過又沒有這個文件。
這就尷尬了。
下面提供最簡單的配置,通過復制下面代碼。編譯通過后再自行擴建
代碼結構如下:紅框內是我需要新增的一個類 ImageLoaderComponent
ImageLoaderPrivatePCH.h
// Copyright 1998-2016 Epic Games, Inc. All Rights Reserved. // You should place include statements to your module's private header files here. You only need to // add includes for headers that are used in most of your module's source files though. // #include "CoreUObject.h" #include "Engine.h" #include "ImageLoader.h" //你自己模塊的.h文件
內部公共頭文件需要引用 Engine 和 Uobject , 還有你自己模塊的模塊頭文件
ImageLoaderComponent.h
// Copyright 1998-2016 Epic Games, Inc. All Rights Reserved. #pragma once #include "ImageLoaderComponent.generated.h" /************************************************************************/ /* 你自己的類 */ /************************************************************************/ UCLASS() class UImageLoaderComponent : public UObject { GENERATED_UCLASS_BODY() };
新建的類需要引用 filename.generated.h ,因為可能涉及到引擎模塊庫的調用,所以需要用generated做熱部署相關的工作(猜的)
以后頭文件的引用列表不需要擴展,擴展的時候放到PCH文件里,譬如引用了其他庫,或者其他引擎功能,在PCH中添加引用,並於Build.cs中添加關聯
ImageLoaderComponent.cpp
// Copyright 1998-2016 Epic Games, Inc. All Rights Reserved. #include "ImageLoaderPrivatePCH.h" #include "ImageLoaderComponent.h" /************************************************************************/ /* 你自己的類實現(構造函數) */ /************************************************************************/ UImageLoaderComponent::UImageLoaderComponent(const FObjectInitializer& ObjectInitializer) : Super(ObjectInitializer) { }
實現文件當然引用 PCH 以及這個類的聲明文件。
使用過程中除了PCH引用了的庫外,內部使用過程中用到的.h寫在當前cpp這里,防止文件污染。
然后編譯通過后就可以歡快地使用UE了。