ScreenToWorldPoint
здесь не совсем подходит, потому что вы еще не знаете подходящего расстояния, чтобы убрать спрайт от камеры. Вместо этого рассмотрите возможность использования raycast (алгебраически, используя Plane
), чтобы определить, куда поместить спрайт.
Создайте плоскость XY в позиции спрайта:
Plane spritePlane = new Plane(Vector3.forward, transform.position);
Создайте луч изположение курсора, используя Camera.ScreenPointToRay
:
Ray cursorRay = cam.ScreenPointToRay(Input.mousePosition);
Найдите, где этот луч пересекает плоскость и поместите туда спрайт:
float rayDist;
spritePlane.Raycast(cursorRay, out rayDist);
transform.position = cursorRay.GetPoint(rayDist);
Всего:
private void FixedUpdate()
{
Plane spritePlane = new Plane(Vector3.forward, transform.position);
Ray cursorRay = cam.ScreenPointToRay(Input.mousePosition);
float rayDist;
spritePlane.Raycast(cursorRay, out rayDist);
transform.position = cursorRay.GetPoint(rayDist);
}