Вам нужно что-то вроде синусоидального движения или любой другой график, который вам нравится.
Примером может быть такой:
gameObject.transform.Translate(Vector3.right * Time.deltaTime*cubeSpeed);
gameObject.transform.position += transform.up * Mathf.Sin (Time.fixedTime * 3.0f ) * 0.1f;
Выше псевдо для моделирования 2D-графика, может бытьадаптированы к вашей ситуации.
Объект всегда движется вправо и поднимается и опускается при совершении синусоидального движения.Поскольку скорость подъема и опускания не фиксирована, следовательно, вы получаете синусоидальное или подобное синусоидальному движение.
В вашем случае, когда объект всегда опускается, он будетсделайте синусоидальное движение влево и вправо.
Ваше движение основано на вращении, поэтому, если вы зададите эту синусоидальную скорость в качестве скорости вращения, вы сможете достичьthis.
Другим подходом может быть lerp или slerp
Lerp позволяет выполнять довольно плавные транзакции между 2 векторами.
Как перемещение из точки A в точку B за X секунд.
Для поворота вам понадобится Quaternion.Lerp
На Ответы Unity есть отличный ответ, вы можете проверить, что если у вас нетt раньше.
Надеюсь, это поможет!Ура!