Unity ScreenToWorldPoint возвращается за камерой - PullRequest
0 голосов
/ 20 февраля 2020

В единстве я использую ScreenToWorldPoint для перемещения моего объекта с помощью мыши, но DrawRay из моего преобразования в ScreenPoint по какой-то причине возвращается за моей камерой. Я пытался проверить и выяснить причину, но я просто понятия не имею; вот мой код:

using UnityEngine;
using System.Collections;

public class ScreenToWorldPointTest : MonoBehaviour {

    public GameObject obj;
    public Vector3 objDist;
    public Vector3 objDistFwd;
    public float moveSpeed = .1f;

    void Start() {
        obj = GameObject.Find("ChessKnightWhite");
    }

    void Update() {
        Vector3 objPos = obj.transform.position;
        objDist = objPos - transform.position;
        objDistFwd = new Vector3(objDist.x * transform.forward.x, objDist.y * transform.forward.y, objDist.z * transform.forward.z);
        Vector3 screenPoint = Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, objDistFwd.magnitude)
        Vector3 move = Vector3.lerp(screenPoint, transform.position, moveSpeed);
        Debug.DrawRay(transform.position, screenPoint, Color.Green);

        if(Input.GetMouseButton(0)) {
            obj.transform.position = move - new Vector3(0, .5f, 0);
            }
    }
}

и обычно это работает нормально; луч заканчивается на объекте (ну, не на объекте, если он перемещается, но если он (мышь) все еще остается на объекте), и объект перемещается в любое время и в любом месте, где я хочу, сохраняя одинаковое расстояние от меня (вперед, где это не то же самое расстояние, но, скажем, преобразование нормальное (0, 0, 1), оно останется в 1 на оси z). Но иногда (наблюдаемый в камере / плеере в 0, 15, -10 - с вращением 60 на x - и объект в 0, 1, 0) луч позади меня! и что еще более странно, вместо того, чтобы идти туда, где заканчивается Луч, он остается немного перед камерой ?! Я подумал: «Может быть, z на ScreenToWorldPoint отрицательно?», Но это не может быть, потому что x, z и y возводятся в квадрат и складываются вместе, чтобы получить величину. и распечатка даже подтверждает это, но по какой-то причине он меняется, когда я иногда перемещаю мышь. Я понятия не имею, что является причиной этого, поэтому любое понимание было бы очень полезно (пожалуйста, также, если можете, включите объяснение или любую информацию относительно того, почему это может произойти).

1 Ответ

1 голос
/ 22 февраля 2020

поэтому через некоторое время я понял, что Плутон был прав, мне нужно было использовать скалярное произведение вместо величины (xa * xb, ya * yb, za * zb). Извините, Плутон, спасибо за вашу помощь и ваше терпение со мной

...