Raycasting в единстве прыгает в неправильную позицию - PullRequest
0 голосов
/ 08 мая 2020

У меня проблема с Raycasting. Все, что я хочу сделать, это всегда знать позицию моего курсора в мировом пространстве, и это работает, но только если курсор движется. когда курсор не перемещается, он переходит в случайную точку примерно на 4 единицы вниз по осям x и z.

public class CameraMovementRay : MonoBehaviour
{
    public Camera playerCam;
    Ray cursorRay;
    Vector3 playerPos;
    public RaycastHit cursorHit;
    public LayerMask clickPlain;
    public bool cursorHittingFloor;

    // Update is called once per frame
    void Update()
    {
        cursorRay = playerCam.ScreenPointToRay(Input.mousePosition);
        if (Physics.Raycast(cursorRay, out cursorHit, 100f, clickPlain))
        {
            print(cursorHit.point);
            Debug.DrawLine(cursorRay.origin, cursorHit.point, Color.red);
            cursorHittingFloor = true;

        }
        else
        {
            Debug.LogError("Not on the grund");
            cursorHittingFloor = false;
        }
    }

Ответы [ 2 ]

0 голосов
/ 09 мая 2020

Вы пробовали использовать Camera.ScreenToWorldPoint вместо Camera.ScreenPointToRay? Я думаю, что это может работать лучше для ваших целей, потому что он принимает Vector2 (MousePosition) в пикселях и удобно конвертирует его в World Space Point. Документация Unity, о которой я говорю: https://docs.unity3d.com/ScriptReference/Camera.ScreenToWorldPoint.html

Сообщите мне, как это работает

0 голосов
/ 09 мая 2020

Это не сработало, но я нашел код, который выполняет

`` publi c class LookAtMouse: MonoBehaviour {

public Camera playerCamera;

Plane movementPlane = new Plane(Vector3.up, 0f);
Vector3 lookPoint;

Ray CursorRay;

// Update is called once per frame
void Update()
{
    CursorRay = playerCamera.ScreenPointToRay(Input.mousePosition);
    float enter = 0.0f;

    movementPlane.Raycast(CursorRay, out enter);
    lookPoint = CursorRay.GetPoint(enter);
    print(lookPoint);
    Debug.DrawLine(CursorRay.origin, lookPoint);

    transform.LookAt(lookPoint);

}

} ``

...