14
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

UnityAdvent Calendar 2021

Day 18

【Unity】IKで武器と手のずれを解消する

Last updated at Posted at 2021-12-17

こちらはUnity Advent Calendar 2021 18日目の記事です。

購入したアニメーションアセットを使う場合など、既存のモーションを別キャラクタに適応する際に左手と武器などの持ち物の位置がずれることがあります。(両手持ち武器のアニメーションなど)
image.png
このようなズレはIKを利用することで簡単に修正することができます。

IKPassの有効化

キャラクタのIK制御を有効にするためにAnimatorのLayerタブ > 設定(歯車マーク) > IKPassにチェックを入れます。
image.png

武器に左手の持ち手部分を作る

画像のように左手の持ち手部分に空オブジェクト(LeftHandPoint)を作成しておきます。
また、武器自体はキャラの右手に持たせておきます。
image.png

LeftHandPointの座標へキャラの左手を移動させるスクリプトを作成

LeftHandMatcher.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class LeftHandMatcher : MonoBehaviour
{
    private AvatarIKGoal ikGoal = AvatarIKGoal.LeftHand; // IK制御を行う体の部分(今回は左手)
    [SerializeField] private Transform leftHandPoint;
    private Animator anim;
    public bool isEnableIK = true; // IK制御有効化フラグ
    // Start is called before the first frame update
    void Start()
    {
        anim = GetComponent<Animator>();
    }

    private void OnAnimatorIK() { // OnAnimatorIKはIK制御情報を更新する際に呼ばれるコールバック
        if (!isEnableIK)
            return;

        // 武器に作成したLeftHandPointに、左手を移動させる
        anim.SetIKPositionWeight(ikGoal, 1f);
        anim.SetIKRotationWeight(ikGoal, 1f);
        anim.SetIKPosition(ikGoal, leftHandPoint.position);
        anim.SetIKRotation(ikGoal, leftHandPoint.rotation);
    }
}

作成したスクリプトはキャラクタにアタッチします。
無題.png
アタッチしたスクリプトのLeftHandPointに先ほど武器側に作成したLeftHandPointオブジェクトをアタッチします。
無題.png

角度・位置の調整

スクリプトアタッチ後、実行してみるとIK制御が有効になっており、左手が持ち手部分に移動していることがわかります。
この時に手の位置や角度がおかしい場合はUnityを実行状態のままLeftHandPointオブジェクトの角度・位置を変更します。
image.png

結果

IK制御をすることでモーションそのものを改変することなくズレを解消できました。

image.png image.png
オリジナル IK制御中

また、IK制御中は画像のようにモーションを切り替えても、LeftHandPointに左手が追従するため、モーションごとに調整は必要ありません。
image.png

今回は武器とのズレ解消にIKを利用しましたが、レバーを引く際に手をレバーに合わせる、宝箱を開けるときに手を箱の蓋に合わせるなど、さまざまはズレ解消に利用できると思います。

14
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?