я сделал передвижение платформы, на которую игрок может запрыгнуть и уехать вместе с ней, но хотелось еще сделать постепенное замедление платформы когда она приближалась к краям своих точек старта и конца, и так же что бы скорость постепенно увеличивалась если она начала двигаться обратно, решил сделать так, брать всю дистанцию и давать в инспекторе пользователю возможность выбрать процент от этой дистанции на которой платформа будет замедлятся или двигаться быстрей, но так и не смог это реализовать, вот код, всем заранее спасибо за помощь
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;
}
}