在初始化阶段,可以创建并设置每个角色以用于 HumanIK,以及记录其姿势的 HIKCharacterState、定义其角色化的 HIKPropertySetState 和向 HumanIK 解算器提供目标点和 IK 约束的 HIKEffectorSetState。
反向运动学的初始化:如果计划仅使用反向运动学解算器,请按照此页面上列出的所有步骤执行一次操作以设置角色。
重定目标的初始化:如果计划使用重定目标解算器,必须设置两个角色:从中绘制动画的源角色和在其上应用动画的目标角色。
执行步骤 1 到 3 两次,一次是用于源角色,另一次是用于目标角色。但是,由于重定目标解算器在内部仅为目标角色启动反向运动学解算器,因此只需一个 HIKEffectorSetState。因此,只需执行步骤 4 一次。
此步骤的最终目标是具有一个已使用默认 T 形站姿完全角色化的 HIKCharacter 对象,默认 T 形站姿可精确反映游戏中角色的骨架结构和物理几何体。
有关详细信息,请参见以编程方式角色化 HIKCharacter。
此方法的优点在于,它允许您组织中的美工人员和技术指导(而非程序员)设置角色化,并为角色化生成的 IK 结果的提供即时可视化反馈。
有关详细信息,请参见以可视化方式角色化 HIKCharacter。
为您的角色创建 HIKCharacter 后,需要至少创建一个 HIKCharacterState。此 HIKCharacterState 包含角色的每个节点的平移和旋转矩阵,并同时用作 HumanIK 解算器的输入和输出。
若要创建 HIKCharacterState 类的实例,请调用 HIKCharacterStateCreate() 函数。此函数需要两个参数:
HIKCharacterState * MyCharState = HIKCharacterStateCreate(MyChar, &malloc);
HIKPropertySetState 为 HIKCharacter 定义各种可选特性,如某些关节在特定条件下移动的方式、与地板建立接触的方式、是否镜像角色的左侧和右侧等等。
必须为角色创建 HIKPropertySetState,方法为:调用 HIKPropertySetStateCreate() 函数,并将指针作为参数传递到一个回调函数,将调用该回调函数来为 HIKPropertySetState 分配内存。可以指定标准 malloc 函数,或满足与 malloc 相同的类型定义的任何自定义内存分配方法。请参见 HumanIK 对象和内存管理。
HIKPropertySetState * MyPropertySet = HIKPropertySetStateCreate(&malloc);
请注意,HIKPropertySetState 不直接依赖于 HIKCharacter 或 HIKCharacterDefinition。所有 HIKPropertySetState 都包含相同的特性;只有这些特性的值和模式可能会因不同的角色而不同。有关每个 HIKPropertySetState 中可用特性的详细信息,请参见角色特性。
HIKEffectorSetState 对于角色的每个节点均包含一个目标点,对于每个效应器均包含一组约束(Reach、Pull 和 Resist)。HIKEffectorSetState 还定义了反向运动学解算器应执行哪些解算步骤(即哪些身体部位将受到控制)。
必须创建 HIKEffectorSetState,方法为:调用 HIKEffectorSetStateCreate() 函数,并将指针作为参数传递到一个回调函数,将调用该回调函数来为 HIKEffectorSetState 分配内存。可以指定标准 malloc 函数,或满足与 malloc 相同的类型定义的任何自定义内存分配方法。请参见 HumanIK 对象和内存管理。
HIKEffectorSetState * MyEffectorSet = HIKEffectorSetStateCreate(&malloc);
由于 HumanIK重定目标解算器在内部使用反向运动学解算器,因此即使仅使用 HumanIK 将动画重定目标,也必须创建 HIKEffectorSetState。