初始化

在初始化阶段,可以创建并设置每个角色以用于 HumanIK,以及记录其姿势的 HIKCharacterState、定义其角色化的 HIKPropertySetState 和向 HumanIK 解算器提供目标点和 IK 约束的 HIKEffectorSetState

反向运动学的初始化:如果计划仅使用反向运动学解算器,请按照此页面上列出的所有步骤执行一次操作以设置角色。

重定目标的初始化:如果计划使用重定目标解算器,必须设置两个角色:从中绘制动画的源角色和在其上应用动画的目标角色。

执行步骤 1 到 3 两次,一次是用于源角色,另一次是用于目标角色。但是,由于重定目标解算器在内部仅为目标角色启动反向运动学解算器,因此只需一个 HIKEffectorSetState。因此,只需执行步骤 4 一次。

步骤 1. 创建角色化的 HIKCharacter

此步骤的最终目标是具有一个已使用默认 T 形站姿完全角色化的 HIKCharacter 对象,默认 T 形站姿可精确反映游戏中角色的骨架结构和物理几何体。

有两种主要方法来实现此目标:

有关不同方法的详细信息,请参见从属主题,以便确定哪个方法最适合您的项目和设计管线。

步骤 2. 创建 HIKCharacterState

为您的角色创建 HIKCharacter 后,需要至少创建一个 HIKCharacterState。此 HIKCharacterState 包含角色的每个节点的平移和旋转矩阵,并同时用作 HumanIK 解算器的输入和输出。

若要创建 HIKCharacterState 类的实例,请调用 HIKCharacterStateCreate() 函数。此函数需要两个参数:

例如:

HIKCharacterState * MyCharState = HIKCharacterStateCreate(MyChar, &malloc); 

步骤 3. 创建 HIKPropertySetState

HIKPropertySetStateHIKCharacter 定义各种可选特性,如某些关节在特定条件下移动的方式、与地板建立接触的方式、是否镜像角色的左侧和右侧等等。

必须为角色创建 HIKPropertySetState,方法为:调用 HIKPropertySetStateCreate() 函数,并将指针作为参数传递到一个回调函数,将调用该回调函数来为 HIKPropertySetState 分配内存。可以指定标准 malloc 函数,或满足与 malloc 相同的类型定义的任何自定义内存分配方法。请参见 HumanIK 对象和内存管理

例如:

HIKPropertySetState * MyPropertySet = HIKPropertySetStateCreate(&malloc); 

请注意,HIKPropertySetState 不直接依赖于 HIKCharacterHIKCharacterDefinition。所有 HIKPropertySetState 都包含相同的特性;只有这些特性的值和模式可能会因不同的角色而不同。有关每个 HIKPropertySetState 中可用特性的详细信息,请参见角色特性

步骤 4. 创建 HIKEffectorSetState

HIKEffectorSetState 对于角色的每个节点均包含一个目标点,对于每个效应器均包含一组约束(Reach、Pull 和 Resist)。HIKEffectorSetState 还定义了反向运动学解算器应执行哪些解算步骤(即哪些身体部位将受到控制)。

必须创建 HIKEffectorSetState,方法为:调用 HIKEffectorSetStateCreate() 函数,并将指针作为参数传递到一个回调函数,将调用该回调函数来为 HIKEffectorSetState 分配内存。可以指定标准 malloc 函数,或满足与 malloc 相同的类型定义的任何自定义内存分配方法。请参见 HumanIK 对象和内存管理

例如:

HIKEffectorSetState * MyEffectorSet = HIKEffectorSetStateCreate(&malloc); 

由于 HumanIK重定目标解算器在内部使用反向运动学解算器,因此即使仅使用 HumanIK 将动画重定目标,也必须创建 HIKEffectorSetState