Перемещение GameObject с LowLevelPhysics2D API
Примечание: Эта документация посвящена написанию C# скрипты с использованием LowLevelPhysics2D API. Использовать 2D физики в Unity Editor используя компоненты, такие как Rigidbody 2D компонент, см. 2D физика вместо этого.
По умолчанию, когда вы создаете объект с LowLevelPhysics2D API, объект не соединен с GameObjects в сцене.
Чтобы переместить GameObject, настройте физический объект на обновление компонента Transform из GameObject.
Выполните следующие действия:
Чтобы разрешить физическим объектам обновлять компоненты Transform глобально, установите свойство
TransformWriteModeмира наFast2DилиSlow2D.Чтобы разрешить физическому телу обновлять компоненты Transform, установите его
TransformWriteModeнаCurrent.-
Чтобы прикрепить компонент Transform из GameObject к физическому телу, установите свойство
transformObjectдля компонента Transform.Примечание:
transformObjectсвойство доступно только в сценарии C#, а не в сценарии Inspector окно публичногоPhysicsBodyDefinitionобъект. Убедитесь, что свойство
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.