@niklazh
да.

Почему Rayсast в Unity неправильно выстраивает луч?

у меня есть противник, а есть главный герой
пишу искусственный "интелект" для противника

для начала объявляю переменные
[SerializeField] private float Raydistance;
    [SerializeField] private LayerMask layer;
    private bool canMove;
    private Vector2 direction;
    [SerializeField] private Rigidbody2D skeleton;
    [SerializeField] private Rigidbody2D rghero;


добавляю Rigidbody2D в старте (Rigitbody2D персонажа перетаскиваю в самом Unity - rghero)

void Start()
    {
        skeleton = GetComponent<Rigidbody2D>();
        canMove = true;
        IsAgro = false;
    }


в апдейте просто собираю собираю данные положения персонажа и начинаю основную функцию ожидания врага

void Update()
    {
        direction.x = rghero.position.x;
        direction.y = rghero.position.y;
        waiting();

    }


в самой функции пока не много чего, остальное планировал добавить позже, но проблемы начинаются уже тут, а именно неправильная отрисовка луча, по коду(точнее по моей задумке), он должен из центра противника вести луч в центр персонажа
void waiting()
    {
        RaycastHit2D hit = Physics2D.Raycast(skeleton.position, direction, Raydistance, layer);

        Debug.DrawRay(skeleton.position, direction, UnityEngine.Color.red);
        print(skeleton.position);
        print(rghero.position);

        if (hit.collider != null)
        {
            agro();
        }
    }


но происходит немного неожиданное - он ведёт его непонятно куда.
658fedf4d676c798361678.png
(положения врага и персонажа)
658feefae8c1b842864883.png

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

void agro()
        {
            RaycastHit2D hit2 = Physics2D.Raycast(skeleton.position, direction, 5, layer);


            Debug.DrawRay(skeleton.position, direction, UnityEngine.Color.green);

            if (canMove == true)
            {
                if (hit2.collider != null)
                {



                    print("i found you");
                    skeleton.MovePosition(skeleton.position + new Vector2(0,1));
                    StartCoroutine(DelayMovement());



            


                }
            }

        }

и тут тоже самое, второй луч уже из агр состояния, тоже ведёт непонятно куда
  • Вопрос задан
  • 59 просмотров
Решения вопроса 1
freeExec
@freeExec
Участник OpenStreetMap
Ты неправильно считаешь направление луча. Если тебе надо направление "герой смотрит на врага", то нужно из координат врага вычесть координаты героя.
65902972cdc35897756673.png
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы