Unity 3d, плавно увеличивайте скорость (автомат c) - PullRequest
0 голосов
/ 04 марта 2020

У меня есть простой куб, и я написал этот скрипт для перемещения куба, но мне нужно, чтобы скорость объекта увеличивалась со временем, но не работает ...

Мне нужно переместить куб по оси x без точки прибытия.

publi c float speed = 0.5f; publi c bool active = false;

float currentSpeed = 1f;
float maxSpeed = 50f;

// Start is called before the first frame update
void Start()
{
    speed = 0f;

}

// Update is called once per frame
void Update()
{
    if (Input.GetMouseButtonDown(0)) {

        active = true;

    }

    if(active == true)
    {

        Move();
    }
}

void Move() {

    if (currentSpeed < maxSpeed)
    {

        currentSpeed += Time.deltaTime;
        transform.Translate(currentSpeed * (Time.deltaTime / 2), 0, 0);
        Debug.Log("Speed: " + currentSpeed);
    }
    else {

        transform.Translate(50f, 0, 0);
    }

}

что я делаю не так?

Ответы [ 2 ]

0 голосов
/ 04 марта 2020

Вы можете использовать SmoothDamp .
Это плавно увеличит вектор, который вы можете использовать в качестве скорости. Это может выглядеть примерно так:

Vector3 targetPositon; // Where you want the cube to move to.
Vector3 refVelocity = Vector3.zero; // This is used inside the function, don't touch!
float smoothing = 0.5f; // How much smoothing there should be.

void Update() {
    transform.position = Vector3.SmoothDamp(transform.position, targetPosition,
    ref refVelocity, smoothing);
}

SmoothDamp вернет Vector3, который постепенно приближается к цели и ускоряется / замедляется как пружина.

Правка, другая идея:
Другая вещь, которую вы могли бы сделать, это иметь некоторую скорость v, которую вы добавляете к позиции в каждом кадре и умножаете ее на число, подобное 1.01f, или на любое небольшое число, большее единицы. Это немного грубо, но работает.

0 голосов
/ 04 марта 2020

Думаю, ваш код работает очень-очень медленно. В конце концов вы увеличиваете скорость на дельту, которая составляет примерно (1000/60) (при 60 кадр / с) перфрейма, но применяете это значение, умноженное на ((1000/60) / 2).

Вы уверены, что не хотите использовать физический движок Unity? С его помощью вы можете использовать функцию AddForce для ускорения объекта c.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...