Raycast ничего не попал - PullRequest
       6

Raycast ничего не попал

0 голосов
/ 07 марта 2019

Raycast даже не дает Debug.Log("it hit something, в то время как Debug.DrawRay делает линию между врагом и игроком.

Враг, который использует следующий скрипт, находится на слое «Игнорировать Raycast», а игрок, на которого он пытается попасть, находится на слое «По умолчанию».

void FixedUpdate() {
    RaycastHit hit;
    Vector2 diff = PlayerMovement.playerTransform.position - transform.position;
    Ray raycastToPlayer = new Ray(transform.position, diff);
    Debug.Log(raycastToPlayer);
    Debug.DrawRay(transform.position, diff, Color.white, 0.01f, true);
    if (Physics.Raycast(raycastToPlayer, out hit)) {
        Debug.Log("it hit something");
        if (hit.collider != null) {
            Debug.Log(hit.collider.gameObject.name);
            if (hit.transform.tag == "Player"){
                float rotZ = Mathf.Atan2(diff.y, diff.x) * Mathf.Rad2Deg;
                transform.rotation = Quaternion.Euler(0f, 0f, rotZ);
            }
        }
    }
}

Ответы [ 2 ]

2 голосов
/ 07 марта 2019

Вы используете Vector2 позиции, поэтому я предполагаю, что ваша игра в 2D.Если это так, я считаю, что вам нужно использовать 2D-версии классов Physics (см. ЗДЕСЬ ):

void FixedUpdate() {

    Vector2 diff = (PlayerMovement.playerTransform.position - transform.position).Normalized;
    RaycastHit2D hit = Physics2D.Raycast(transform.position, diff);

    Debug.DrawRay(transform.position, diff, Color.white, 0.01f, true);

    if (hit.collider != null) {
        Debug.Log("Raycast hit: " + hit.collider.gameObject.name);
        if (hit.transform.tag == "Player") {
            float rotZ = Mathf.Atan2(diff.y, diff.x) * Mathf.Rad2Deg;
            transform.rotation = Quaternion.Euler(0f, 0f, rotZ);
        }
    }
}
2 голосов
/ 07 марта 2019

Для используемого вами конструктора Ray направление должно быть Vector3:

https://docs.unity3d.com/ScriptReference/Ray.html

Но в вашем коде вы передаете Vector2.Если это 2D-игра, вам следует использовать другой конструктор:

https://docs.unity3d.com/ScriptReference/Ray2D-ctor.html

Кроме того, и, как они уже указывали в комментариях, вам нужно будет перейти по физике.Raycast параметр maxDistance луча:

  • луч Начальная точка и направление луча.
  • hitInfo Если возвращено значение truehitInfo будет содержать больше информации о том, где был поражен коллайдер.(См. Также: RaycastHit).
  • maxDistance Максимальное расстояние, которое луч должен проверять на наличие столкновений.

А если вы хотите использовать слои, дополнительный параметрпотребуется:

  • layerMask Маска слоя, используемая для выборочного игнорирования коллайдеров при наведении луча.

https://docs.unity3d.com/ScriptReference/Physics.Raycast.html

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