4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ゲーム用キャラをHumanIK対応に!ユニティちゃんで学ぶMayaリグ入門

4
Last updated at Posted at 2025-12-07

はじめに

本記事は、「QualiArts Advent Calender 2025」の7日目の記事になります。

ユニティちゃんとは、Unity Technologies Japan様が提供する開発者のためのオリジナルキャラクターです。

公式サイトにてアセットのダウンロード、及びライセンスの確認を行うことができます。

HumanIKとは、Mayaに標準搭載されている人型リグです。

この形式に対応させることで、様々な便利機能が使用できるようになります。

UnityのHumanoidの概念に近いかもしれません。

この記事は、ユニティちゃんをMayaのHumanIKにセットアップし、ポージングを行う流れを説明します。

ユニティちゃんをHumanIKでセットアップ

ユニティちゃんのファイルを取り出す

公式サイトからダウンロードしたファイルは、".unitypackage"形式となっています。

これはUnityの独自の形式で、複数のファイルをまとめています。

Unityプロジェクトに読み込むことで、ユニティちゃんモデルなどを取り出すことができます。

詳細な説明は割愛しますが、ここではunitychan.fbxとTextureを使用します。

ちなみにSDユニティちゃんではHumanoid形式のfbxと、Generic形式のfbxがあります。

ユニティちゃん SDユニティちゃん(Humanoid) SDユニティちゃん(Generic)
ユニティちゃんフォルダ SDユニティちゃんHumanoidフォルダ SDユニティちゃんGenericフォルダ

ユニティちゃんをMayaに読み込む

取り出したFBXアセットを、Mayaに読み込みます。

SDユニティちゃんはGenericのモデルを使うことにします。

ユニティちゃん SDユニティちゃん
ユニティちゃんfbx読み込み SDユニティちゃんfbx読み込み

Materialの互換性はなく、テクスチャも読み込まれていないので、グレーな状態で表示されます。

新規でMaterialを作成し、テクスチャをOut Colorにセットします。

ここではsurfaceシェーダーを使用します。

目など一部のテクスチャはアルファ透過なので、Transparencyにもテクスチャをセットします。

SDユニティちゃんの場合も同様です。

ユニティちゃん(不透過) ユニティちゃん(透過) SDユニティちゃん
ユニティちゃん不透過マテリアル ユニティちゃん透過マテリアル SDユニティちゃん不透過マテリアル

これにより、テクスチャがついた状態で読み込むことができます。

ユニティちゃん SDユニティちゃん
ユニティちゃんテクスチャ読み込み SDユニティちゃんテクスチャ読み込み

HumanIK定義の作成とマッピング方針

HumanIKのマッピングを行います。
手動で設定するのが面倒だったので、スクリプト化しました。
よかったら使ってください。(マッピングが間違っていたら指摘いただけるとありがたいです。)

ユニティちゃん SDユニティちゃん
ユニティちゃんHierarchy SDユニティちゃんHierarchy

スクリプトエディタから以下のpythonスクリプトを実行してください。

UnityChan.py
rig_name = "UnityChan"

mel.eval('hikCreateCharacter("{0}")'.format(rig_name))
mel.eval('hikUpdateCharacterList()')
mel.eval('hikSelectDefinitionTab()')

model_root = "Character1_Reference"
cmds.select(model_root)

joint_settings = [["Character1_Head", 15],
                  ["Character1_Hips", 1],
                  ["Character1_Neck", 20],
                  ["Character1_Spine", 8],
                  ["Character1_Spine1", 23],
                  ["Character1_Spine2", 24],
                  ["Character1_LeftFoot", 4],
                  ["Character1_LeftHand", 11],
                  ["Character1_LeftHandIndex1", 54],
                  ["Character1_LeftHandIndex2", 55],
                  ["Character1_LeftHandIndex3", 56],
                  ["Character1_LeftHandPinky1", 66],
                  ["Character1_LeftHandPinky2", 67],
                  ["Character1_LeftHandPinky3", 68],
                  ["Character1_LeftForeArm", 10],
                  ["Character1_LeftLeg", 3],
                  ["Character1_LeftHandMiddle1", 58],
                  ["Character1_LeftHandMiddle2", 59],
                  ["Character1_LeftHandMiddle3", 60],
                  ["Character1_LeftHandRing1", 62],
                  ["Character1_LeftHandRing2", 63],
                  ["Character1_LeftHandRing3", 64],
                  ["Character1_LeftShoulder", 18],
                  ["Character1_LeftHandThumb1", 50],
                  ["Character1_LeftHandThumb2", 51],
                  ["Character1_LeftHandThumb3", 52],
                  ["Character1_LeftToeBase", 16],
                  ["Character1_LeftArm", 9],
                  ["Character1_LeftUpLeg", 2],
                  ["Character1_RightFoot", 7],
                  ["Character1_RightHand", 14],
                  ["Character1_RightHandIndex1", 78],
                  ["Character1_RightHandIndex2", 79],
                  ["Character1_RightHandIndex3", 80],
                  ["Character1_RightHandPinky1", 90],
                  ["Character1_RightHandPinky2", 91],
                  ["Character1_RightHandPinky3", 92],
                  ["Character1_RightForeArm", 13],
                  ["Character1_RightLeg", 6],
                  ["Character1_RightHandMiddle1", 82],
                  ["Character1_RightHandMiddle2", 83],
                  ["Character1_RightHandMiddle3", 84],
                  ["Character1_RightHandRing1", 86],
                  ["Character1_RightHandRing2", 87],
                  ["Character1_RightHandRing3", 88],
                  ["Character1_RightShoulder", 19],
                  ["Character1_RightHandThumb1", 74],
                  ["Character1_RightHandThumb2", 75],
                  ["Character1_RightHandThumb3", 76],
                  ["Character1_RightToeBase", 17],
                  ["Character1_RightArm", 12],
                  ["Character1_RightUpLeg", 5],
                  ["Character1_Reference", 0]]

for joint_setting in joint_settings:
    mel_command = 'setCharacterObject("{0}","{1}", {2}, 0);'.format(
        joint_setting[0], rig_name, joint_setting[1])
    mel.eval(mel_command)
mel.eval("hikCreateControlRig;")

SDユニティちゃんの場合は、以下のスクリプトを実行してください。

SdUnityChan.py
rig_name = "SdUnityChan"

mel.eval('hikCreateCharacter("{0}")'.format(rig_name))
mel.eval('hikUpdateCharacterList()')
mel.eval('hikSelectDefinitionTab()')

model_root = "Character1_Reference"
cmds.select(model_root)

joint_settings = [["Character1_Head", 15],
                  ["Character1_Hips", 1],
                  ["Character1_Neck", 20],
                  ["Character1_Spine", 8],
                  ["Character1_Spine1", 23],
                  ["Character1_Spine2", 24],
                  ["Character1_LeftFoot", 4],
                  ["Character1_LeftHand", 11],
                  ["Character1_LeftHandIndex1", 54],
                  ["Character1_LeftHandIndex2", 55],
                  ["Character1_LeftHandPinky1", 66],
                  ["Character1_LeftHandPinky2", 67],
                  ["Character1_LeftForeArm", 10],
                  ["Character1_LeftLeg", 3],
                  ["Character1_LeftHandMiddle1", 58],
                  ["Character1_LeftHandMiddle2", 59],
                  ["Character1_LeftHandRing1", 62],
                  ["Character1_LeftHandRing2", 63],
                  ["Character1_LeftShoulder", 18],
                  ["Character1_LeftHandThumb1", 50],
                  ["Character1_LeftHandThumb2", 51],
                  ["Character1_LeftHandThumb3", 52],
                  ["Character1_LeftArm", 9],
                  ["Character1_LeftUpLeg", 2],
                  ["Character1_RightFoot", 7],
                  ["Character1_RightHand", 14],
                  ["Character1_RightHandIndex1", 78],
                  ["Character1_RightHandIndex2", 79],
                  ["Character1_RightHandPinky1", 90],
                  ["Character1_RightHandPinky2", 91],
                  ["Character1_RightForeArm", 13],
                  ["Character1_RightLeg", 6],
                  ["Character1_RightHandMiddle1", 82],
                  ["Character1_RightHandMiddle2", 83],
                  ["Character1_RightHandRing1", 86],
                  ["Character1_RightHandRing2", 87],
                  ["Character1_RightShoulder", 19],
                  ["Character1_RightHandThumb1", 74],
                  ["Character1_RightHandThumb2", 75],
                  ["Character1_RightHandThumb3", 76],
                  ["Character1_RightArm", 12],
                  ["Character1_RightUpLeg", 5],
                  ["Character1_Reference", 0]]

for joint_setting in joint_settings:
    mel_command = 'setCharacterObject("{0}","{1}", {2}, 0);'.format(
        joint_setting[0], rig_name, joint_setting[1])
    mel.eval(mel_command)
mel.eval("hikCreateControlRig;")

SDユニティちゃんの場合はジョイントではなくグループだからか、SpineとSpine1が非表示になってしまうので、表示状態にしてください。
SDユニティちゃんグループ非表示

以下のように各種コントローラが表示され、設定したジョイントが黄色く表示されます。

ユニティちゃん SDユニティちゃん
ユニティちゃんセットアップ SDユニティちゃんセットアップ

HumanIKのタブでは、セットアップが完了した表示になっています。
ユニティちゃんはすべて正しくセットアップできていますが、SDユニティちゃんは何やら警告が出ていますね。

ユニティちゃん SDユニティちゃん
ユニティちゃんHumanIKタブ SDユニティちゃんHumanIKタブ

一つ見てみると右手がX軸に沿っていないことが示唆されています。SDユニティちゃんがTポーズではなかったからですね。

SDユニティちゃんHumanIKタブ警告

本記事の範囲では特に問題は起きなかったので、そのまま進めます。

ポージング

FK,IK切り替えや、リターゲットなどHumanIKが持つ豊富な機能を使用することができます。

また、コントローラや設定したジョイントはもちろん、HumanIKではない揺れ骨なども動かします。

ユニティちゃん SDユニティちゃん
ユニティちゃんポージング SDユニティちゃんポージング

まとめ

ユニティちゃんをMaya HumanIKで動かす方法を記載しました。

本記事ではポージングまでを紹介しましたが、当然アニメーションを制作し出力、Unityで使用する事ができます。

HumanIKは人体アニメーションに必要な機能を多数搭載しており、非常に快適な制作を行うことができます。

ユニティちゃんのジョイントの命名規則が、HumanIKの命名規則に沿っていたのは驚きました。

互換性を考慮して制作されたのかもしれません。

本記事が、3Dゲーム開発の助けになっていれば幸いです。

4
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?