Информация о магазине Raycast

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

Vector3 targetPos;

RaycastHit hit;
if (Physics.Raycast (pos, dir, out hit, 10, targetLayer)) {

    Vector3 moveDir = (hit.point - transform.position).normalized;
    targetPos = moveDir;
} else {
    targetPos = Vector3.zero;   
}

Таким образом, переменная targetPos всегда возвращается к нулю после освобождения аналога, даже если последний столкнувшийся объект был этим конкретным объектом.

Изменить: решено на основе комментария @MukeshSaini. Спасибо всем.


person Abdou023    schedule 18.05.2017    source источник
comment
Каков твой вопрос?   -  person Programmer    schedule 19.05.2017
comment
Используется ли в вашем коде выражение if? Вы можете подтвердить, сделав BreakPoint и отладив.   -  person Hristo    schedule 19.05.2017
comment
@Programmer, OP не хочет, чтобы значение targetPos становилось равным нулю после отпускания аналога. @ Abdou023, не могли бы вы поделиться дополнительным кодом, я думаю, вы используете raycast даже после того, как пользователь выпустил аналог, который может возвращать false для Physics.Raycast и устанавливать targetPos на Vector3.zero в блоке else.   -  person Mukesh Saini    schedule 19.05.2017
comment
@MukeshSaini Да, вы правы, raycast вызывали даже после выхода аналога. Мне удалось исправить это на основе вашего комментария, добавив логическую проверку. Вы должны дать ему ответ.   -  person Abdou023    schedule 19.05.2017


Ответы (1)


Я думаю, вы используете raycast даже после того, как пользователь выпустил аналог, который может возвращать false для Physics.Raycast и устанавливать targetPos на Vector3.zero в блоке else.

Вы можете поставить условие для raycast только тогда, когда пользователь использует аналог, который остановит выполнение ненужного блока else после того, как пользователь отпустит аналог, и targetPos сохранит свое правильное значение.

person Mukesh Saini    schedule 19.05.2017