Unity 6.3
0 онлайн 77 гостей 3 в системе
Вход

Соедините LowLevelPhysics2D API объекты с соединениями

Примечание: Эта документация посвящена написанию C# скрипты с использованием LowLevelPhysics2D API. Использовать 2D физики в Unity Editor используя компоненты, такие как Rigidbody 2D компонент, см. 2D физика вместо этого.

Чтобы создать связь или ограничение между двумя объектами LowLevelPhysics2D API, создайте соединение, которое соединяет два физических тела.

Например, создайте фиксированное соединение, которое соединяет два тела вместе, или расстояние соединения, которое удерживает их на определенном расстоянии друг от друга. Используйте соединения, чтобы симулировать реальное механическое поведение, как пружины или петли.

Все соединения позволяют устанавливать точки крепления на соединяемых телах, а также ограничения на силу и крутящий момент, которые они применяют. Дополнительную информацию см. в PhysicsJoint API.

Выполните следующие действия:

  1. Создайте два объекта PhysicsBody. Дополнительные сведения см. в Создание физического объекта.

  2. Создайте объект определения для типа соединения, который вы хотите. Например, объект 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.

  3. Чтобы создать соединение, используйте метод CreateJoint вашего объекта мира и передайте определение. Например:

    PhysicsJoint distanceJoint = world.CreateJoint(jointDefinition);
    
  4. Если ваш скрипт находится в 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);        
    }
}

Дополнительные ресурсы