Вы немного перепутали назначение ваших переменных - они не содержали значений, которые описали их имена:)
используйте это для плоскости XY:
public class MovementController : MonoBehaviour
{
Vector3 startPos;
Vector3 dist;
void OnMouseDown()
{
startPos = Camera.main.WorldToScreenPoint(transform.position);
dist = transform.position - Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, startPos.z));
}
void OnMouseDrag()
{
Vector3 lastPos = new Vector3(Input.mousePosition.x, Input.mousePosition.y, startPos.z);
transform.position = Camera.main.ScreenToWorldPoint(lastPos) + dist;
}
}
или это, если вы предпочитаете плоскость XZ:
public class MovementController : MonoBehaviour
{
Vector3 startPos;
Vector3 dist;
void OnMouseDown()
{
startPos = Camera.main.WorldToScreenPoint(transform.position);
dist = transform.position - Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, startPos.y, Input.mousePosition.y));
}
void OnMouseDrag()
{
Vector3 lastPos = new Vector3(Input.mousePosition.x, startPos.y, Input.mousePosition.y);
transform.position = Camera.main.ScreenToWorldPoint(lastPos) + dist;
}
}
EDIT:
для контроля изменения позиции, измените:
transform.position = Camera.main.ScreenToWorldPoint(lastPos) + dist;
до:
Vector3 targetPos = Camera.main.ScreenToWorldPoint(lastPos) + dist;
Vector3 dir = targetPos - transform.position;
float dist = dir.magnitude;
Vector3.Normalize(dir);
// change 1.0f to something else if you want:
transform.position += new Vector3(dir.x * dist * 1.0f, dir.y * dist * 1.0f, dir.z * dist * 1.0f);
и если вы измените dir.z * dist * 1.0f
на dir.z * dist * 2.0f
, то вы будете двигаться вдвое больше в направлении Z.