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

CustomCollider2D.SetCustomShapes

建议更改

成功!

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

关闭

提交失败

由于某些原因,您的建议更改无法提交。请<a>稍后再试</a>。感谢您抽出时间帮助我们提高 Unity 文档的质量。

关闭

取消

声明

public void SetCustomShapes(PhysicsShapeGroup2D physicsShapeGroup);

参数

physicsShapeGroup 用作形状和顶点来源的 PhysicsShapeGroup2D

描述

将碰撞体中的所有形状和顶点设置为指定 PhysicsShapeGroup2D 所表示的形状和顶点。

所有现有的形状和顶点都将被指定 PhysicsShapeGroup2D 中包含的形状和顶点替换。

在可能的情况下,碰撞体将减少分配指定形状和顶点所需的工作量。碰撞体检查每个形状索引处分配的 PhysicsShape2D,如果碰撞体已经包含相同的物理形状,则不执行任何操作。如果物理形状具有相同的 形状类型顶点数量,则现有的物理引擎形状将仅更新其 半径顶点。如果物理形状具有不同的 形状类型顶点数量,则物理引擎形状将被重新创建。

此碰撞体的任何现有接触将在下一个模拟步骤中重新计算。

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

声明

public void SetCustomShapes(NativeArray<PhysicsShape2D> shapes, NativeArray<Vector2> vertices);

参数

shapes 包含用于分配给碰撞体的所有形状的数组。
vertices 包含用于分配给碰撞体的所有顶点的数组。

描述

将碰撞体中的所有形状和顶点设置为指定数组所表示的形状和顶点。

所有现有的形状和顶点都将被指定数组中包含的形状和顶点替换。

在可能的情况下,碰撞体将减少分配指定形状和顶点所需的工作量。碰撞体检查每个形状索引处分配的 PhysicsShape2D,如果碰撞体已经包含相同的物理形状,则不执行任何操作。如果物理形状具有相同的 形状类型顶点数量,则现有的物理引擎形状将仅更新其 半径顶点。如果物理形状具有不同的 形状类型顶点数量,则物理引擎形状将被重新创建。

此碰撞体的任何现有接触将在下一个模拟步骤中重新计算。

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