Как движение по синусоиде Unity C#
У меня есть код который заставляет двигать объект по синусоиде. Я вижу что оно зависит от времени. При зажатии пробела куб останавливает свое движение. Но после отжатия он появляется в другом месте. Можно ли это как то решить или нужен новый скрипт ?
public float frequency = 20f;
public float magnitude = 0.5f;
Vector3 pos;
void Start ()
{
pos = transform.position;
}
// Update is called once per frame
void Update ()
{
if(!Input.GetKey(KeyCode.Space))
transform.position = pos + transform.up * Mathf.Sin(Time.time * frequency) * magnitude;
}
Ответы (1 шт):
Time.time - это время в которое работает приложение. Как следствие оно продолжает тикать невзирая на то, зажать пробел или нет (ну и как следствие при отпускании пробела, кубик кидает туда, сколько оно натикало.
Проще добавить еще один счетчик (i++) в Udpate, который будет сдвигать кубик в более контролируемое время.
P.S. Из документации по функции: Regular (per frame) calls should be avoided: Time.time is intended to supply the length of time the application has been running for, and not the time per frame.
Так что лучше не использовать данные часы в апдейте.
P.P.S И если добавлять туда счетчик, то движение лучше проводить в FixedUpdate, он, в отличие от Update, не зависит от FPS)