いろりおのメモ帳

気になることをつらつらと。

MMD4Mecanimで読み込んだモデルのBoneを直接操作する

Unity3d上でMMD4Mecanimを使って読み込んだMMDモデルのBoneを直接操作したい。

mmd4mecanimを使って読み込んだモデルには各Boneに「MMD4MecanimBone」というスクリプトがアタッチされている。このスクリプトにより、インスペクタ上でMMDモデルのBone操作をすることができる。

また、このスクリプト内のuserEulerAnglesやuserRotationやuserPositionなどはpublicで宣言されているため、外部のスクリプトから値を変更することができる。

以下に首boneの角度(rotation)を外部から変更するときのサンプルプログラムを掲載する。 適当な空GameObjectをつくった後、MMD4M_neck.csをアタッチ、動かしたいMMDモデル(インポート済み)をインスペクタ上で設定すれば動きます。

using UnityEngine;
using System.Collections;

public class MMD4M_neck : MonoBehaviour {
    public GameObject mmdPlayerObject;
    MMD4MecanimBone neckBone;

    Vector3 neckVec;

    void Start () {
        //neckのgameObjectを取得
        GameObject neckChild = mmdPlayerObject.transform.FindChild ("121.!Root").FindChild ("14.joint_HipMaster").FindChild ("2.joint_Torso").FindChild ("3.joint_Neck").gameObject;
        //neckのBoneにアタッチされているMMD4MecanimBoneを取得
        neckBone = neckChild.GetComponent<MMD4MecanimBone>();

        neckVec = new Vector3(0.3, 0, 0);
    }
    
    void Update () {
        if(neckBone!=null){
            //毎フレームBoneに角度を送る
            neckBone.userEulerAngles=neckVec;
        } else {
            Debug.LogWarning("can't find MMD4MecanimBone(script)");
        }
    }
}