Ваша формула верна.
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;
}
}