Help us understand the problem. What is going on with this article?

[Unity] Humanoid animation をデフォルメキャラに適用する

gif_animation_001.gif

Mechanimに対応したモデルはアニメーションをいろいろ流用できて便利ですが、通常の8等身モデル用アニメーションをデフォルメキャラに適用するとどうしても腕が頭や体に埋まりがちです。
そこで、腕のアニメーションを補正して、頭と体に埋まりにくいようにしてみます。
2019-12-16_235206.png

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

namespace Demo
{
    [System.Serializable]
    public class RotationTuner
    {
        public Transform transform = null;
        public Quaternion defaultRotation = Quaternion.identity;
        [Range(0f, 1f)] public float rate = 0.5f;
    }

    public class AnimationTuner : MonoBehaviour
    {
        [SerializeField] RotationTuner[] m_tunerArr = null;
        [SerializeField,Range(0f,1f)] float m_intensity = 1f;

        // Start is called before the first frame update
        void Start()
        {
            for (int i = 0; i < m_tunerArr.Length; ++i)
            {
                m_tunerArr[i].defaultRotation = m_tunerArr[i].transform.localRotation;
            }
        }

        // Update is called once per frame
        void Update()
        {
        }

        void LateUpdate()
        {
            for (int i = 0; i < m_tunerArr.Length; ++i)
            {
                m_tunerArr[i].transform.localRotation = Quaternion.Lerp(m_tunerArr[i].defaultRotation, m_tunerArr[i].transform.localRotation, m_tunerArr[i].rate + (1f- m_tunerArr[i].rate)*(1f-m_intensity));
            }
        }
    }
}

上記のスクリプトをアニメーションのついたモデルにアタッチし、腕(およびアニメーションを補正したい)のTransformおよび補正度合いをセットします。

2019-12-17_011022.png

2019-12-17_011500.png

補正度合いはDefaultRotationと現在のアニメーションのRotationの合成割合です。1に近いほど元のアニメーションに近くなります。
DefaultRotationにはTポーズ等ベースとなるポーズのRotationを入れますが、
入力せず(全て0)にしておけばStart時のポーズを自動的に入力してくれます。

また、Intensityの値をアニメーションに合わせて変更することで、モーションに合わせてさらに細かく制御することも可能です。

動画
関連:アニメーションIKで、(やだ、あの人こっち見てる・・・)にする

この「特定の関節を後から補正する方法」は個人的に比較的よく使用していて、他にも
・Mechanim以外のアニメーションで自然に特定の方向を向かせる
・多関節やしっぽなどを特定の場所に自然に動かす
等にも応用可能です。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした