【UE4 基礎知識】一些相關宏:Core、UBT、平台


Core 宏

主要用於反射

  • UCLASS()

  • USTRUCT()

  • UENUM()

  • UPROPERTY()

  • UFUNCTION()

  • UMETA()

  • UPARAM()

  • GENERATED_BODY() 和 GENERATED_UCLASS_BODY() 的區別 ( from UE4 C++ UCLASS構造函數易出錯分析 )

    • GENERATED_BODY() (現在一般都用這個了,另外一個屬於比較老的版本)
      如果定義的是GENERATED_BODY(),那么意味着我不需要使用父類的構造函數,也就是說,我不能直接使用父類的聲明,但是,我需要去實現的時候,我就必須自己去聲明,否則就會報錯。

      UCLASS()
      class MYCHARACTER_API AMyCharacter : public ACharacter
      {
          GENERATED_BODY()
      public:
          AMyCharacter(const FObjectInitializer& ObjectInitializer);    
      };
      
      //如果不去聲明自己的構造函數,就會報錯: error C2084
      AMyCharacter::AMyCharacter(const FObjectInitializer& ObjectInitializer)
          : Super(ObjectInitializer)
      {}  
      
    • GENERATED_UCLASS_BODY()
      如果定義的是GENERATED_UCLASS_BODY(),那么意味着我使用父類的構造函數,也就是說,我不需要為自己聲明構造函數,直接去實現父類聲明那個構造函數。

      UCLASS()
      class MYCHARACTER_API AMyCharacter : public ACharacter
      {
          GENERATED_UCLASS_BODY()
      };
      
      AMyCharacter::AMyCharacter(const FObjectInitializer& ObjectInitializer)
          : Super(ObjectInitializer)
      {}
      
      // 如果還去聲明自己的構造函數,就會報錯: error C2535:
      UCLASS()
      class MYCHARACTER_API AMyCharacter : public ACharacter
      {
          GENERATED_UCLASS_BODY()       
      public:
          AMyCharacter(const FObjectInitializer& ObjectInitializer);
      };
      
  • 可查看 Engine\Source\Runtime\CoreUObject\Public\UObject\ObjectMacros.h

  • 本文原創鏈接


UBT 相關

  • WITH_EDIROT (cpp)

    #if WITH_EDITOR    //是否在用編輯器編譯
    ...
    #endif
    
    if(GIsEdior)  // GIsEdior 全局變量,是否再編輯(PIE)模式下運行
    
  • WITH_EDITORONLY_DATA (.h 反射需要)
    包裹 UPROPERTY()、UFunction()

    #if WITH_EDITORONLY_DATA 
    UPROPERTY()
        FString ActorName;
    #endif
    
  • 所有 \Engine\Source\Runtime\Core\Public\Misc\Build.h

    /*----------------------------------------------------------------------------
    	Mandatory bridge options coming from UBT, do not modify directly!
    ----------------------------------------------------------------------------*/
    
    /**
     * Whether we are compiling with the editor; must be defined by UBT
     */
    #ifndef WITH_EDITOR
    	#define WITH_EDITOR	0 // for auto-complete
    	#error UBT should always define WITH_EDITOR to be 0 or 1
    #endif
    
    /**
     * Whether we are compiling with the engine; must be defined by UBT
     */
    #ifndef WITH_ENGINE
    	#define WITH_ENGINE	0 // for auto-complete
    	#error UBT should always define WITH_ENGINE to be 0 or 1
    #endif
    

運行模式相關

  • 使用實例

    #if UE_BUILD_SHIPPING
     // do mobile specific stuff
    #endif
    
  • \Engine\Source\Runtime\Core\Public\Misc\Build.h

    /*--------------------------------------------------------------------------------
    	Build configuration coming from UBT, do not modify
    --------------------------------------------------------------------------------*/
    
    // Set any configuration not defined by UBT to zero
    #ifndef UE_BUILD_DEBUG
    	#define UE_BUILD_DEBUG				0
    #endif
    #ifndef UE_BUILD_DEVELOPMENT
    	#define UE_BUILD_DEVELOPMENT		0
    #endif
    #ifndef UE_BUILD_TEST
    	#define UE_BUILD_TEST				0
    #endif
    #ifndef UE_BUILD_SHIPPING
    	#define UE_BUILD_SHIPPING			0
    #endif
    #ifndef UE_GAME
    	#define UE_GAME						0
    #endif
    #ifndef UE_EDITOR
    	#define UE_EDITOR					0
    #endif
    #ifndef UE_BUILD_SHIPPING_WITH_EDITOR
    	#define UE_BUILD_SHIPPING_WITH_EDITOR 0
    #endif
    #ifndef UE_BUILD_DOCS
    	#define UE_BUILD_DOCS				0
    #endif
    
    /** 
     *   Whether compiling for dedicated server or not.
     */
    #ifndef UE_SERVER
    	#define UE_SERVER					0
    #endif
    

平台相關

  • 使用示例

    #if PLATFORM_IOS || PLATFORM_ANDROID
     // do mobile specific stuff
    #endif
    
    // Runtime/Core/Public/HAL/PlatformProcess.h
    #if PLATFORM_WINDOWS
    #include "Windows/WindowsPlatformProcess.h"
    #elif PLATFORM_PS4
    #include "PS4/PS4Process.h"
    #elif PLATFORM_XBOXONE
    #include "XboxOne/XboxOneProcess.h"
    #elif PLATFORM_MAC
    #include "Mac/MacPlatformProcess.h"
    #elif PLATFORM_IOS
    #include "IOS/IOSPlatformProcess.h"
    #elif PLATFORM_ANDROID
    #include "Android/AndroidProcess.h"
    #elif PLATFORM_HTML5
    #include "HTML5/HTML5PlatformProcess.h"
    #elif PLATFORM_LINUX
    #include "Linux/LinuxPlatformProcess.h"
    #elif PLATFORM_SWITCH
    #include "Switch/SwitchPlatformProcess.h"
    #endif
    
  • 平台宏定義 \Engine\Source\Runtime\Core\Public\HAL\Platform.h

    // define all other platforms to be zero
    //@port Define the platform here to be zero when compiling for other platforms
    #if !defined(PLATFORM_WINDOWS)
    	#define PLATFORM_WINDOWS 0
    #endif
    #if !defined(PLATFORM_XBOXONE)
    	#define PLATFORM_XBOXONE 0
    #endif
    #if !defined(PLATFORM_MAC)
    	#define PLATFORM_MAC 0
    	// If PLATFORM_MAC is defined these will be set appropriately in
    	// MacPlatform.h
    	#define PLATFORM_MAC_X86 0
    	#define PLATFORM_MAC_ARM64 0
    #endif
    #if !defined(PLATFORM_PS4)
    	#define PLATFORM_PS4 0
    #endif
    #if !defined(PLATFORM_IOS)
    	#define PLATFORM_IOS 0
    #endif
    #if !defined(PLATFORM_TVOS)
    	#define PLATFORM_TVOS 0
    #endif
    #if !defined(PLATFORM_ANDROID)
    	#define PLATFORM_ANDROID 0
    #endif
    #if !defined(PLATFORM_ANDROID_ARM)
    	#define PLATFORM_ANDROID_ARM 0
    #endif
    #if !defined(PLATFORM_ANDROID_ARM64)
    	#define PLATFORM_ANDROID_ARM64 0
    #endif
    #if !defined(PLATFORM_ANDROID_X86)
    	#define PLATFORM_ANDROID_X86 0
    #endif
    #if !defined(PLATFORM_ANDROID_X64)
    	#define PLATFORM_ANDROID_X64 0
    #endif
    #if !defined(PLATFORM_ANDROID_VULKAN)
    	#define PLATFORM_ANDROID_VULKAN 0
    #endif
    #if !defined(PLATFORM_ANDROIDGL4)
    	#define PLATFORM_ANDROIDGL4 0
    #endif
    #if !defined(PLATFORM_LUMINGL4)
    	#define PLATFORM_LUMINGL4 0
    #endif
    #if !defined(PLATFORM_LUMIN)
    	#define PLATFORM_LUMIN 0
    #endif
    #if !defined(PLATFORM_APPLE)
    	#define PLATFORM_APPLE 0
    #endif
    #if !defined(PLATFORM_LINUX)
    	#define PLATFORM_LINUX 0
    #endif
    #if !defined(PLATFORM_LINUXAARCH64)
    	#define PLATFORM_LINUXAARCH64 0
    #endif
    #if !defined(PLATFORM_SWITCH)
    	#define PLATFORM_SWITCH 0
    #endif
    #if !defined(PLATFORM_FREEBSD)
    	#define PLATFORM_FREEBSD 0
    #endif
    #if !defined(PLATFORM_UNIX)
    	#define PLATFORM_UNIX 0
    #endif
    #if !defined(PLATFORM_MICROSOFT)
    	#define PLATFORM_MICROSOFT 0
    #endif
    #if !defined(PLATFORM_HOLOLENS)
    #define PLATFORM_HOLOLENS 0
    #endif
    

參考


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM