UE5在C++项目中判断不同平台
在Unreal Engine 5的C++代码中,可以通过以下方法判断当前运行的平台(如Android、Windows、iOS),并根据平台执行不同的逻辑:
方法1:使用预处理器宏(编译时判断)
Unreal Engine提供了一系列预定义的宏,可以在代码中直接使用:
// 示例代码:
#if PLATFORM_WINDOWS// Windows平台代码UE_LOG(LogTemp, Warning, TEXT("Running on Windows"));
#elif PLATFORM_ANDROID// Android平台代码UE_LOG(LogTemp, Warning, TEXT("Running on Android"));
#elif PLATFORM_IOS// iOS平台代码UE_LOG(LogTemp, Warning, TEXT("Running on iOS"));
#else// 其他平台(如Mac、Linux等)UE_LOG(LogTemp, Warning, TEXT("Running on other platform"));
#endif
常用宏列表:
-
PLATFORM_WINDOWS
:Windows平台(包括Win32和Win64) -
PLATFORM_ANDROID
:Android平台 -
PLATFORM_IOS
:iOS平台 -
PLATFORM_MAC
:macOS平台 -
PLATFORM_LINUX
:Linux平台
方法2:运行时判断(通过FPlatformProperties
)
如果需要动态判断平台(例如在运行时根据平台调用不同函数),可以使用以下方法:
#include "HAL/PlatformProperties.h"// 示例代码:
if (FPlatformProperties::IsWindows())
{// Windows平台逻辑
}
else if (FPlatformProperties::IsAndroid())
{// Android平台逻辑
}
else if (FPlatformProperties::IsIOS())
{// iOS平台逻辑
}
方法3:通过FPlatformMisc
获取平台名称
获取平台名称字符串,用于调试或日志输出:
#include "Misc/App.h"FString PlatformName = FPlatformMisc::GetPlatformName();
UE_LOG(LogTemp, Warning, TEXT("Current Platform: %s"), *PlatformName);// 示例输出:
// Windows -> "Windows"
// Android -> "Android"
// iOS -> "IOS"
常见应用场景
-
条件编译:
针对不同平台编译不同的代码(如使用宏PLATFORM_XXX
)。 -
平台特定功能:
例如,在移动端(Android/iOS)启用触控输入,在PC端启用键鼠输入。 -
路径处理:
不同平台的文件系统路径可能需要特殊处理(如Android的APK
资源路径)。 -
图形API适配:
根据平台选择OpenGL、Vulkan或Metal渲染后端。
注意事项
-
宏的覆盖范围:
PLATFORM_WINDOWS
包括所有Windows版本(Win32/Win64),而PLATFORM_ANDROID
包括所有Android设备(ARM/x86)。 -
平台细分:
若需区分32位和64位,可使用PLATFORM_32BITS
或PLATFORM_64BITS
。 -
编辑器与目标平台:
在编辑器(Editor)中运行时,FPlatformProperties
会返回编辑器的宿主平台(如Windows/Mac),而非目标平台。 -
官方文档参考:
查阅Unreal Engine的平台宏定义文档以获取完整列表。
通过上述方法,可以灵活实现跨平台功能的适配与优化。