Как использовать mesh.bounds в Unity?

Недавно я создал простой генератор уровней, который создает уровень с сегментами. я использовал mesh.bounds.x чтобы увидеть, как далеко от предыдущего сегмента следует разместить следующий сегмент. Это сработало для меня довольно хорошо, потому что все сегменты были квадратными. Теперь я решил сделать эту работу с большими сегментами с пропорциями других сторон (все еще довольно прямоугольными). Моя проблема в том, что, хотя я пробовал много комбинаций, я не мог настроить это должным образом.

Может кто-нибудь объяснить мне, как это mesh.bound работает? Я также создаю экземпляры повернутых сегментов, может быть, это вызывает некоторые ошибки? Все мои префабы импортированы из блендера.

В моем коде есть часть, где я создаю экземпляр одного сегмента (прежде чем я решил использовать более сложные сегменты):

size = meshh.bounds.size;

if ((x == 0) && (y == 0))
{
     segments[x, y] = Instantiate(prefabs[0], new Vector3(segments[1, 1].transform.position.x - size.x, segments[1, 1].transform.position.y, segments[1, 1].transform.position.z + size.x), segments[1, 1].transform.rotation) as GameObject;

     segments[x, y].tag = "Terrain";
}

2 ответа

Решение

Ваша конкретная проблема заключается в том, что ограничивающая рамка образует квадратную рамку в мировом пространстве... то есть "выровнена по оси".

AABB расшифровывается как AXIS ALIGNED ограничивающая рамка.

Это НЕ "границы", как вы могли бы подумать о "границах" в обычном английском значении этого слова.

Точно так же, как вы говорите, если у вас есть повернутый объект, он дает вам самую большую "плоскую" коробку в мировом пространстве, в которой находится вещь.

Это основной в 3D-инженерии.

Диаграммы показывают некоторые "AABB" "выровненные по оси" ограничивающие рамки в 2D. То же самое относится и к 3D.

(После того, как вы разберетесь с этим более сложным способом, будьте осторожны, потому что границы меша являются путаницами границ AABB в локальном пространстве Unity, т.е. в пространстве родителя - используйте renderer.bounds для пространства сцены - не беспокойтесь об этом, пока вы получить к нему:) Существуют различные "границы", которые вы можете использовать в Unity, все они сбивают с толку.)

Кстати - один поцелуй способ справиться с этим, если вы только начинаете: просто вращайте объект до тех пор, пока он не станет квадратным, то есть без вращения. Тогда получите измерение! Затем поверните его туда, куда вам нужно.

Границы описывают наименьшую коробку, в которую поместится ваша сетка. Коробка находится в мировом пространстве. В основном, как эти белые углы в 3ds Max:

Поле выбора 3dsMax

Mesh.bounds на Unity Docs

Другие вопросы по тегам