Unreal4源码拆解-UnrealBuildTool功能流程解析-UnrealBuildTool的UnrealTargetPlatform
知乎专栏:UBT源码解析
前言
我们构建的目标平台类,其实每个平台的目标平台类实例就是由一个名称和一个ID组成
与UniqueStringRegistry强耦合,UniqueStringRegistry可以看:
本人写的UniqueStringRegistry介绍
类 public partial struct UnrealTargetPlatform
成员变量
private int Id;
private static UniqueStringRegistry StringRegistry;
- 主要功能:利用UniqueStringRegistry存了一个ID和一个独特字符串
public static UnrealTargetPlatform Win32 = FindOrAddByName(“Win32”);
public static UnrealTargetPlatform Win64 = FindOrAddByName(“Win64”);
public static UnrealTargetPlatform HoloLens = FindOrAddByName(“HoloLens”);
public static UnrealTargetPlatform Mac = FindOrAddByName(“Mac”);
public static UnrealTargetPlatform XboxOne = FindOrAddByName(“XboxOne”);
public static UnrealTargetPlatform PS4 = FindOrAddByName(“PS4”);
public static UnrealTargetPlatform IOS = FindOrAddByName(“IOS”);
public static UnrealTargetPlatform Android = FindOrAddByName(“Android”);
public static UnrealTargetPlatform HTML5 = FindOrAddByName(“HTML5”);
public static UnrealTargetPlatform Linux = FindOrAddByName(“Linux”);
public static UnrealTargetPlatform LinuxAArch64 = FindOrAddByName(“LinuxAArch64”);
public static UnrealTargetPlatform AllDesktop = FindOrAddByName(“AllDesktop”);
public static UnrealTargetPlatform TVOS = FindOrAddByName(“TVOS”);
public static UnrealTargetPlatform Switch = FindOrAddByName(“Switch”);
public static UnrealTargetPlatform Lumin = FindOrAddByName(“Lumin”);
- 主要功能:在main函数执行之前注册字符串和ID
- 我们可以看到具体内容
- Platform ID is 0 Name is Win32
- Platform ID is 1 Name is Win64
- Platform ID is 2 Name is HoloLens
- Platform ID is 3 Name is Mac
- Platform ID is 4 Name is XboxOne
- Platform ID is 5 Name is PS4
- Platform ID is 6 Name is IOS
- Platform ID is 7 Name is Android
- Platform ID is 8 Name is HTML5
- Platform ID is 9 Name is Linux
- Platform ID is 10 Name is LinuxAArch64
- Platform ID is 11 Name is AllDesktop
- Platform ID is 12 Name is TVOS
- Platform ID is 13 Name is Switch
- Platform ID is 14 Name is Lumin
- 所以我们可以看到其实UnrealTargetPlatform就是由一个ID和一个平台名称组成的。
成员函数
篇幅受限
private static UniqueStringRegistry GetUniqueStringRegistry()
- 创建UniqueStringRegistry实例,所有UnrealTargetPlatform类实例共用一个。
static private UnrealTargetPlatform FindOrAddByName(string Name)
- 新建一个UnrealTargetPlatform实例,注册独特字符串,获取ID存到UnrealTargetPlatform实例中。
public static bool operator ==(UnrealTargetPlatform A, UnrealTargetPlatform B)
public static bool operator !=(UnrealTargetPlatform A, UnrealTargetPlatform B)
- 判断两个UnrealTargetPlatform的ID是否相同
public override bool Equals(object B)
public override int GetHashCode()
- 直接用ID当作哈希值
public override string ToString()
- 返回独特字符串
public static public bool TryParse(string Name, out UnrealTargetPlatform Platform)
- 把输入的第二个参数的Platform.ID变成第一个参数Name对应的ID
static public UnrealTargetPlatform Parse(string Name)
- 新构造UnrealTargetPlatform把Name和ID变成传入参数独特字符串和对应的ID
public static UnrealTargetPlatform[] GetValidPlatforms()
- 根据类内的UniqueStringRegistry的所有字符串和ID,创建一大串新的UnrealTargetPlatform,返回。
public static string[] GetValidPlatformNames()
- 返回类内的UniqueStringRegistry的所有字符串
public static bool IsValidName(string Name)
- 返回类内的UniqueStringRegistry中是否有输入参数的独特字符串
public bool IsInGroup(UnrealPlatformGroup Group)
UEBuildPlatform中会有以组织(比如Microsoft)为key,一坨UnrealTargetPlatform为value的字典Dictionary<UnrealPlatformGroup, List<UnrealTargetPlatform>>
检测该对象是否在给定参数Group中