アニメーションをしているキャラクターの頭のボーンをスクリプトで動かして、プレイヤーの方を常に向かせてみました。
まず、キャラクターに付けたスクリプトの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に書くとキャラクターがこちらを向きました。