本日はUnityの小ネタ枠です。
Unityで特定のオブジェクトから見たローカル座標とワールド座標を変換する方法です。
Transform.TransformPointとTransform.InverseTransformPoint
Transform.TransformPointとTransform.InverseTransformPointはそれぞれ特定のオブジェクトから見たローカル座標とワールド座標を変換する便利メソッドです。
Transform.TransformPointは特定オブジェクトから見たローカル座標をワールド座標に変換します。
docs.unity3d.com
Transform.InverseTransformPointは特定オブジェクトから見たローカル座標をワールド座標に変換します。
docs.unity3d.com
サンプルシーン
以下のTransform.InverseTransformPointメソッドを使って、指定オブジェクトの座標を自身のオブジェクトから見たローカル座標に変換して表示するスクリプトを作成しました。
・TransformPointTest.cs
using UnityEngine; public class TransformPointTest : MonoBehaviour { [SerializeField] private Transform targetTransform; [ContextMenu("Transform Point Test")] public void TransformPointTestMethod() { Vector3 revertedLocalPoint = this.transform.InverseTransformPoint(targetTransform.position); Debug.Log($"World Point: {targetTransform.position} => Reverted Local Point: {revertedLocalPoint}"); Vector3 transformedBackToWorld = this.transform.TransformPoint(revertedLocalPoint); Debug.Log($"Reverted Local Point: {revertedLocalPoint} => Transformed Back to World: {transformedBackToWorld}"); } }
作成したスクリプトをY軸で180度回転したオブジェクトに設定しました。

targetTransformに座標(0,0,-2)に配置したオブジェクトの参照を設定します。

コンテキストメニューからTransformPointTestMethodを実行します。

以下の通り、180度回転したオブジェクトからは(0,0,2)のローカル座標になることがログで確認できました。
またTransformPointメソッドを使うとワールド座標に戻す計算もできることが確認できます。
