В общем сейчас ты работаешь с абстрактным вращением, я даже не знаю как лучше... попробуй как-то так:
if (Mathf.Abs(dir.z) > 0.0015)
transform.Rotate (dir* speed* 6);
else
{
if (transform.eulerAngles.z > speed * 6)
transform.eulerAngles.z -= speed * 6;
else if (transform.eulerAngles.z < -speed* 6)
transform.eulerAngles.z += speed * 6;
else
transform.eulerAngles.z = 0;
}