CustomCollider2D.SetCustomShapes
Declaration
public void SetCustomShapes(PhysicsShapeGroup2D physicsShapeGroup);Параметры
| Параметр | Описание |
|---|---|
| physicsShapeGroup | PhysicsShapeGroup2D для использования в качестве источника фигур и вершин. |
Описание
Устанавливает все формы и вершины в Collider на те, которые представлены указанными PhysicsShapeGroup2D.
Все существующие фигуры и вершины заменяются фигурами и вершинами, содержащимися в указанных PhysicsShapeGroup2D.
По возможности, Collider уменьшит количество работы, необходимой для назначения указанных фигур и вершин. Collider проверяет каждую PhysicsShape2D, назначаемую в каждом индексе фигуры, и если Collider уже содержит ту же физическую фигуру, то никакой работы не выполняется. Если физическая фигура имеет тот же тип фигуры и количество вершин, то существующая фигура физики будет обновлена только с radius и vertices. Если физическая фигура имеет другой тип фигуры или количество вершин, то форма физики будет создана заново.
Любые существующие контакты для этой Collider будут пересчитаны во время следующего шага симулирования.
using UnityEngine;
public class Example : MonoBehaviour { void Start() { // Fetch the custom collider. var customCollider = GetComponent<CustomCollider2D>();
// Create a shape group. var shapeGroup = new PhysicsShapeGroup2D();
// Add a Circle to the shape group. shapeGroup.AddCircle ( center: new Vector2(-1f, 0f), radius: 0.5f );
// Add a box to the shape group. shapeGroup.AddBox ( center: new Vector2(1f, 0f), size: new Vector2(1f, 1f) );
// Assign the shapes and vertices. customCollider.SetCustomShapes(shapeGroup); } }
Declaration
public void SetCustomShapes(NativeArray<PhysicsShape2D> shapes, NativeArray<Vector2> vertices);Параметры
| Параметр | Описание |
|---|---|
| формы | Массив, содержащий все формы, используемые для назначения Collider. |
| вершины | Массив, содержащий все вершины, используемые для назначения Collider. |
Описание
Устанавливает все формы и вершины в Collider на те, которые представлены указанными массивами.
Все существующие фигуры и вершины заменяются фигурами и вершинами, содержащимися в указанных массивах.
По возможности, Collider уменьшит количество работы, необходимой для назначения указанных фигур и вершин. Collider проверяет каждую PhysicsShape2D, назначаемую в каждом индексе фигуры, и если Collider уже содержит ту же физическую фигуру, то никакой работы не выполняется. Если физическая фигура имеет тот же тип фигуры и число вершин, то существующая фигура физики будет обновлена только с radius и vertices. Если физическая фигура имеет другой тип фигуры или число вершин, то форма физики будет создана заново.
Любые существующие контакты для этой Collider будут пересчитаны во время следующего шага симулирования.
using Unity.Collections; using UnityEngine; using UnityEngine.Assertions;
public class Example : MonoBehaviour { void Start() { // Create a native shapes array and populate it with a Circle and Capsule. var shapes = new NativeArray<PhysicsShape2D>(2, Allocator.Temp) { [0] = new PhysicsShape2D() { shapeType = PhysicsShapeType2D.Circle, radius = 1f, vertexStartIndex = 0, vertexCount = 1 }, [1] = new PhysicsShape2D() { shapeType = PhysicsShapeType2D.Capsule, radius = 0.5f, vertexStartIndex = 1, vertexCount = 2 } };
// Create a native vertices array and populate it with the vertices for the shapes. var vertices = new NativeArray<Vector2>(3, Allocator.Temp) { [0] = new Vector2(2f, 3f), [1] = Vector2.down, [2] = Vector2.up };
// Fetch the custom collider. var customCollider = GetComponent<CustomCollider2D>();
// Set custom collider to the shapes and vertices. customCollider.SetCustomShapes(shapes, vertices);
// Dispose of the native arrays. vertices.Dispose(); shapes.Dispose();
// Validate the collider. Assert.AreEqual(2, customCollider.customShapeCount); Assert.AreEqual(3, customCollider.customVertexCount);
// Get all the custom shapes. var shapeGroup = new PhysicsShapeGroup2D(); customCollider.GetCustomShapes(shapeGroup);
// Validate the first shape and vertex. var shape0 = shapeGroup.GetShape(0); Assert.AreEqual(PhysicsShapeType2D.Circle, shape0.shapeType); Assert.AreApproximatelyEqual(1f, shape0.radius); Assert.AreEqual(0, shape0.vertexStartIndex); Assert.AreEqual(1, shape0.vertexCount); Assert.AreEqual(new Vector2(2f, 3f), shapeGroup.GetShapeVertex(shapeIndex: 0, vertexIndex: 0));
// Validate the second shape and vertices. var shape1 = shapeGroup.GetShape(1); Assert.AreEqual(PhysicsShapeType2D.Capsule, shape1.shapeType); Assert.AreApproximatelyEqual(0.5f, shape1.radius); Assert.AreEqual(1, shape1.vertexStartIndex); Assert.AreEqual(2, shape1.vertexCount); Assert.AreEqual(Vector2.down, shapeGroup.GetShapeVertex(shapeIndex: 1, vertexIndex: 0)); Assert.AreEqual(Vector2.up, shapeGroup.GetShapeVertex(shapeIndex: 1, vertexIndex: 1)); } }