Замедление платформы в Unity

я сделал передвижение платформы, на которую игрок может запрыгнуть и уехать вместе с ней, но хотелось еще сделать постепенное замедление платформы когда она приближалась к краям своих точек старта и конца, и так же что бы скорость постепенно увеличивалась если она начала двигаться обратно, решил сделать так, брать всю дистанцию и давать в инспекторе пользователю возможность выбрать процент от этой дистанции на которой платформа будет замедлятся или двигаться быстрей, но так и не смог это реализовать, вот код, всем заранее спасибо за помощь

public class Elevator : MonoBehaviour
{

    [SerializeField] private float _speed;
    [SerializeField] private float _distance;
    [SerializeField] private float _timeToWait;

    [Range(10f, 25f)]
    [SerializeField] private float _slowDistance;

    private Vector2 _startPoint;
    private Vector2 _endPoint;

    private bool _isMovingBack = false;
    private bool _isWait = false;
    private float _waitTime;
    private float _minDistance;

    private void Start()
    {
        //Get percent of distance
        _minDistance = _distance * (_slowDistance / 100f);
        Debug.Log($"Distance is: {_distance}m");
        Debug.Log($"{_slowDistance}% of {_distance} = {_minDistance}");

        _waitTime = _timeToWait;
        _startPoint = transform.position;
        _endPoint = _startPoint + Vector2.right * _distance;
    }

    private void Update()
    {
        if (_isWait)
        {
            _waitTime -= Time.deltaTime;
            if (_waitTime <= 0)
            {
                _waitTime = _timeToWait;
                _isWait = false;
                _isMovingBack = !_isMovingBack;
            }
        }


        if(IsOutDistance())
        {
            _isWait = true;
        }
        
    }

    private void FixedUpdate()
    {
        if(!_isWait)
        {
            Move();
        }
    }

    private bool IsOutDistance()
    {
        bool isOutStart = _isMovingBack && transform.position.x <= _startPoint.x;
        bool isOutEnd = !_isMovingBack && transform.position.x >= _endPoint.x;
        if (isOutStart || isOutEnd)
        {
            return true;
        }
        return false;

    }

    private void Move()
    {
        if(_isMovingBack)
        {
            transform.position = new Vector2(transform.position.x - _speed * Time.fixedDeltaTime, transform.position.y);
        }
        else
        {
            transform.position = new Vector2(transform.position.x + _speed * Time.fixedDeltaTime, transform.position.y);
        }
        
    }

    private void OnCollisionEnter2D(Collision2D collision)
    {
        collision.gameObject.transform.parent = this.transform;
    }

    private void OnCollisionExit2D(Collision2D collision)
    {
        collision.gameObject.transform.parent = null;
    }
}

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