はじめに
本記事は、「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) |
|---|---|---|
![]() |
![]() |
![]() |
ユニティちゃんをMayaに読み込む
取り出したFBXアセットを、Mayaに読み込みます。
SDユニティちゃんはGenericのモデルを使うことにします。
| ユニティちゃん | SDユニティちゃん |
|---|---|
![]() |
![]() |
Materialの互換性はなく、テクスチャも読み込まれていないので、グレーな状態で表示されます。
新規でMaterialを作成し、テクスチャをOut Colorにセットします。
ここではsurfaceシェーダーを使用します。
目など一部のテクスチャはアルファ透過なので、Transparencyにもテクスチャをセットします。
SDユニティちゃんの場合も同様です。
| ユニティちゃん(不透過) | ユニティちゃん(透過) | SDユニティちゃん |
|---|---|---|
![]() |
![]() |
![]() |
これにより、テクスチャがついた状態で読み込むことができます。
| ユニティちゃん | SDユニティちゃん |
|---|---|
![]() |
![]() |
HumanIK定義の作成とマッピング方針
HumanIKのマッピングを行います。
手動で設定するのが面倒だったので、スクリプト化しました。
よかったら使ってください。(マッピングが間違っていたら指摘いただけるとありがたいです。)
| ユニティちゃん | SDユニティちゃん |
|---|---|
![]() |
![]() |
スクリプトエディタから以下のpythonスクリプトを実行してください。
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ユニティちゃんの場合は、以下のスクリプトを実行してください。
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ユニティちゃん |
|---|---|
![]() |
![]() |
HumanIKのタブでは、セットアップが完了した表示になっています。
ユニティちゃんはすべて正しくセットアップできていますが、SDユニティちゃんは何やら警告が出ていますね。
| ユニティちゃん | SDユニティちゃん |
|---|---|
![]() |
![]() |
一つ見てみると右手がX軸に沿っていないことが示唆されています。SDユニティちゃんがTポーズではなかったからですね。
本記事の範囲では特に問題は起きなかったので、そのまま進めます。
ポージング
FK,IK切り替えや、リターゲットなどHumanIKが持つ豊富な機能を使用することができます。
また、コントローラや設定したジョイントはもちろん、HumanIKではない揺れ骨なども動かします。
| ユニティちゃん | SDユニティちゃん |
|---|---|
![]() |
![]() |
まとめ
ユニティちゃんをMaya HumanIKで動かす方法を記載しました。
本記事ではポージングまでを紹介しましたが、当然アニメーションを制作し出力、Unityで使用する事ができます。
HumanIKは人体アニメーションに必要な機能を多数搭載しており、非常に快適な制作を行うことができます。
ユニティちゃんのジョイントの命名規則が、HumanIKの命名規則に沿っていたのは驚きました。
互換性を考慮して制作されたのかもしれません。
本記事が、3Dゲーム開発の助けになっていれば幸いです。

















