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