Видео проблемы:
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
Мобильная версия