1

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

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;
}

}

Spatz
  • 4,496
CatCode
  • 11
  • 2

0 Answers0