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

Настройка объектов LowLevelPhysics2D API с определениями

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

Для настройки свойств физического мира и его объектов, таких как гравитация, трение, положение и форма, используйте определения. Определения — это объекты, которые хранят физические свойства и значения. Вы создаете определение, а затем передаете его созданному миру, телу или форме.

Определения оптимизируют производительность физики, избавляя вас от установки свойств после создания мира, тела или формы, что может заставить CPU выполнять дополнительную работу. Определения также позволяют передавать и повторно использовать наборы значений.

Полный список объектов определения см. в документации LowLevelPhysics2D API.

Создание и использование определения

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

  1. Создайте в своём скрипте открытый объект-определение, например PhysicsBodyDefinition объект для настройки PhysicsBody.

    // Create a new body definition with default properties and values
    public PhysicsBodyDefinition bodyDefinition = new PhysicsBodyDefinition();
    

    Новое определение имеет набор значений по умолчанию. Чтобы изменить полученные значения по умолчанию, см. раздел Изменение значений определения по умолчанию.

  2. Передайте определение при создании физического объекта. Например:

    PhysicsBody myObject = world.CreateBody(bodyDefinition);
    

Если ваш скрипт находится в MonoBehaviour класс, прикреплённый к GameObject, Unity показывает свойства этого определения в Inspector полный список свойств по умолчанию см. в разделе «Свойства по умолчанию» Ссылка на определения для LowLevelPhysics2D API.

Если изменить определение после создания объекта с его помощью, изменения не повлияют на существующий объект.

Примечание: Определения являются большими объектами struct. Для передачи определений другим методам рекомендуется использовать ключевое слово ref или in для передачи их по ссылке. Передача по ссылке позволяет избежать использования дополнительной памяти для копирования структуры.

Установка свойства определения в сценарии

Чтобы настроить определение в сценарии, установите свойства определения до создания объекта с его помощью.

Полный список свойств см. в документации LowLevelPhysics2D API.

Например:

public PhysicsBodyDefinition bodyDefinition = new PhysicsBodyDefinition
{
    // Set the linear velocity
    linearVelocity = Vector2.right * 4f,

    // Set the gravity scale
    gravityScale = 0f
};

// Create the body
PhysicsBody myObject = world.CreateBody(bodyDefinition);

Примечание: Изменение position физического тела не меняет его центра массы. Unity рассчитывает центр массы на основе массы фигур, прикрепленных к телу.

Создание нескольких объектов с одним определением

Чтобы создать несколько физических тел или физических форм с одной и той же конфигурацией, вызовите метод CreateBodyBatch вашего объекта мира. Передайте определение и количество объектов, которые вы хотите создать. Например:

// Create 500 bodies using the single definition
NativeArray<PhysicsBody> fiveHundredBodies = world.CreateBodyBatch(bodyDefinition, 500);

Важно: CreateBodyBatch возвращает тип NativeArray, который указывает на собственную память, поэтому память должна быть уничтожена после ее использования. Дополнительные сведения см. в Уничтожение объектов LowLevelPhysics2D API и управление памятью.

Изменение определений по умолчанию

Чтобы изменить значения по умолчанию, получаемые при создании объекта определения с помощью new или .defaultDefinition, выполните следующие действия.

  1. Создание ассета Physics Low Level Settings 2D. Дополнительные сведения см. в разделе Настройка глобальных физических параметров 2D.
  2. Выберите ассет в окне Project.
  3. В окне Inspector настройте свойства в разделе Определения по умолчанию.

Полный список свойств см. в окне Physics Low Level Settings reference.

Пример

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

using UnityEngine;
using UnityEngine.LowLevelPhysics2D;

public class CreateObjectsWithDefinitions : MonoBehaviour
{
    
    PhysicsWorld world;
    
    // Declare definitions with default properties for the body and shape
    public PhysicsBodyDefinition bodyDefinition = new PhysicsBodyDefinition();
    public PhysicsShapeDefinition  shapeDefinition = new PhysicsShapeDefinition();
 
    void Start()
    {
        // Get the default world
        world = PhysicsWorld.defaultWorld;

        // Set the position of the body using the body definition
        bodyDefinition.position = new Vector2(0f, 5f);

        // Create the physics body with the body definition
        PhysicsBody myObject = world.CreateBody(bodyDefinition);

        // Set the density of the shape to 5 kg/m²
        shapeDefinition.density = 5f;

        // Create the circle geometry
        CircleGeometry circleGeometry = new CircleGeometry { radius = 1.5f };

        // Create the shape with both the geometry and the shape definition
        myObject.CreateShape(circleGeometry, shapeDefinition);
    }
}

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