Перемещение GameObject с позицией попадания RayCast заставляет объект двигаться в направлении начальной позиции Raycast - PullRequest
0 голосов
/ 31 августа 2018

У меня есть RayCast, представленный LineRenderer в Unity, поэтому он выглядит как лазер. Я хочу, чтобы этот лазер перемещал объекты, с которыми сталкивается, так, чтобы объект следовал за hit.point удара Raycast.

Мой код не работает, потому что я перемещаю эти GameObjects в hit.point, что заставляет объект приближаться к начальной точке Raycast, потому что вычисляется новый hit.point, так как объект перемещается в hit.point. Я понимаю, почему это происходит, но я не уверен, как заставить объект двигаться с помощью Raycast, но не влияю на новую точку попадания.

Вот моя функция обновления в моем скрипте, прикрепленная к моему Laser GameObject. Кто-нибудь знает, как я могу исправить свой код так, чтобы объект двигался с точкой удара?

void Update()
    {
        Vector3 target = calculateDeltaVector();
        lr.SetPosition(0, palm.transform.position);
        RaycastHit hit;
        if (Physics.Raycast(palm.transform.position, target , out hit))
        {
            if (hit.collider)
            {
                lr.SetPosition(1, hit.point);
                if (hit.transform.gameObject.tag == "Chair")
                {
                    GameObject chair = hit.transform.gameObject;
                    // !!! move object to hit point, problem HERE
                    chair.transform.position = hit.point;
                    hitLock = false;
                }
            }

        }
        else lr.SetPosition(1, target * 50);
    }

Ответы [ 2 ]

0 голосов
/ 31 августа 2018

Не знаю, но ваш код должен сдвинуть кресло к креслу, что, вероятно, заставит кресло подойти к вам.

Вы должны реализовать Begin и End raycast Move, например, с помощью щелчка мыши. Ниже приведен пример

public class Mover : MonoBehaviour
{
    public Collider selectedChair;

    void Update ()
    {
        Vector3 target = calculateDeltaVector();
        lr.SetPosition(0, palm.transform.position);
        RaycastHit hit;
        if (Physics.Raycast(palm.transform.position, target , out hit))
        {
            if (hit.collider)
            {
                lr.SetPosition(1, hit.point);
                if (hit.transform.gameObject.tag == "Chair" && Input.GetMouseButton(0)) //if you want to move it you have to click mouse button first
                {
                    selectedChair = hit.collider;
                    hit.collider.enabled = false; //disable the collider of currently selected chair so it won't go towards you
                }

                if (selectedChair)
                {
                    // !!! move object to hit point, problem HERE
                    selectedChair.transform.position = hit.point;
                    hitLock = false;
                }

                if (Input.GetMouseButton(0))
                {
                    selectedChair.enabled true;
                    selectedChair = null; //release it
                }
            }

        }
        else lr.SetPosition(1, target * 50);
    }
}
0 голосов
/ 31 августа 2018

В Unity Inspector вы можете выбрать объект и изменить слой на «2: Ignore Raycast». Это заставит raycast игнорировать объект и пройти через него.

...