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)"); } } }