Vector3.Dot
можно рассчитать скалярное произведение между двумя векторами. Указываем для него направление движения и находим отклонение:float diff = -Vector3.Dot(transform.TransformDirection(direction), normal);
rigidbody.AddRelativeForce((direction + Vector3.up * diff) * speed, mode);