Raycasting от одного объекта к другому - PullRequest
0 голосов
/ 14 мая 2018

Я пытаюсь привести луч от одного объекта к другому, но он не работает должным образом.

Результат:

enter image description here

Выбранный объект - «EnemyTank», и луч должен указывать на «PlayerTank», но это не так, как вы можете видеть.

Мой код:

void FixedUpdate () {
        Vector3 dir = player.transform.position - rayOrigin.transform.position;
        RaycastHit hitInfo;
        dir = dir.normalized;
        Debug.DrawRay(rayOrigin.transform.position, dir*maxCheckDistance,Color.red);
}

player переменная указывает на "PlayerTank"

Расположение Playertank:

enter image description here

Ответы [ 3 ]

0 голосов
/ 14 мая 2018

Итак, есть несколько проблем, которые я вижу, но прямо в точку:

FixedUpdate Работает с заданным интервалом, это не каждый кадр.Метод DrawRay() Имеет параметр длительности.по умолчанию он равен 0. Это означает, что он будет виден только для одного кадра.У вас есть 2 варианта, которые вы можете передать за длительность, или вы можете поместить этот метод в update, который запускает каждый кадр.

void Update () {
        Vector3 dir = player.transform.position - rayOrigin.transform.position;
        dir = dir.normalized;
        Debug.DrawRay(rayOrigin.transform.position, dir*maxCheckDistance,Color.red);
}

Однако, если вы пытаетесь нарисовать линию от одного объекта к другомупросто используйте Debug.DrawLine()

Debug.DrawLine(rayOrigin.transform.position, player.transform.position, Color.red);

Наконец, избегайте использования цвета для вашей линии, который совпадает с одним из ваших объектов, я имею в виду ваш красный куб и красную линию.Используйте цвет, который будет выделяться.В этом случае произнесите черный цвет.

Пример FixedUpdate:

void FixedUpdate () {
        Vector3 dir = player.transform.position - rayOrigin.transform.position;
        dir = dir.normalized;
        Debug.DrawRay(rayOrigin.transform.position, dir*maxCheckDistance,Color.red, 1.0f);
}

Ради интереса, чтобы линия меняла цвета, используя значение maxCheckDistance:

void Update () {
    Color lineColor = color.Black;
    if(Vector3.Distance(rayOrigin.transform.position, player.transform.position) < maxCheckDistance) {
        lineColor = color.White;
    }
    Debug.DrawLine(rayOrigin.transform.position, player.transform.position, lineColor);
}

РЕДАКТИРОВАТЬ:

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

0 голосов
/ 14 мая 2018

Параметр direction в DrawRay - это вектор в глобальном пространстве.Таким образом, ваш луч всегда более или менее указывает на источник.

Извините, мой ответ неверен.

0 голосов
/ 14 мая 2018

Из вашего описания и скриншота.

Вы хотите нарисовать луч из "EnemyTank" в "PlayerTank".

и в вашем коде "PlayerTank" равен player, а "EnemyTank" равен rayOrigin.

Там нарисовал маленький луч из "EnemyTank" в каком-то другом направлении. Так что вы определенно не можете определить свой «PlayerTank» в player объекте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...