Unity прыгающий мяч с одинаковой высотой и контролем скорости падения - PullRequest
0 голосов
/ 16 сентября 2018

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

heightVector * |sin(time * speed)|

но я не знаю куда его вставить. Я действительно нуб в этих вещах. Помогите!

1 Ответ

0 голосов
/ 16 сентября 2018

Ваша формула верна.
heightVector - максимальная высота вашего мяча.Например, если это (0,10), то это означает, что ваш мяч поднимется на 10 метров.
time - это просто таймер.speed - это скорость вашего мяча.

Однако я рекомендую умножить скорость на Time.deltaTime, чтобы сделать независимую частоту кадров отказов.

Давайте начнем писать код.
heightVector и speed не имеют сложности.Просто создайте два открытых поля, и все готово!

class Bouncer : MonoBehaviour
{
    public float Speed = 10;
    public Vector2 HeightVector = new Vector2(0,10);
}

Чтобы создать таймер, вам нужна переменная float.Затем вам нужно добавлять Time.deltaTime к нему при каждом Update вызове.

class Bouncer : MonoBehaviour
{
    public float Speed = 10;
    public Vector2 HeightVector = new Vector2(0,10);

    float timer;
    void Update()
    {
         timer += Time.deltaTime;
    }
}

Поздравляю!теперь у вас есть таймер!

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

class Bouncer : MonoBehaviour
{
    public float Speed = 10;
    public Vector3 HeightVector = new Vector3(0,10);

    float timer;
    void Update()
    {
         timer += Time.deltaTime;

         Vector3 currentPosition = HeightVector * Mathf.Abs(timer * Speed * Time.deltaTime);

         transform.position = currentPosition;
    }
}

Теперь вам нужно прикрепить скрипт Bouncer к вашему мячу, и ваш шар должен начать подпрыгивать!

Редактировать: Если вы хотите, чтобы мяч сохранил свою исходную позицию и отскочил оттуда, вам нужно сохранить исходную позицию и добавить к ней рассчитанную позицию:

class Bouncer : MonoBehaviour
{
    public float Speed = 10;
    public Vector3 HeightVector = new Vector3(0,10);
    Vector3 originalPosition;
    float timer;

    void Start()
    {
        originalPosition = transform.position;
    }

    void Update()
    {
         timer += Time.deltaTime;

         Vector3 currentPosition = HeightVector * Mathf.Abs(timer * Speed * Time.deltaTime);

         transform.position = originalPosition + currentPosition;
    }
}
...