Unity изменение высоты объекта через функцию Синуса

введите сюда описание изображения

Стоит такая задача, чтобы изменять высоту куба периодически через фун Mathf.Sin(timer), но я подозреваю, что сделал реализацию неправильно, так как не могу понять, как корректно обновить счетчик, чтобы его значение не улетало в космос.

float timer = 0;
Vector3 pos;  

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

void Update()
{
  timer = timer + 1 * Time.deltaTime;
  pos.y += Mathf.Sin(timer) * Time.deltaTime;
  transform.position = pos;
}

Ответы (2 шт):

Автор решения: aepot

Попробуйте так

float timer = 0;
Vector3 pos;
float y;  

void Start () {
  pos = transform.position;
  y = pos.y;
}

void Update()
{
  timer += Time.deltaTime;
  if (timer > 2.0f * Mathf.PI)
      timer -= 2.0f * Mathf.PI;
  pos.y = y + Mathf.Sin(timer) * 10;
  transform.position = pos;
}
→ Ссылка
Автор решения: Yaroslav
[SerializeField] private float _offsetPosition = 10f; // размах
[SerializeField] private float _cycleTime = 2f; // время одного цикла
private Transform _transform;
private Vector3 _anchorPosition;
private float _timer;

private void Awake () {
    _transform = transform;
    _anchorPosition = _transform.position;
}

private void Update () {
    _timer += Time.deltaTime*Mathf.PI*2f/_cycleTime;
    _timer %= Mathf.PI*2f; // остаток от деления на 2 Pi
    float SinY = Mathf.Sin(_timer)*_offsetPosition;
    _transform.position = _anchorPosition+new Vector3(0, SinY, 0);
}
→ Ссылка