у меня есть противник, а есть главный герой
пишу искусственный "интелект" для противника
для начала объявляю переменные 
[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();
        }
    }
но происходит немного неожиданное - он ведёт его непонятно куда.

(положения врага и персонажа)
 
по столкновению с персонажем, он должен переходить в режим агро(не обращайте внимание на слой, потом хочу сделать чтобы он не работал через препятствия и не обращайте внимание на передвижение, я просто всё стёр после того как тильтанул из-за луча, поэтому для проверки просто написал чтобы он поднимался на пункт)
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());
            
                }
            }
        }
и тут тоже самое, второй луч уже из агр состояния, тоже ведёт непонятно куда