Version: 2020.2
public static Bounds CalculateBounds (Vector3[] positions, Matrix4x4 transform);

参数

positions 存储 3D 位置所在位置的数组。
transform 用于更改包围盒计算位置、旋转和大小的矩阵。

返回

Bounds 计算轴对齐的包围盒。

描述

根据给定的 positions 数组和变换矩阵计算包围盒。

GeometryUtility.CalculateBounds 生成一个 Bounds 包围盒。positions 参数存储一个 3D 点数组。每个点都位于生成的轴对齐包围盒内。transform 参数提供了一个变换 Matrix4x4,其中使用 Vector3 位置、四元数旋转和 Vector3 缩放。

以下示例显示了如何使用 CalculateBounds。一个 LightProbeGrouppositions 传入 CalculateBounds。示例代码使用八个光照探针创建一个包围盒。默认情况下,光照探针距单位立方体每个角为一个单位。

要运行该示例,请执行以下操作:
1.创建一个项目并添加一个名为 GameObjectGameObject
2.添加一个 3D 立方体作为 GameObject 的子项并将其命名为 Cube
3.将一个 LightProbeGroup 组件添加到 Cube
4.将以下脚本添加到 Cube
5.运行 Project 并切回到 Scene 视图。

Scene 视图中,您可以看到 LightProbeGroup。当游戏运行时,旋转在 Awake 中变化。八个黄色球体指示 LightProbeGroup 改变位置,Cube 显示为旋转。Scene 模式显示 Cube 在 x、y 和 z 轴上旋转,并显示在本地工具手柄中。旋转 Cube 会改变八个 LightProbeGroup 光照探针的位置。Scene 模式进行旋转并缩放以显示光照探针。此外,Cube 也旋转且 LightProbeGroup 进行更新。如果重新缩放 /Cube/,LightProbeGroup 将改变大小。

using UnityEngine;
using System.Collections;

// GeometryUtility.CalculateBounds - example

public class Example : MonoBehaviour { void Awake() { transform.position = new Vector3(0.0f, 0.0f, 0.0f); transform.Rotate(10.0f, 30.0f, -50.0f, Space.Self);

Debug.Log(transform.localToWorldMatrix); }

void OnDrawGizmosSelected() { LightProbeGroup lightProbeGroup = GetComponent<LightProbeGroup>();

Vector3 center = transform.position; Bounds bounds = GeometryUtility.CalculateBounds(lightProbeGroup.probePositions, transform.localToWorldMatrix); Gizmos.color = new Color(1, 1, 1, 0.25f); Gizmos.DrawCube(center, bounds.size); Gizmos.DrawWireCube(center, bounds.size); } }