Camera.main.ScreenToWorldPoint (Input.mousePosition) всегда возвращает положение камеры, независимо от того, где я нажимаю - PullRequest
0 голосов
/ 25 марта 2019

Я пытаюсь создать скрипт, который преобразует позицию щелчка мышью в позицию в GridLayout. Я пытаюсь использовать Camera.main.ScreenToWorldPoint (), но его возвращаемые координаты камеры, а не точки, по которой щелкнули, не отображаются, если я использую статическую камеру или камеру, установленную на плеере. Я прикрепил этот скрипт к префабу CharacterRobotBoy из стандартных ресурсов для единства.

using UnityEngine;

public class Position : MonoBehaviour
{
    void Update()
    {
        if (Input.GetMouseButtonUp(0))
        {
            Vector3 pz = Camera.main.ScreenToWorldPoint(Input.mousePosition);
            Debug.Log("camera:"+pz);
            pz.z = 0;
            GridLayout gridLayout = transform.parent.GetComponentInParent<GridLayout>();
            Vector3Int cellPosition = gridLayout.WorldToCell(pz);
            Debug.Log("cell position:"+cellPosition);
        }
    }
}

Можно ли исправить мой код для задачи или есть другое решение проблемы. Спасибо за вашу помощь. PS: я новичок в единстве.

1 Ответ

2 голосов
/ 25 марта 2019

Предположим, у вас есть плоская плоскость и камера, смотрящая на нее сверху. Думайте об экране как о объективе камеры, а курсор как о маленьком муравье, идущем по нему. Если я правильно помню, ScreenToWorldPoint возвращает местоположение муравья в мировом пространстве, которое находится где-то на небе. Установив z: = 0, вы получите точку прямо под камерой, независимо от того, где находится курсор.

Вместо этого вы должны направить луч из центра камеры через муравья и столкнуть его с плоскостью. Точка столкновения - это то, что вы ищете. Это можно сделать с помощью метода ScreenPointToRay.

Вы должны проверить Учебное пособие по ролевым играм Brackeys , он сделал нечто подобное.

Надеюсь, это поможет:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...