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

Перемещение GameObject с LowLevelPhysics2D API

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

По умолчанию, когда вы создаете объект с LowLevelPhysics2D API, объект не соединен с GameObjects в сцене.

Чтобы переместить GameObject, настройте физический объект на обновление компонента Transform из GameObject.

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

  1. Чтобы разрешить физическим объектам обновлять компоненты Transform глобально, установите свойство TransformWriteMode мира на Fast2D или Slow2D.

  2. Чтобы разрешить физическому телу обновлять компоненты Transform, установите его TransformWriteMode на Current.

  3. Чтобы прикрепить компонент Transform из GameObject к физическому телу, установите свойство transformObject для компонента Transform.

    Примечание: transformObject свойство доступно только в сценарии C#, а не в сценарии Inspector окно публичного PhysicsBodyDefinition объект.

  4. Убедитесь, что свойство type физического тела установлено на PhysicsBody.BodyType.Dynamic.

Например, присоедините следующий скрипт к GameObject, затем перейдите в режим воспроизведения. Физикальное тело падает под действием силы тяжести и обновляет позицию в компоненте Transform в окне Inspector.

using UnityEngine;
using UnityEngine.LowLevelPhysics2D;

public class MoveGameObject : MonoBehaviour
{
    public PhysicsWorld world;
    public PhysicsWorldDefinition worldDefinition = PhysicsWorldDefinition.defaultDefinition;

    void Awake()
    {
        // Enable physics bodies updating transforms
        worldDefinition.transformWriteMode = PhysicsWorld.TransformWriteMode.Fast2D;
        world = PhysicsWorld.Create(worldDefinition);
    }    

    void Start()
    {
        // Create a body and shape 
        PhysicsBody circleBody = world.CreateBody();
        CircleGeometry circleGeometry = new CircleGeometry { radius = 2f };
        circleBody.CreateShape(circleGeometry);
        
        // Set body to dynamic so it falls under gravity
        circleBody.type = PhysicsBody.BodyType.Dynamic; 

        // Enable this physics body updating transforms
        circleBody.transformWriteMode = PhysicsBody.TransformWriteMode.Current;

        // Set the updated transform as the transform of this GameObject
        circleBody.transformObject = transform;
    }
}

Поворот объектов быстрее

По умолчанию, Unity устанавливает ограничение скорости вращения физического тела, чтобы избежать чрезмерных сил и неправильного прохождения объектов друг через друга. Чтобы устранить ограничение, создайте Ассет Physics Low Level Settings 2D и установите его свойство Fast Rotation Allowed на true. Это свойство рекомендуется только для круглых объектов.

Дополнительные сведения см. в Настройка глобальных параметров физики 2D.

Интерполяционные позиции

По умолчанию, физическое тело обновляет компонент Transform после того, как Unity завершит вычисление физического моделирования. Чтобы интерполировать позиции между шагами моделирования, установите TransformWriteMode физического тела на Interpolate или Extrapolate.

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