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);
}
