【Unity】Rect Transformのワールド空間での高さを求める

Unity
using UnityEngine;

public class RectTransformToWorld : MonoBehaviour
{
    void Start()
    {
        RectTransform rectTransform = GetComponent<RectTransform>();
        float worldHeight = RectTransformToWorldHeight(rectTransform);
        Debug.Log("World Height: " + worldHeight);
    }

    float RectTransformToWorldHeight(RectTransform rectTransform)
    {
        Vector3[] corners = new Vector3[4];
        rectTransform.GetWorldCorners(corners);
        float worldHeight = corners[1].y - corners[0].y;
        return worldHeight;
    }
}
Code language: C# (cs)

このスクリプトは、RectTransformのコンポーネントがアタッチされているGameObjectに追加します。

スクリプトは、Startメソッドで実行され、RectTransformの高さをワールド座標に換算し、その値をログに出力します。

換算は、RectTransformのワールド空間の角を取得し、それらの角のy座標の差を計算することで行われます。

これにより、RectTransformの高さがワールド座標系でどれだけの高さになるかを取得できます。

このスクリプトは、RectTransformの高さがスケーリングや親の変換によってどのように影響を受けるかを確認するのに役立ちます。

ただし、この方法はRectTransformが直接的に視覚的な表現を持つ場合にのみ有効であり、子要素が視覚的な表現を提供する場合には必ずしも正確ではない可能性があります。

そのような場合には、具体的な視覚的表現を持つ子要素の境界を計算する必要があります。また、RectTransformのピボット設定によっては、取得される角の位置が異なるため、その影響も考慮する必要があります。

このスクリプトは一例であり、具体的な要件に応じて適切に調整することが重要です。このスクリプトを使用する前に、UnityのドキュメンテーションとAPIリファレンスを確認し、RectTransformとその動作を理解することをお勧めします。また、このスクリプトはUnityのバージョンや設定によっては正しく動作しない可能性がありますので、ご了承ください。

コメント

タイトルとURLをコピーしました