physicsShapeGroup | 将用作形状和顶点来源的 PhysicsShapeGroup2D。 |
srcShapeIndex | 在 physicsShapeGroup 中用于分配给碰撞器的源形状索引。 |
dstShapeIndex | 在碰撞器中用于复制源形状的目标形状索引。 |
从指定的 physicsShapeGroup
中将单个形状和所有关联的形状顶点设置到碰撞器中。
设置单个形状允许替换碰撞器中的单个形状。在可能的情况下,碰撞器将减少分配形状所需的工量。有关此行为的更多信息,请参阅 GetCustomShapes。
此碰撞器的任何现有接触将在下一个模拟步骤中重新计算。
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); } }
shapes | 将用作形状来源的数组。 |
vertices | 将用作顶点来源的数组。 |
srcShapeIndex | 在 shapes 数组中用于分配给碰撞器的源形状索引。 |
dstShapeIndex | 在碰撞器中用于复制源形状的目标形状索引。 |
从指定的形状和顶点数组中将单个形状和所有关联的形状顶点设置到碰撞器中。
设置单个形状允许替换碰撞器中的单个形状。在可能的情况下,碰撞器将减少分配形状所需的工量。有关此行为的更多信息,请参阅 GetCustomShapes。
此碰撞器的任何现有接触将在下一个模拟步骤中重新计算。
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); } }