Не могу разобраться со скриптом управления игроком

При соприкосновении с барьером, механика работает нормально, но если игрок соприкасается с любым другим объектом, игрок начинает медленно улетать после соприкосновения. вот как это выглядит

Управление игрока осуществляется при помощи двух скриптов: Первый скрипт - это само движение персонажа

using UnityEngine;
using UnityEngine.EventSystems;
 
public class RotationManager : MonoBehaviour, IBeginDragHandler, IDragHandler
{
    public bool _isCollision = true;
    [SerializeField] private GameObject _player;
    private Rigidbody2D _rigidbody2d;
 
    [SerializeField] private int speed;
 
    private void Start() {
        _rigidbody2d = _player.GetComponent<Rigidbody2D>();
    }
 
    public void OnBeginDrag(PointerEventData eventData) {
        if(_isCollision == true) {
            if(Mathf.Abs(eventData.delta.x) > Mathf.Abs(eventData.delta.y)) {
                if(eventData.delta.x > 0) {
                    _rigidbody2d.AddForce(Vector2.right * speed);
                    _player.GetComponent<PlayerController>()._rotate = 0;
                    _isCollision = false;
                }
                else {
                    _rigidbody2d.AddForce(Vector2.left * speed);
                    _player.GetComponent<PlayerController>()._rotate = 0;
                    _isCollision = false;
                }
            }
            else {
                if(eventData.delta.y > 0) {
                    _rigidbody2d.AddForce(Vector2.up * speed);
                    _player.GetComponent<PlayerController>()._rotate = 1;
                    _isCollision = false;
                }
                else {
                    _rigidbody2d.AddForce(Vector2.down * speed);
                    _player.GetComponent<PlayerController>()._rotate = 1;
                    _isCollision = false;
                }
            }
        }
    }
 
    public void OnDrag(PointerEventData eventData) {
 
    }
}

Второй скрипт - это возвращение в центр клетки, после соприкосновения с объектом

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
 
public class PlayerController : MonoBehaviour
{
    [SerializeField] private GameObject _panel;
    [SerializeField] private float _speed;
    private Animator _animator;
    private Vector3 _target;
 
    public int _rotate;
 
    private void Start() {
        _animator = GetComponent<Animator>();
 
    }
 
    private void OnCollisionEnter2D(Collision2D other) {
        if(_rotate == 0) { // Игрок двигается по оси X
            if(transform.position.x * -1 < 0) // Если текущее положение персонажа больше нуля
                _target = new Vector3(Mathf.Round(transform.position.x - 0.1f) * 1.0f, transform.position.y, 0f); // Округляет положение Игрока, чтобы получить координаты центра текущей клетки
            else 
                _target = new Vector3(Mathf.Round(transform.position.x + 0.1f) * 1.0f, transform.position.y, 0f);
        }
        if(_rotate == 1) { // Игрок двигается по оси Y
            if(transform.position.y * -1 < 0)
                _target = new Vector3(transform.position.x, Mathf.Round(transform.position.y - 0.1f) * 1.0f, 0f);
            else
                _target = new Vector3(transform.position.x, Mathf.Round(transform.position.y + 0.1f) * 1.0f, 0f);
        }
 
        _panel.GetComponent<RotationManager>()._isCollision = true; //Останавливает движение при соприкосновении с объектом
        transform.position = Vector3.MoveTowards(transform.position, _target, _speed);
    }
}

Ответы (0 шт):