Параметры
positions | Массив, в котором хранится расположение трехмерных позиций. |
transform | Матрица, меняющая положение, поворот и размер расчета границ. |
Возвращает
Bounds Вычисляет выровненный по оси ограничивающий прямоугольник.
Описание
Рассчитывает ограничивающую рамку из заданного массива позиций и матрицы преобразования.
GeometryUtility.CalculateBounds создает ограничивающую рамку Границы. Параметр positions хранит массив трехмерных точек. Каждая точка находится внутри сгенерированного выровненного по осям ограничивающего прямоугольника. Параметр transform обеспечивает преобразование Matrix4x4, в котором используется положение Vector3, вращение кватерниона и масштабирование Vector3.
В приведенном ниже примере показано, как использовать CalculateBounds. Группа LightProbeGroup передает positions в CalculateBounds. Пример кода создает ограничивающую рамку с восемью Light Probes. По умолчанию световые зонды располагаются по одной единице от каждого угла единичного куба.
Чтобы запустить пример:
- Create a Project and add an empty GameObject called
GameObject
. - Add a 3D cube as a child of
GameObject
and call itCube
. - Add a LightProbeGroup component to
Cube
. - Add the script below to
Cube
. - Run the
Project
and switch back to theScene
view.
В представлении Scene
вы можете увидеть LightProbeGroup. Когда игра запускается, поворот меняется в Awake
. Восемь желтых сфер, обозначающих LightProbeGroup, меняют положение, и куб кажется повернутым. В режиме 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);
}
}