版本:Unity 6 (6000.0)
语言中文
  • C#

CustomCollider2D.GetCustomShapes

建议更改

成功!

感谢您帮助我们提升 Unity 文档的质量。虽然我们无法接受所有提交,但的确会阅读来自用户的每条建议更改,并在适用时进行更新。

关闭

提交失败

由于某些原因,您的建议更改无法提交。请在几分钟后<a>重试</a>。感谢您花时间帮助我们提升 Unity 文档的质量。

关闭

取消

声明

public int GetCustomShapes(PhysicsShapeGroup2D physicsShapeGroup);

参数

physicsShapeGroup 将接收来自碰撞器的所有物理形状顶点的物理形状组。

返回

int 返回放置在指定physicsShapeGroup中的物理形状的总数。

描述

获取碰撞器中的所有物理形状顶点,并将它们放置在指定的PhysicsShapeGroup2D中。

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); } }

声明

public int GetCustomShapes(PhysicsShapeGroup2D physicsShapeGroup, int shapeIndex, int shapeCount = 1);

参数

physicsShapeGroup 将接收来自碰撞器的物理形状顶点的物理形状组。
shapeIndex 在其中开始检索形状的碰撞器内的形状索引。
shapeCount shapeIndex开始检索的形状总数。

返回

int 放置在指定physicsShapeGroup中的物理形状的总数。

描述

shapeIndex开始获取由shapeCount定义的指定数量的物理形状以及这些形状使用且放置在指定的PhysicsShapeGroup2D中的所有关联顶点。

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); } }

声明

public int GetCustomShapes(NativeArray<PhysicsShape2D> shapes, NativeArray<Vector2> vertices);

参数

shapes 将填充有PhysicsShapeGroup2D中所有形状的副本的数组。
vertices 将使用 PhysicsShapeGroup2D 中的所有顶点的副本填充数组。

返回

int 返回置于指定数组中的 物理形状 的总数。

描述

获取碰撞器中的所有物理形状和顶点,并将其置于指定的数组中。

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(); } }