Параметры
useBodyPosition | Должна ли сетка трансформироваться по положению прикрепленного Rigidbody2D? |
useBodyRotation | Должна ли сетка трансформироваться вращением прикрепленного Rigidbody2D? |
Возвращает
Mesh Созданная плоская Сетка соответствует геометрии коллайдера или имеет значение NULL, если Сетка не может быть создана.
Описание
Создает плоскую Сетку, идентичную области, заданной геометрией Collider2D.
Проще говоря, этот метод создает Mesh, точно представляющую область, заданную Collider2D. Затем созданную Mesh можно использовать для любых целей, включая, помимо прочего, навигационные сетки для 2D-навигации. Collider2D не владеет созданной сеткой, и вы несете ответственность за ее жизнь, поэтому не удаляете Mesh приведет к утечке памяти. Collider2D во время этого вызова никак не изменяется. Collider2D должен иметь допустимые формы для создания Mesh, в противном случае будет возвращен NULL, указывающий на отсутствие Сетка создана.
Вся геометрия Collider2D находится в пространстве Rigidbody2D, к которому она присоединена. Вы можете выбрать, будут ли вершины Mesh преобразовываться по положению и повороту Rigidbody2D, используя useBodyPosition
и useBodyRotation
соответственно. Если Collider2D не присоединен к Rigidbody2D, геометрия постоянно находится в мировом пространстве, и оба useBodyPosition
и useBodyRotation
всегда должны иметь значение false.
Ниже приводится более подробная информация о том, как формы Collider2D учитываются при создании сетки. Хотя существует множество типов Collider2D, они создают только геометрию столкновения, состоящую из следующих типов примитивных форм: Круг, Капсула, Многоугольник и Край. Эти примитивные типы делятся на две группы, известные как закрытые выпуклые примитивы и открытые примитивы. Примитивы типа Circle, Capsule и Polygon являются замкнутыми выпуклыми примитивами, которые определяют замкнутую выпуклую область, ограниченную примитивом. Примитив Edge — это открытый тип, определяющий геометрию без внутренней области.
А CircleCollider2D создаст один примитивный круг. CapsuleCollider2D создаст один примитив-капсулу. BoxCollider2D создаст один полигональный примитив. PolygonCollider2D может создавать примитивы из нескольких полигонов для преобразования потенциально вогнутой области в несколько выпуклых полигонов. EdgeCollider2D может создавать несколько примитивов ребер. TilemapCollider2D может создавать несколько полигональных примитивов (для каждого тайла). CompositeCollider2D может создавать либо несколько примитивов полигонов (в режиме Polygon), либо создавать несколько примитивов ребер (в режиме Outline).
При создании Mesh для представления геометрии Collider2D все замкнутые выпуклые примитивы (окружность, капсула и многоугольник) создают соответствующие заполненная область, определяемая этими примитивами. В случае наличия нескольких полигонов создается общая площадь всех полигонов. Обратите внимание, что когда BoxCollider2D.edgeRadius используется больше нуля (для создания радиальных ребер), создается Mesh. также представлять эту геометрию.
При создании Mesh для представления геометрии Collider2D все открытые примитивы (ребра) обрабатываются особым образом. Когда начальная вершина первого ребра совпадает с конечной вершиной последнего ребра (для определения псевдозамкнутой области), создается сетка для представления этой замкнутой области, даже если 2D-физика сама по себе не рассматривает ее как таковую. Если вершины не совпадают, то Mesh будет создана только в том случае, если EdgeCollider2D.edgeRadius больше нуля, поскольку это дает края с областью.
При использовании EdgeCollider2D с совпадающими начальной и конечной вершинами будет создана сетка, представляющая собой выпуклую оболочку всех краевых вершин. . Любая вогнутая вершина (создающая вогнутую конфигурацию) будет рассматриваться как находящаяся на выпуклой оболочке, что приводит к выпуклой плоской Mesh. Если требуется выпуклая Mesh, следует использовать несколько полигональных примитивов, например PolygonCollider2D или CompositeCollider2D в полигональном режиме. CompositeCollider2D в режиме структуры создает ребра с совпадающими начальной и конечной вершинами, поэтому всегда будет создаваться замкнутая форма Mesh, которая также поддерживает CompositeCollider2D.edgeRadius.
Смотрите так же: GetShapeHash and NavMeshBuildSource.sourceObject.