Как получить спрайт после положения мыши, когда камера поворачивается на 30 градусов по осям X на UNITY3D? - PullRequest
3 голосов
/ 16 октября 2019

Я пытаюсь получить спрайт, следуя положению моей мыши, когда моя камера повернута на 30 градусов по оси x, это прекрасно работает, если камера имеет вращение 0,0,0, но не на 30,0,0, как ядолжен рассчитать это? Я попытался вычесть в положение x безуспешно, вот мой код:

это прикреплено к объекту Я хочу следовать за мышью

private void FixedUpdate()
{
    Vector3 pos = cam.ScreenToWorldPoint(Input.mousePosition);
    transform.position = new Vector3(pos.x, pos.y, transform.position.z);
}

РЕДАКТИРОВАТЬ: также моя камера ортографическаяне перспектива

1 Ответ

2 голосов
/ 17 октября 2019

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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...