HIKPropertySetState 包含一个称为特性的大型配置选项集,用于定义您的角色以及控制 HumanIK 解算器的行为。所有可能的特性在 HIKProperty 枚举中标识。
每个特性都有一个模式,用于指示 HumanIK 解算器是否应启用其配置选项。许多特性还指示该解算器应在其计算中使用的值。
创建 HIKPropertySetState 时,会为处于该状态的每个特性指定默认模式和默认值,您可以动态更改它们。
并非所有特性都接受所有模式。每个特性接受的模式由特性的模式类型指示。可能的模式类型列在 HIKPropertyModeType 枚举中:HIKPropertyNoMode、HIKPropertyOffOn、HIKPropertyOffAutoUser 或 HIKPropertyAutoUser。
要在 HIKPropertySetState 中设置特性的当前模式,请调用 HIKSetPropertyMode() 函数。
例如,HIKHandFloorContactId 特性具有模式类型 HIKPropertyOffOn,因此,下面的第一行激活该特性。HIKAnkleHeightCompensationId 特性具有模式类型 HIKPropertyOffAutoUser,因此,下面的第二行激活该特性,并使 HumanIK 将其用户定义的值考虑在内。
HIKSetPropertyMode(MyPropertyState, HIKHandFloorContactId, 1); HIKSetPropertyMode(MyPropertyState, HIKAnkleHeightCompensationId, 2);
根据为每个特性预设置的单位类型,HumanIK 解算器可能以不同的方式解释特性值。可能的单位类型列在 HIKPropertyUnit 枚举中:HIKPropertyNoUnit、HIKPropertyPercent、HIKPropertySecond、HIKPropertyCentimeter、HIKPropertyDegree、HIKPropertyEnum、HIKPropertyReal。
要在 HIKPropertySetState 中设置特性的当前模式,请调用 HIKSetPropertyValue() 函数。
指定给特性的新值必须匹配特性的单位类型。对于大多数单位类型,该值应为浮点数。但是,对于具有 HIKPropertyEnum 单位类型的特性,该值应为反映所需枚举值的整数。
例如,HIKReachActorLeftAnkleId 特性具有单位类型 HIKPropertyPercent,因此,下面的第一行将值设置为 50%。HIKFootContactTypeId 特性具有模式类型 HIKPropertyEnum;因此,其值必须为反映特定于该特性的枚举的整数。在这种情况下,其值被设置为 2,以与 ToeBase 接触类型相对应。有关具有 HIKPropertyEnum 值类型的每个特性可以使用的枚举值的详细信息,请参见详细的特性说明。
HIKSetPropertyValue(MyPropertyState, HIKReachActorLeftAnkleId, 0.50); HIKSetPropertyValue(MyPropertyState, HIKFootContactTypeId, 2);
接下来的页面列出并描述每个角色特性及其模式类型、接受的模式、默认模式、单位类型、接受的值和默认值。这些特性分为以下几大类:
具有 HIKPropertyNoMode 模式类型的特性没有在这些页面上列出的任何其他模式信息,因为其模式不能更改。
其值从不被 HumanIK 使用的特性没有在这些页面上列出的值信息。通常情况下,这仅适用于 HIKPropertyOffOn 模式类型为简单的 on/off 切换的特性。
HumanIK 提供了一组函数,用于检索有关可以在 HIKPropertySetState 中配置的每个角色特性的信息,例如其唯一 ID、模式类型、默认模式、单位类型、默认值和用户可读的名称。虽然在游戏过程中您不太可能需要在运行时调用这些函数,但是如果选择为控制 HumanIK 构建 GUI,则可以使用这些特性信息检索函数。