画面にコンパスを表示してみます。どの方向を北にするか変えられるようにします。
まず、Imageオブジェクトを作ってコンパスの画像をアタッチします。ピボットを真ん中にして、RectTransformのZ軸のRotationの値を変えて回転させます。
空のゲームオブジェクトにスクリプトを付けます。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class CompassTest : MonoBehaviour
{
[SerializeField] Image image;
[SerializeField] Transform player;
[SerializeField] Text text;
[SerializeField] float angleOfflet = 0f;
RectTransform rt;
Quaternion q;
Quaternion offset;
// Start is called before the first frame update
void Start()
{
rt = image.rectTransform;
offset = Quaternion.AngleAxis(angleOfflet, Vector3.up);
}
// Update is called once per frame
void Update()
{
q = player.rotation * offset;
q.z = q.y;
q.y = 0f;
text.text = q + "";
rt.rotation = q;
}
}
一人称キャラクターの回転によってImageを回転させます。キャラの体はY軸に沿って回転するので、これをZ軸に変えるとうまくいきました。
基準の向きを変えるには、キャラクターの回転値にY軸に沿った回転を加えたものを使います。デフォルトではVector3.forwardが北ですが、Vector3.rightを北にしたい時は-90度を加えます。