Пример, который вы привели, не работает, потому что вы задаете координату 0, равную 0, и при вызове на перспективной камере Camera.ScreenToWorldPoint
выполняет некоторую векторную математику, поэтому при просмотре сцены ваш плеер, вероятно, плавает прямо сверху вашей камеры. Я не могу объяснить математику, потому что не понимаю, но, к счастью, нам обоим это не нужно! По сути, координата z говорит о том, как далеко от камеры находится точка, и поскольку область обзора перспективной камеры сужается ближе к камере, размещение ее в 0 означает, что ей некуда под go. как перемещение объекта дальше от камеры требует, чтобы он двигался дальше, чтобы соответствовать положению мыши.
Большая проблема в том, что ваш метод неправильный и есть лучший способ. Camera.ScreenToWorldPoint
преобразует координату мыши в мировую пространственную координату в зависимости от того, на что смотрит камера, поэтому вы по сути переключаете координаты y и z, а затем вводите их в метод, который определяет, какие координаты необходимо перевернуть.
Похоже, этот скрипт прикреплен к вашему игровому объекту GameObject, поэтому он должен выглядеть следующим образом:
Camera cam;
[Range(1,10)] //this just creates a slider in the inspector
public int distanceFromCamera;
void Start()
{
//calling Camera.main is a shortcut for
//FindGameObjectsWithTag("MainCamera")
//so you should avoid calling it every frame
cam = Camera.main;
}
void Update()
{
//This will work for both perspective and orthographic cameras
transform.position = cam.ScreenToWorldPoint(
Input.mousePosition + new Vector3(0,0,distanceFromCamera));
}
Если ваша камера будет перемещаться ближе или дальше от плоскости, убедитесь, что добавить что-то, что будет держать расстояние от камеры обновленным.
Тем не менее, для большинства игр привязка игрока к курсору мыши обычно не то, что вы ищете. Как правило, вы хотите, чтобы какой-то ввод перемещал игрока в определенном направлении на определенную величину. Если это то, что вы ищете, эта часть руководства по космическим шутерам является хорошим введением в движение игрока (хотя сам код может быть устаревшим).