Игрок скользит после столкновения с движением Rigidbody2DC#

Место общения программистов C#
Ответить
Anonymous
 Игрок скользит после столкновения с движением Rigidbody2D

Сообщение Anonymous »

Я работаю над 2D-игрой с видом сверху в Unity и использую Rigidbody2D для управления движением игрока. Однако я столкнулся с проблемой, когда игрок медленно скользит после столкновения с объектами, хотя я ожидаю, что игрок перестанет двигаться после столкновения. Скольжение происходит несмотря на то, что в OnCollisionEnter2D скорость игрока установлена ​​на ноль.
Видео проблемы:
https://drive.google.com/file/d/1OTRkKT ... 79HWn/view
Вот фрагмент кода движения моего игрока:

Код: Выделить всё

public class PlayerMovement : MonoBehaviour {
[SerializeField] float speed = 10f;
private Vector2 movement;
private Rigidbody2D rb;

private void Awake()
{
rb = GetComponent();
}

private void Update()
{
Vector2 moveDirection = Vector2.zero;

if (Keyboard.current.wKey.isPressed)
{
moveDirection.y = 1;
}

moveDirection.x += movement.x;
moveDirection.y += movement.y;

if (moveDirection.magnitude > 1)
{
moveDirection.Normalize();
}

if (moveDirection.magnitude > 0)
{
rb.MovePosition(rb.position + moveDirection * speed * Time.fixedDeltaTime);
}
}

private void OnCollisionEnter2D(Collision2D collision)
{
rb.velocity = Vector3.zero;
}

private void OnMovement(InputValue value)
{
movement = value.Get();
}
Шаги, которые я предпринял для решения проблемы:
  • Я добавил rb.velocity = Vector3.zero внутри OnCollisionEnter2D().
  • Я убедился, что использую Rigidbody2D для перемещения, а не изменяю напрямую положение трансформации игрока.< /li>
    Я использую MovePosition() в методе FixUpdate(), чтобы обеспечить плавное движение на основе физики.
Что я делаю пробовал:
  • Переместить логику игрока в FixUpdate().
  • Настроить трение на коллайдере игрока, добавив Physics Material 2D с трением, установленным на 0.
Проблема сохраняется:
Несмотря на эти попытки, игрок продолжает скользить после столкновения. Как я могу предотвратить такое поведение скольжения и обеспечить полную остановку игрока при столкновении с другими объектами?
Дополнительная информация:
Объект игрока имеет Rigidbody2D с настройками по умолчанию.
В игре используется новая система ввода Unity.
Будем благодарны за любую помощь или предложения!

Подробнее здесь: https://stackoverflow.com/questions/791 ... d-movement
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»