はじめに
UnityEngine.Boundsについて調べる必要があったので、そこで分かったことをメモがわりに残しておきたいと思います。
Boundsの変数・コンストラクタ・メソッド
Boundsには以下の変数・コンストラクタ・publicメソッドがあります。

UnityEngine.Bounds - Unity スクリプトリファレンス
UnityEngine.Bounds - Unity スクリプトリファレンス
ただこれだけだと実感が湧かないと思うのでもう少し掘り下げます。
Boundsの持つ変数について
変数の値を試しに出力してみます。
public void Start() { var bounds = GetComponent<Renderer>().bounds; // サイズ1のSphereで試した例 Debug.Log(transform.position); // (6.0, 1.5, -5.0) Debug.Log($"Bounds.center : {bounds.center}"); // (6.0, 1.5, -5.0) Debug.Log($"Bounds.extents : {bounds.extents}"); // (0.5, 0.5, 0.5) sizeの0.5倍 Debug.Log($"Bounds.max : {bounds.max}"); // (6.5, 2.0, -4.5) center + extents Debug.Log($"Bounds.min : {bounds.min}"); // (5.5, 1.0, -5.5) center - extents Debug.Log($"Bounds.size : {bounds.size}"); // (1.0, 1.0, 1.0) }
Bounds.extentsはBounds.sizeの0.5倍Bounds.maxはBounds.center + Bounds.extentsBounds.minはBounds.center - Bounds.extents
実際の出力からも分かるように、Bounds.centerとBounds.sizeの情報さえあればそれ以外の値は自然と導けます。
ではBounds.centerとBounds.sizeについてもっと掘り下げてみます。
Boundsを可視化する
バウンディングボックスを可視化するためにGizmoを利用してみましょう。
[RequireComponent(typeof(Renderer))] public class BoundingBoxChecker : MonoBehaviour { private static readonly Color BoundsColor = new Color(1, 0, 0, 0.5f); void OnDrawGizmos() { if (TryGetComponent(out Renderer renderer)) { var bounds = renderer.bounds; Gizmos.color = BoundsColor; Gizmos.DrawCube(bounds.center, bounds.size); } } }


3DObjectを覆うようにBoundsが設定されているのがわかりますね。
ちなみにSkinned Mesh RendererはインスペクターからBoundsのcenterとextents(size)を設定することもできます。

また親子構造にしたとしても破綻しないので、しっかりとWorld座標で取得されていることが伺えます。
TextMeshPro.boundsとTextMeshProUGUI.bounds
お試しでTextMeshProのboundsを可視化してみたところうまくいっているようです。

ただしTextMeshProUGUIのboundsを表示してみたところバグってるぽいですね。(値が固定値になっている)
TextMeshProUGUI.bounds TextMeshProUGUI.textBounds
UI周りのBoundsについてはまだ未調査なので、後でやれたらと思います。