【Unity】アニメーション中にボーンをスクリプトで動かす

投稿者: | 2021-01-30

アニメーションをしているキャラクターの頭のボーンをスクリプトで動かして、プレイヤーの方を常に向かせてみました。

まず、キャラクターに付けたスクリプトのStartメソッドで、頭のボーンのトランスフォームを探します。

using UnityEngine;

public class AnimationTest : MonoBehaviour
{
    Transform head;
    [SerializeField] Player player;

    // Start is called before the first frame update
    void Start()
    {
        // 頭のボーンを取得
        head = transform.GetChild(0).GetChild(0).GetChild(2).GetChild(0).GetChild(0).GetChild(2).GetChild(0);
    }

    // Update is called once per frame
    void Update()
    {
        // head.LookAt(player.transform);
    }

    private void LateUpdate()
    {
        // プレイヤーの方を向く
        head.LookAt(player.transform);

        // 45度傾ける
        head.rotation = Quaternion.LookRotation(head.forward, Vector3.Slerp(head.up, -head.right, 0.5f));
    }
}

Transform.GetChildメソッドで1つ下の子オブジェクトのトランスフォームが得られるので、それを繰り返して深い位置にあるボーンを取得します。引数にはヒエラルキーウィンドウの順に上からのインデックスを入れます。

後はそのボーンのトランスフォームの回転を変えるだけですが、Updateでやるとうまくいきません。Updateでボーンを動かした後に毎回アニメーションで元の位置に戻ってしまうのだと思います。

そこでゲームロジックの一番最後に実行されるLateUpdateに書くとキャラクターがこちらを向きました。

コメントを残す

メールアドレスが公開されることはありません。