キャラクタ プロパティ

HIKPropertySetState には、キャラクタを定義し、HumanIK ソルバの動作をコントロールする、プロパティと呼ばれる多くの設定オプションが含まれています。すべての可能なプロパティは HIKProperty 列挙値で識別されます。

各プロパティには、設定オプションを有効にするかどうかを HumanIK ソルバに対して示すモードがあります。多くのプロパティは、ソルバが計算で使用するも示します。

HIKPropertySetState を作成すると、状態の各プロパティにはデフォルトのモードとデフォルト値が割り当てられますが、これらは動的に変更できます。

モード

各プロパティには、次のいずれかのモードがあります。

モード タイプ

すべてのプロパティがすべてのモードを受け入れるわけではありません。各プロパティが受け入れるモードは、プロパティのモード タイプによって示されます。モードの可能な種類は HIKPropertyModeType 列挙値に示されます(HIKPropertyNoModeHIKPropertyOffOnHIKPropertyOffAutoUserHIKPropertyAutoUser)。

各プロパティのモード タイプはあらかじめ設定されており、変更することはできません。

プロパティのモードを設定する

HIKPropertySetState でプロパティの現在のモードを設定するには、HIKSetPropertyMode() 関数を呼び出します。

整数値を使用して希望のモードを指定します。この解釈はプロパティのモード タイプによって決まります。

  • プロパティのモード タイプが HIKPropertyNoMode の場合、モードを変更することはできません。
  • プロパティのモード タイプが HIKPropertyOffOn の場合、値 0 はプロパティのモードを Off に設定し、値 1 はプロパティのモードを On に設定します。
  • プロパティのモード タイプが HIKPropertyOffAutoUser の場合、値 0 はプロパティのモードを Off に設定し、値 1 はプロパティのモードを Auto に設定し、値 2 はプロパティのモードを User に設定します。
  • プロパティのモード タイプが HIKPropertyAutoUser の場合、値 0 はプロパティのモードを Auto に設定し、値 1 はプロパティのモードを User に設定します。

たとえば、HIKHandFloorContactId プロパティにはモード タイプとして HIKPropertyOffOn があるので、次の最初の行によりプロパティがアクティブになります。HIKAnkleHeightCompensationId プロパティにはモード タイプとして HIKPropertyOffAutoUser があるので、次の 2 つ目の行によりプロパティがアクティブになり、HumanIK がユーザ定義の値を考慮できるようになります。

HIKSetPropertyMode(MyPropertyState, HIKHandFloorContactId, 1);
HIKSetPropertyMode(MyPropertyState, HIKAnkleHeightCompensationId, 2);

設定値

各プロパティに対してあらかじめ設定されているユニットのタイプにより、HumanIK ソルバによるプロパティ値の解釈方法は異なります。可能なユニットのタイプは HIKPropertyUnit 列挙値に示されます(HIKPropertyNoUnitHIKPropertyPercentHIKPropertySecondHIKPropertyCentimeterHIKPropertyDegreeHIKPropertyEnumHIKPropertyReal)。

各プロパティには、動的に変更することができない、あらかじめ設定された最小値と最大値もあります。

プロパティの値を設定する

HIKPropertySetState でプロパティの現在のモードを設定するには、HIKSetPropertyValue() 関数を呼び出します。

プロパティに割り当てる新しい値は、プロパティのユニットのタイプと一致する必要があります。ほとんどのユニットのタイプでは、この値は浮動小数点数であることが想定されています。ただし、ユニットのタイプが HIKPropertyEnum であるプロパティでは、この値は希望の列挙値を反映した整数である必要があります。

たとえば、HIKReachActorLeftAnkleId プロパティにはユニットのタイプとして HIKPropertyPercent が設定されているので、次の最初の行により値が 50% になります。HIKFootContactTypeId プロパティにはモード タイプとして HIKPropertyEnum が設定されているので、その値はこのプロパティに固有の列挙値を反映した整数である必要があります。この場合、その値は ToeBase コンタクト タイプに該当する 2 に設定されます。HIKPropertyEnum 値タイプについて各プロパティで使用できる列挙値の詳細は、プロパティの詳細な説明を参照してください。

HIKSetPropertyValue(MyPropertyState, HIKReachActorLeftAnkleId, 0.50);
HIKSetPropertyValue(MyPropertyState, HIKFootContactTypeId, 2);

プロパティの説明

次のページでは、各キャラクタ プロパティと、そのモード タイプ、受け入れられるモード、デフォルトのモード、ユニットのタイプ、受け入れられる値、デフォルト値を示します。これらのプロパティは次の広いカテゴリに分類されます。

モード タイプが HIKPropertyNoMode のプロパティはモードを変更できないため、次のページにその他のモードの情報は記載されていません。

HumanIK によって値が使用されることがないプロパティについては、次のページに値の情報は記載されていません。通常、これが該当するのは、単純なオン/オフの切り替えである HIKPropertyOffOn モード タイプのプロパティのみです。

プロパティ情報を取得する

HumanIK には、一意の ID、モード タイプ、デフォルトのモード、ユニット タイプ、デフォルト値、人間が解読可能な形式の名前など、HIKPropertySetState で設定できる各キャラクタのプロパティに関する情報を取得する関数セットが用意されています。ゲーム中、ランタイムにこれらの関数を呼び出す必要が生じる可能性は低いものの、HumanIK をコントロールする GUI をビルドする場合、これらのプロパティ情報の取得関数が役に立つことがあります。

これらの関数の詳細は、API リファレンスで「プロパティ情報の取得」モジュールを参照してください。