Как сделать движение условного врага к игроку в юнити (RigidBody2d)
Я много где искал ответ и находил то что мне не совсем нужно. У меня есть игра видом Сверху, в ней расположен игрок и враг, враг должен преследовать игрока. Внимание, не через Transform а через RigidBody2D, т.е как видно враг должен преследовать игрока и просто долбиться в него. Мне не нужно ничего лишнего. Я пытался написать ИИ для врага используя уже написанный заранее скрипт передвижения игрока но таки не разобрался с направлением.
Вот код движения игрока по которому я хотел сделать ИИ врагу.
Цель: Сделать движение врага к игроку без использования Transform.
public class PlayerMove : MonoBehaviour
{
private Vector2 MoveObject;
private Rigidbody2D PhysicalMove;
private int PlayerSpeed = 10;
void Start()
{
PhysicalMove = GetComponent<Rigidbody2D>();
}
void Update()
{
Vector2 InputData = new Vector2(Input.GetAxisRaw("Horizontal"), Input.GetAxisRaw("Vertical"));
MoveObject = InputData.normalized * PlayerSpeed;
}
private void FixedUpdate()
{
PhysicalMove.MovePosition(PhysicalMove.position + MoveObject * Time.fixedDeltaTime);
}
}
Ответы (1 шт):
Пример того как можно решить данную задачу:
Скрипт вешаем на противника, в поле player указываем игрока.
public Transform player;
private Rigidbody2D rb;
private Vector2 movement;
private int speed = 5;
void Start()
{
rb = this.GetComponent<Rigidbody2D>();
}
void Update()
{
Vector3 direction = player.position - transform.position;
float angle = Mathf.Atan2(direction.y, direction.x) * Mathf.Rad2Deg;
direction.Normalize();
movement = direction;
}
private void FixedUpdate()
{
MoveChar(movement);
}
private void MoveChar(Vector2 direction)
{
rb.MovePosition((Vector2)transform.position + (direction * speed * Time.deltaTime));
}
}```