Проблема в том, что Input.mousePosition
не имеет оси z, поскольку для координаты мыши есть только x и y. Ось z
просто 0
, поэтому возвращает неправильную позицию, когда используется Camera.main.ScreenToWorldPoint
.
Вам нужно сделать Input.mousePosition;
, вручную изменить значение z-оси как угодно > 0
. Обычно 10
подходит для этого, но вы можете изменить его, если этого недостаточно для вас. После этого вы можете передать эту измененную функцию Vector3
в функцию Camera.main.ScreenToWorldPoint(mousepos)
.
public GameObject lineprefab;
private GameObject linehandler;
private Vector3 mousepos;
void Update()
{
if (Input.GetMouseButtonDown(0))
{
mousepos = Input.mousePosition;
mousepos.z = 10;
mousepos = Camera.main.ScreenToWorldPoint(mousepos);
linehandler = Instantiate(lineprefab, mousepos, Quaternion.identity) as GameObject;
}
}
ИЛИ
public GameObject lineprefab;
private GameObject linehandler;
void Update()
{
if (Input.GetMouseButtonDown(0))
{
Ray rayCast = Camera.main.ScreenPointToRay(Input.mousePosition);
linehandler = Instantiate(lineprefab, rayCast.GetPoint(10), Quaternion.identity) as GameObject;
}
}
Не относится:
Я заметил, что вы используете Input.GetMouseButton
. Вероятно, вы хотите Input.GetMouseButtonDown
, когда Input.GetMouseButtonDown
вызывается один раз, пока ключ не будет отпущен. Input.GetMouseButton
повторно вызывается, когда нажатая клавиша удерживается нажатой, и вы можете легко создать тысячи объектов с этим.