MRが楽しい

MRやVRについて学習したことを書き残す

2つのオブジェクトの回転の相対値を計算する

本日は Unity の小ネタ枠です。
2つのオブジェクトの回転の相対値を計算する方法を記事に残します。

2つのオブジェクトの回転の相対値を計算する

オブジェクトAとオブジェクトBがあったとき、オブジェクトBがオブジェクトAの子オブジェクトであるときの回転値(localRotation)は以下の計算式で求まります。

Quaternion.Inverse(オブジェクトA.rotation) * オブジェクトB.rotation

サンプルスクリプト

以下のサンプルスクリプトを作成しました。
・CalculateLocalRotation.cs

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

public class CalculateLocalRotation : MonoBehaviour
{
    [SerializeField]
    private Transform ParentObject;

    [SerializeField]
    private Transform ChildObject;

    [SerializeField]
    private Quaternion LocalRotation;

    void Update()
    {
        LocalRotation = Quaternion.Inverse(ParentObject.rotation) * ChildObject.rotation;
    }
}

適当なオブジェクトに設定して動作を確認します。
LocalRotation 変数に計算された回転値が表示されます。

実際にオブジェクトに親子関係を設定すると、LocalRotation が計算結果と同じになることが分かります。