Linecast всегда возвращает истину

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

Мой сценарий:

public class Enemy1 : MonoBehaviour {

Rigidbody2D myBody;
Transform myTransf;
public LayerMask enemyMask;

float myWidth;
public float speed;

// Use this for initialization
void Start () {
    myTransf = this.transform;
    myBody = this.GetComponent<Rigidbody2D>();
    myWidth = this.GetComponent<SpriteRenderer>().bounds.extents.x;

}

// Update is called once per frame
void FixedUpdate () {
    // checking if theres any walls or edges, if so, flip
    Vector2 lineCastPos = myTransf.position - myTransf.right * myWidth;
    Debug.DrawLine(lineCastPos, lineCastPos + Vector2.down);
    bool isGrounded = Physics2D.Linecast(lineCastPos, lineCastPos + Vector2.down, enemyMask);
    Debug.DrawLine(lineCastPos, lineCastPos - myTransf.right.toVector2() *0.1f);
    bool isBlocked = Physics2D.Linecast(lineCastPos, lineCastPos - myTransf.right.toVector2() * 0.1f, enemyMask);
    RaycastHit2D hit = Physics2D.Linecast(lineCastPos, lineCastPos - myTransf.right.toVector2());

    if (!isGrounded || !isBlocked)
        {
        Vector3 currRot = myTransf.eulerAngles;
        currRot.y += 180;
        myTransf.eulerAngles = currRot;
        Debug.Log("Ray Hit: " + hit.point);
    }

    //moving left always
    Vector2 myVel = myBody.velocity;
    myVel.x = -myTransf.right.x * speed;
    myBody.velocity = myVel;

}

}

Примечание: журнал RayCastHit2D дает мне точку 0,0, 0,0 (выделено красной точкой на моем скриншоте), и там ничего не сидит, только основная камера.

Извините, если проблема не в этом, но этот if (!isGrounded || !isBlocked) мне кажется подозрительным: вы имеете в виду if (!isGrounded && !isBlocked)?

Andrea 10.05.2018 10:59

Я перешел на &&, и проблема все еще сохраняется, в любом случае спасибо за ввод ^^

Mauricio Salvino 13.05.2018 07:40
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
2
87
0

Другие вопросы по теме