Соедините LowLevelPhysics2D API объекты с соединениями
Примечание: Эта документация посвящена написанию C# скрипты с использованием LowLevelPhysics2D API. Использовать 2D физики в Unity Editor используя компоненты, такие как Rigidbody 2D компонент, см. 2D физика вместо этого.
Чтобы создать связь или ограничение между двумя объектами LowLevelPhysics2D API, создайте соединение, которое соединяет два физических тела.
Например, создайте фиксированное соединение, которое соединяет два тела вместе, или расстояние соединения, которое удерживает их на определенном расстоянии друг от друга. Используйте соединения, чтобы симулировать реальное механическое поведение, как пружины или петли.
Все соединения позволяют устанавливать точки крепления на соединяемых телах, а также ограничения на силу и крутящий момент, которые они применяют. Дополнительную информацию см. в PhysicsJoint API.
Выполните следующие действия:
Создайте два объекта
PhysicsBody. Дополнительные сведения см. в Создание физического объекта.-
Создайте объект определения для типа соединения, который вы хотите. Например, объект
PhysicsDistanceJointDefinition. Сделайте его полемpublic, чтобы оно отображало свои свойства в окне Inspector.Например:
public PhysicsDistanceJointDefinition jointDefinition = new PhysicsDistanceJointDefinition { // Specify the two bodies to connect bodyA = body1, bodyB = body2, // Set the distance distance = 2f };Новое определение имеет набор значений по умолчанию. Дополнительные сведения об определениях и изменении значений по умолчанию см. в Настройка физических свойств 2D с помощью определения.
Полный перечень типов соединений см. в
PhysicsJoint.JointType. -
Чтобы создать соединение, используйте метод
CreateJointвашего объекта мира и передайте определение. Например:PhysicsJoint distanceJoint = world.CreateJoint(jointDefinition); -
Если ваш скрипт находится в
MonoBehaviourкласс, прикреплённый к GameObject, настройте свойства в Inspector окно.Чтобы настроить свойства в скрипте, установите свойства объекта определения перед созданием соединения. Дополнительные сведения см. в Настройка физических свойств 2D с помощью определения.
Если вы уничтожаете тело, все соединения, связанные с этим телом, также уничтожаются. Для более подробной информации см. Уничтожение физических объектов и управление памятью.
Пример
В следующем примере используется фиксированное соединение для создания фиксированной точки, от которой качается большая окружность.
using UnityEngine;
using UnityEngine.LowLevelPhysics2D;
public class CreateJoint : MonoBehaviour
{
public PhysicsDistanceJointDefinition jointDefinition = new PhysicsDistanceJointDefinition();
void Awake()
{
PhysicsWorld world = PhysicsWorld.defaultWorld;
// Create a static fixed body
PhysicsBodyDefinition bodyDefinition1 = new PhysicsBodyDefinition{
type = PhysicsBody.BodyType.Static,
position = new Vector2(-5f, 0f),
};
PhysicsBody object1 = world.CreateBody(bodyDefinition1);
// Create a large circle below the fixed body
PhysicsBodyDefinition bodyDefinition2 = new PhysicsBodyDefinition{
type = PhysicsBody.BodyType.Dynamic,
position = new Vector2(5f, 0f),
};
PhysicsBody object2 = world.CreateBody(bodyDefinition2);
object2.CreateShape(new CircleGeometry { radius = 3f });
// Add the bodies to the joint definition
jointDefinition.bodyA = object1;
jointDefinition.bodyB = object2;
// Add the joint to the world
world.CreateJoint(jointDefinition);
}
}
Дополнительные ресурсы
- Столкновения и взаимодействия в космосе LowLevelPhysics2D API
- PhysicsCore2D хранилище на GitHub