Documentation

Unity Engine


User Manual

Script Reference

Unity Engine


GetCustomShapes

Gets all the physics shapes and vertices in the Collider and places them in the specified PhysicsShapeGroup2D.
Read time 4 minutesLast updated 4 days ago

Definition

  • Type: Method
  • Namespace: UnityEngine
  • Assembly: UnityEngine.Physics2DModule

GetCustomShapes(PhysicsShapeGroup2D)

Gets all the physics shapes and vertices in the Collider and places them in the specified PhysicsShapeGroup2D.
public int GetCustomShapes(PhysicsShapeGroup2D physicsShapeGroup)

Parameters

physicsShapeGroup

The physics shape group that will receive all the physics shapes and vertices from the Collider.

Returns

Type

Description

intReturns the total number of physics shapes placed in the specified
physicsShapeGroup
.

Examples

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); // 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, outputShapeGroup.shapeCount); Assert.AreApproximatelyEqual(0.5f, 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); }}

GetCustomShapes(PhysicsShapeGroup2D, int, int)

Gets a specified number of physics shapes defined byshapeCount starting at
shapeIndex
along with all associated vertices those shapes use and places them in the specified PhysicsShapeGroup2D.
public int GetCustomShapes(PhysicsShapeGroup2D physicsShapeGroup, int shapeIndex, int shapeCount = 1)

Parameters

physicsShapeGroup

The physics shape group that will receive the physics shapes and vertices from the Collider.

shapeIndex

The shape index within the Collider to start retrieving shapes from.

shapeCount

The total number of shapes starting at the
shapeIndex
to retrieve.

Returns

Type

Description

intThe total number of physics shapes placed in the specified
physicsShapeGroup
.

Examples

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); // Create an output shape group. var outputShapeGroup = new PhysicsShapeGroup2D(); // Get the last 3 custom shapes. var shapeCount = customCollider.GetCustomShapes(outputShapeGroup, shapeIndex: 2, shapeCount: 3); // Validate the results. Assert.AreEqual(3, shapeCount); Assert.AreEqual(3, outputShapeGroup.shapeCount); Assert.AreApproximatelyEqual(0.7f, outputShapeGroup.GetShape(shapeIndex: 0).radius); Assert.AreApproximatelyEqual(0.8f, outputShapeGroup.GetShape(shapeIndex: 1).radius); Assert.AreApproximatelyEqual(0.9f, outputShapeGroup.GetShape(shapeIndex: 2).radius); }}

GetCustomShapes(NativeArray<PhysicsShape2D>, NativeArray<Vector2>)

Gets all the physics shapes and vertices in the Collider and places them in the specified arrays.
public int GetCustomShapes(NativeArray<PhysicsShape2D> shapes, NativeArray<Vector2> vertices)

Parameters

The array that will be populated with a copy of all the shapes in the PhysicsShapeGroup2D.

The array that will be populated with a copy of all the vertices in the PhysicsShapeGroup2D.

Returns

Type

Description

intReturns the total number of physics shapes placed in the specified arrays.

Examples

using Unity.Collections;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: new Vector2(3f, 8f), radius: 0.5f); inputShapeGroup.AddCircle(center: new Vector2(6f, 3f), radius: 0.6f); inputShapeGroup.AddCircle(center: new Vector2(2f, 5f), radius: 0.7f); inputShapeGroup.AddCircle(center: new Vector2(9f, 2f), radius: 0.8f); inputShapeGroup.AddCircle(center: new Vector2(1f, 7f), radius: 0.9f); // Assign our shapes. customCollider.SetCustomShapes(inputShapeGroup); // Validate the contents of the custom collider. Assert.AreEqual(5, customCollider.customShapeCount); // Get all the custom shapes. var shapes = new NativeArray<PhysicsShape2D>(customCollider.customShapeCount, Allocator.Temp); var vertices = new NativeArray<Vector2>(customCollider.customVertexCount, Allocator.Temp); var shapeCount = customCollider.GetCustomShapes(shapes, vertices); // Validate the shapes. Assert.AreEqual(5, shapeCount); Assert.AreApproximatelyEqual(0.5f, shapes[0].radius); Assert.AreApproximatelyEqual(0.6f, shapes[1].radius); Assert.AreApproximatelyEqual(0.7f, shapes[2].radius); Assert.AreApproximatelyEqual(0.8f, shapes[3].radius); Assert.AreApproximatelyEqual(0.9f, shapes[4].radius); // Validate the vertices. Assert.AreEqual(new Vector2(3f, 8f), vertices[0]); Assert.AreEqual(new Vector2(6f, 3f), vertices[1]); Assert.AreEqual(new Vector2(2f, 5f), vertices[2]); Assert.AreEqual(new Vector2(9f, 2f), vertices[3]); Assert.AreEqual(new Vector2(1f, 7f), vertices[4]); // Dispose of the native arrays. vertices.Dispose(); shapes.Dispose(); }}