Если вы хотите, чтобы он шел вверх и вниз, тогда почему вы используете значение x?Вы можете просто оставить его равным 0, и только значение y изменится и заставит его подниматься и опускаться.
Редактировать Не уверен, что это идеально, но похоже на движение вверх, вниз, влево и вправо. Я попробовал, и он идет в одном направлении за раз.
Vector2 offset;
Vector2 startPos = Vector2.zero;
public void OnBeginDrag(PointerEventData eventData)
{
startPos = eventData.position;
offset.x = transform.position.x - Input.mousePosition.x;
offset.y = transform.position.y - Input.mousePosition.y;
}
public void OnDrag(PointerEventData eventData)
{
Vector2 direction = eventData.position - startPos;
direction.Normalize();
if ((direction.x>0 || direction.x<0) && direction.y>-0.5f && direction.y < 0.5f)
{
transform.position = new Vector3(offset.x+ Input.mousePosition.x, transform.position.y);
}
if ((direction.y > 0 || direction.y<0) && direction.x > -0.5f && direction.x < 0.5f)
{
transform.position = new Vector3( transform.position.x, offset.y + Input.mousePosition.y);
}
}