Почему мой GameObject движется вдоль луча, который я кастую, когда я установил transform.position = hit.point? Единство 3D - PullRequest
0 голосов
/ 26 октября 2019

Я пытаюсь заставить объект следовать за моей мышью вдоль поверхностей в моей игре. В игре есть пол и другие объекты. Объект всегда должен быть на полу или на одном из других объектов. Я хочу, чтобы положение объекта изменилось на то, куда перемещается мышь. Я делаю это, отливая луч от мыши. Когда луч попадает на коллайдер, положение объекта должно измениться на то место, где оно попало.

Когда я нажимаю на кнопку воспроизведения, объект движется вдоль луча, который отбрасывается, начиная со столкновения (точка удара) и двигаясь к камере. Как только он достигает камеры, он начинается заново в точке попадания и повторяется. Когда я перемещаю мышь, положение объекта изменяется на новую точку удара и перемещается к камере. Значение hit.point изменяется в журнале разработчиков, когда я перемещаю мышь, как следует, и когда мышь остается неподвижной, значение не изменяется, даже если объект все еще движется к камере. Почему это происходит? Похоже, потому что значение transform.position установлено в hit.point и никогда не изменяется в другом месте кода, так что позиция всегда должна быть hit.point.

Это код, прикрепленный к движущемуся объекту. :

public class FollowCursor : MonoBehaviour
{
    void Update()
    {
        RaycastHit hit;
        Ray ray;
        int layerMask = 1 << 8;
        layerMask = ~layerMask;
        ray = Camera.main.ScreenPointToRay(Input.mousePosition);
        if (Physics.Raycast(ray, out hit))
            transform.position = hit.point;
        Debug.Log(hit.point);
    }
}

Это скриншот моей иерархии и сцены. Белая сфера - это объект, который движется. Пол, о котором я говорил, это песок на дне резервуара. Я хочу, чтобы объект находился на песке или на одном из других объектов. Слой 8 - это сам резервуар, который исключен из радиопередачи, потому что я не хочу, чтобы объект был на резервуаре.

1 Ответ

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

Поскольку у вашего GameObject также есть коллайдер

Луч падает на землю. Объект идет туда

В следующем кадре луч попадает на объект. Объект перемещается туда (луч попадает на поверхность, ось находится в центре, поэтому он движется к камере на величину, равную радиусу коллайдера, на основании вашего снимка экрана он выглядит как 0,5 единицы).

Повторите.

Лучший способ исправить это - поместить вашу землю на свой собственный слой и raycast только против слоев, которые вы хотите, чтобы луч достиг , используя LayerMask.

...