CustomCollider2D.SetCustomShape
Declaration
public void SetCustomShape(PhysicsShapeGroup2D physicsShapeGroup, int srcShapeIndex, int dstShapeIndex);Параметры
| Параметр | Описание |
|---|---|
| physicsShapeGroup | PhysicsShapeGroup2D для использования в качестве источника фигур и вершин. |
| srcShapeIndex | Исходный индекс формы в physicsShapeGroup, используемый для назначения Collider. |
| dstShapeIndex | Индекс конечной формы в Collider, в которую будет скопирована исходная форма. |
Описание
Устанавливает одну фигуру и все связанные с ней вершины из указанного physicsShapeGroup в Collider.
Установка одной формы позволяет заменить отдельные формы в Collider. Когда это возможно, Collider уменьшит количество работы, необходимой для назначения формы. См. GetCustomShapes для дополнительной информации об этом поведении.
Любые существующие контакты для этого Collider будут пересчитаны во время следующего шага моделирования.
using UnityEngine; using UnityEngine.Assertions;
public class Example : MonoBehaviour { void Start() { // Fetch the custom collider. var customCollider = GetComponent<CustomCollider2D>();
// Create an input shape group. var inputShapeGroup = new PhysicsShapeGroup2D();
// Add 5 Circles to the shape group. inputShapeGroup.AddCircle(center: Vector2.zero, radius: 0.5f); inputShapeGroup.AddCircle(center: Vector2.zero, radius: 0.6f); inputShapeGroup.AddCircle(center: Vector2.zero, radius: 0.7f); inputShapeGroup.AddCircle(center: Vector2.zero, radius: 0.8f); inputShapeGroup.AddCircle(center: Vector2.zero, radius: 0.9f);
// Assign our shapes. customCollider.SetCustomShapes(inputShapeGroup);
// Validate the contents of the custom collider. Assert.AreEqual(5, customCollider.customShapeCount);
// Transfer the last shape in the shape group to the first in the custom collider. customCollider.SetCustomShape(inputShapeGroup, srcShapeIndex: 4, dstShapeIndex: 0);
// Create an output shape group. var outputShapeGroup = new PhysicsShapeGroup2D();
// Get all the custom shapes. var shapeCount = customCollider.GetCustomShapes(outputShapeGroup);
// Validate the results. Assert.AreEqual(5, shapeCount); Assert.AreEqual(5, customCollider.customShapeCount); Assert.AreApproximatelyEqual(0.9f, outputShapeGroup.GetShape(shapeIndex: 0).radius); Assert.AreApproximatelyEqual(0.6f, outputShapeGroup.GetShape(shapeIndex: 1).radius); Assert.AreApproximatelyEqual(0.7f, outputShapeGroup.GetShape(shapeIndex: 2).radius); Assert.AreApproximatelyEqual(0.8f, outputShapeGroup.GetShape(shapeIndex: 3).radius); Assert.AreApproximatelyEqual(0.9f, outputShapeGroup.GetShape(shapeIndex: 4).radius); } }
Declaration
public void SetCustomShape(NativeArray<PhysicsShape2D> shapes, NativeArray<Vector2> vertices, int srcShapeIndex, int dstShapeIndex);Параметры
| Параметр | Описание |
|---|---|
| формы | Массив, используемый в качестве источника фигур. |
| вершины | Массив, используемый в качестве источника вершин. |
| srcShapeIndex | Исходный индекс формы в массиве shapes, используемый для назначения Collider. |
| dstShapeIndex | Индекс конечной формы в Collider, в которую будет скопирована исходная форма. |
Описание
Устанавливает одну форму и все связанные вершины формы из указанных форм и массивов вершин в Collider.
Установка одной формы позволяет заменить отдельные формы в Collider. Когда это возможно, Collider уменьшит количество работы, необходимой для назначения формы. См. GetCustomShapes для дополнительной информации об этом поведении.
Любые существующие контакты для этого 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 = 0.5f, vertexStartIndex = 0, vertexCount = 1 }, [1] = new PhysicsShape2D() { shapeType = PhysicsShapeType2D.Circle, radius = 0.6f, vertexStartIndex = 1, vertexCount = 1 }, [2] = new PhysicsShape2D() { shapeType = PhysicsShapeType2D.Circle, radius = 0.7f, vertexStartIndex = 2, vertexCount = 1 }, [3] = new PhysicsShape2D() { shapeType = PhysicsShapeType2D.Circle, radius = 0.8f, vertexStartIndex = 3, vertexCount = 1 }, [4] = new PhysicsShape2D() { shapeType = PhysicsShapeType2D.Circle, radius = 0.9f, vertexStartIndex = 4, vertexCount = 1 }, };
// Create a native vertices array and populate it with the vertices for the shapes. var vertices = new NativeArray<Vector2>(3, Allocator.Temp) { [0] = Vector2.zero, [1] = Vector2.zero, [2] = Vector2.zero, [3] = Vector2.zero, [4] = Vector2.zero, };
// Fetch the custom collider. var customCollider = GetComponent<CustomCollider2D>();
// Assign all our test shapes. customCollider.SetCustomShapes(shapes, vertices);
// Assign the last shape to the first shape. customCollider.SetCustomShape(shapes, vertices, srcShapeIndex: 4, dstShapeIndex: 0);
// Get all the custom shapes. var outputShapeGroup = new PhysicsShapeGroup2D(); var shapeCount = customCollider.GetCustomShapes(outputShapeGroup);
// Validate the results. Assert.AreEqual(5, shapeCount); Assert.AreEqual(5, customCollider.customShapeCount); Assert.AreApproximatelyEqual(0.9f, outputShapeGroup.GetShape(shapeIndex: 0).radius); Assert.AreApproximatelyEqual(0.6f, outputShapeGroup.GetShape(shapeIndex: 1).radius); Assert.AreApproximatelyEqual(0.7f, outputShapeGroup.GetShape(shapeIndex: 2).radius); Assert.AreApproximatelyEqual(0.8f, outputShapeGroup.GetShape(shapeIndex: 3).radius); Assert.AreApproximatelyEqual(0.9f, outputShapeGroup.GetShape(shapeIndex: 4).radius); } }