UnityのIKでモーション作成②

tongarik.hatenablog.jp
続きです。

IKの位置を決めるオブジェクトを指定するまでしたので
次はIKの位置をマウス操作で動かせるようにします。

ここではOnMouseDrag関数を使います。
マウスをドラッグしている間呼ばれる関数です。

void OnMouseDrag()
    {
        //対象オブジェクトのワールド座標をスクリーン座標に
        var _objPos = Camera.main.WorldToScreenPoint(transform.position);
        //マウスの位置をスクリーン座標で取得
        var _mousePos = Input.mousePosition;
        //z軸を対象オブジェクトにあわせる
        _mousePos.z = _objPos.z;
        //スクリーン座標をワールド座標に変換
        var _worldPos = Camera.main.ScreenToWorldPoint(_mousePos);
       
        //対象オブジェクトをマウス位置にあわせる
        transform.position = _worldPos;
    }

これをIKの位置を決めるオブジェクトにアタッチすればマウスドラッグで移動できます。

IKの角度はLookAt関数を使います。
角度を決めるターゲットを用意して

transform.LookAt(_target.transform.position,transform.up);

これで位置と角度が決めれるようになったので
IK位置と角度をアニメーションカーブに保存してモーションを作れるようにします。
techblog.forgevision.com
を参考にしています。
保存方法が録画ではなくフレーム指定で1ポーズづつ保存出来るようにしただけですのでスクリプトは省きます。

これでIK位置角度をアニメーション出来るようになりました。
ここまでがUnityroomに公開している内容です。

このままだとモデルのアニメーションではないので
モデルのアニメーションとして保存したい場合は
バーチャルYouTuber事務所ENTUM(エンタム)さんが公開している
EasyMotionRecorderを使うのが手っ取り早いです。
github.com