UnrealBuildTool的UnrealTargetPlatform-Unreal4源码拆解-UnrealBuildTool功能流程解析

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,一坨UnrealTargetPlatformvalue的字典Dictionary<UnrealPlatformGroup, List<UnrealTargetPlatform>>
检测该对象是否在给定参数Group中

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值