Когда добавляешь BoxCollider к новому предмету, он автоматически растягивается под его размеры. Когда меняешь меш этого предмета - коллайдер не подтягивается автоматически. В api самого коллайдера никаких методов типа "AlignToSize" нет. Есть просто
BoxCollider.size
Use this to return or set the size of the BoxCollider component of a
GameObject. Unity measures the size in the GameObject's local space
Но если мы пишем
collider.size = Vector3.one;
То в итоге получаем коллайдер не по размеру объекта, а просто со сторонами 1х1х1
Так как растянуть BoxCollider по размеру объекта?
При добавлении нового компонента к объекту у него(компонента) вызывается MonoBehaviour.Reset()
:
Reset to default values.
Reset is called when the user hits the Reset button in the Inspector's context menu or when adding the component the first time. This function is only called in editor mode. Reset is most commonly used to give good default values in the inspector.
Данное поведение и меняет значения размера и центра коллайдера.
Также нужно понимать, что вообще влияет на размеры и позицию коллайдера, в случае примитивных коллайдеров BoxCollider/SphereCollider
- это всего 2 значения: center
, локальное положение центра коллайдера, и size
(radius для сферы), локальный размер(радиус) коллайдера.
Получить эти значения можно с помощью компонента MeshFilter
, а точнее с помощью MeshFilter.sharedMesh.bounds
:
Bounds bounds = GetComponent<MeshFilter>().sharedMesh.bounds;
BoxCollider collider = GetComponent<BoxCollider>();
collider.center = bounds.center;
collider.size = bounds.size;
Важно понимать, что размеры коллайдеров хранятся в локальном пространстве относительно объекта, к которому они прикреплены.
MeshFilter.sharedMesh.bounds
- это AABB в локальном пространстве, что нам и нужно для задания размеров коллайдера.
Чтобы ответ был достаточно понятен для всех, объясню, что такое AABB на всякий случай.
AABB - ограничивающий параллелепипед выровненный по координатным осям (англ. Axis Aligned Bounding Box).
В основном он используется для рендеринга, но в данном случае он предоставляет нам фактические размеры объекта, сильно "округленные" размеры объекта, если быть точнее. Поскольку он "выровнен по осям", то угол вращения относительно всех осей у него равен нулю, но вращение нам и не нужно, оно будет вычислено после применения transform матриц, а это забота Unity, так что вручную ничего делать не нужно.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Можно ли сохранить массив объектов, в отдельный файл, а потом запустить этот файл в приложении и восстановить массив (который был в файле)...
У меня получается получить значении таким образом (работаю c разными доменами):
Надо написать парсер на phpС яндексом работает нормально, но youtube