Ну так у тебя в коде прямо так и написано:
if(rot >= 30)
{
odin *= -1;
}
Если предположить, что rot = 90, то при первом FixedUpdate он у тебя крутанётся до 88, тк rot >= 30.
При следующем FixedUpdate, тк rot всё ещё >=30, у тебя "odin" будет инвертирован и крутанётся уже обратно до 90.
Попробуй вот так:
void FixedUpdate()
{
rotation = transform.eulerAngles;
rot = Mathf.Abs(rotate - rotation.x);
var dir = rot >= 30 ? -1 : 1; // Только для примера
transform.eulerAngles += new Vector3(dir * 2, 0, 0);
}
+ Лучше перейди на Update обычный.