位置 | 存储 3d 位置的数组。 |
转换 | 用于转换界限计算的位置、旋转和大小的矩阵。 |
界限 计算轴对齐包围框。
根据给定的 位置 数组和变换矩阵计算界限框。
GeometryUtility.CalculateBounds 生成 界限 围绕框。位置参数存储 3d 点阵列。每个点都在生成的轴对齐包围框内。转换参数提供变换 Matrix4x4,该变换使用 Vector3 位置、四元数旋转和 Vector3 缩放。
以下示例展示了如何使用 CalculateBounds。一个 LightProbeGroup 会将 位置 传递给 CalculateBounds。示例代码创建了一个由八个光照探针组成的包围框。在默认情况下,光照探针距单位立方体的每个角一个单位。
运行示例
GameObject
的空 GameObject。GameObject
的子项,并将其命名为 Cube
。Cube
添加 LightProbeGroup 组件。Cube
添加以下脚本。项目
,然后切换回 场景
视图。在 Scene
视图中,您可以看到 LightProbeGroup。 当游戏运行时,旋转会在 Awake
中发生变化。指示 LightProbeGroup 的 8 个黄色球体更改位置,并且 Scene
模式显示 Cube
绕 x、y 和 z 轴旋转,并显示在 Local tool handle
中。 旋转 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); } }